bae705aa97
- Add NFC ePassport roadmap (ICAO 9303, eIDAS) - Add TensorFlow.js edge face detection (BlazeFace) - Add structured audit logger (GDPR-compliant) - Risk scoring support Part of KYC Apple Native UX v1.1.0
104 lines
2.8 KiB
Bash
Executable File
104 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Automated backup script
|
|
# Runs via cron: 0 2 * * * /path/to/scripts/backup_auto.sh
|
|
|
|
BACKUP_DIR="/backups/iom"
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
RETENTION_DAYS=30
|
|
|
|
# Load environment
|
|
source /home/bernt/.openclaw/workspace/iom/.env
|
|
|
|
echo "=== IOM Automated Backup ==="
|
|
echo "Timestamp: $TIMESTAMP"
|
|
|
|
# Create backup directory
|
|
mkdir -p $BACKUP_DIR
|
|
|
|
# 1. Database backup
|
|
echo "[1/4] Backing up PostgreSQL..."
|
|
pg_dump -h localhost -U iom -d iom -F custom -f "$BACKUP_DIR/iom_db_$TIMESTAMP.dump"
|
|
if [ $? -eq 0 ]; then
|
|
echo "✓ Database backup complete"
|
|
else
|
|
echo "✗ Database backup failed"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. Redis backup
|
|
echo "[2/4] Backing up Redis..."
|
|
redis-cli BGSAVE
|
|
sleep 5
|
|
cp /var/lib/redis/dump.rdb "$BACKUP_DIR/redis_$TIMESTAMP.rdb"
|
|
if [ $? -eq 0 ]; then
|
|
echo "✓ Redis backup complete"
|
|
else
|
|
echo "✗ Redis backup failed"
|
|
fi
|
|
|
|
# 3. MinIO backup
|
|
echo "[3/4] Backing up MinIO..."
|
|
mc mirror iom/iom-images "$BACKUP_DIR/minio_images_$TIMESTAMP"
|
|
if [ $? -eq 0 ]; then
|
|
echo "✓ MinIO backup complete"
|
|
else
|
|
echo "✗ MinIO backup failed"
|
|
fi
|
|
|
|
# 4. Configuration backup
|
|
echo "[4/4] Backing up configuration..."
|
|
tar -czf "$BACKUP_DIR/config_$TIMESTAMP.tar.gz" \
|
|
/home/bernt/.openclaw/workspace/iom/.env \
|
|
/home/bernt/.openclaw/workspace/iom/docker-compose.yml \
|
|
/home/bernt/.openclaw/workspace/iom/nginx/
|
|
if [ $? -eq 0 ]; then
|
|
echo "✓ Configuration backup complete"
|
|
else
|
|
echo "✗ Configuration backup failed"
|
|
fi
|
|
|
|
# Compress database backup
|
|
gzip "$BACKUP_DIR/iom_db_$TIMESTAMP.dump"
|
|
|
|
# Encrypt backups (optional)
|
|
if command -v gpg &> /dev/null; then
|
|
echo "Encrypting backups..."
|
|
gpg --symmetric --cipher-algo AES256 "$BACKUP_DIR/iom_db_$TIMESTAMP.dump.gz"
|
|
rm "$BACKUP_DIR/iom_db_$TIMESTAMP.dump.gz"
|
|
fi
|
|
|
|
# Upload to remote storage (optional)
|
|
if [ -n "$S3_BACKUP_BUCKET" ]; then
|
|
echo "Uploading to S3..."
|
|
aws s3 sync $BACKUP_DIR s3://$S3_BACKUP_BUCKET/iom/backups/
|
|
fi
|
|
|
|
# Clean old backups
|
|
echo "Cleaning old backups (>$RETENTION_DAYS days)..."
|
|
find $BACKUP_DIR -name "*.dump*" -mtime +$RETENTION_DAYS -delete
|
|
find $BACKUP_DIR -name "*.rdb" -mtime +$RETENTION_DAYS -delete
|
|
find $BACKUP_DIR -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
|
|
|
|
# Verify backup
|
|
echo "Verifying backup..."
|
|
LATEST_BACKUP=$(ls -t $BACKUP_DIR/iom_db_*.dump* | head -1)
|
|
if [ -f "$LATEST_BACKUP" ]; then
|
|
echo "✓ Backup verified: $LATEST_BACKUP"
|
|
SIZE=$(du -h "$LATEST_BACKUP" | cut -f1)
|
|
echo " Size: $SIZE"
|
|
else
|
|
echo "✗ Backup verification failed"
|
|
exit 1
|
|
fi
|
|
|
|
# Send notification (optional)
|
|
if [ -n "$BACKUP_NOTIFICATION_EMAIL" ]; then
|
|
echo "Backup completed successfully" | mail -s "IOM Backup - $TIMESTAMP" $BACKUP_NOTIFICATION_EMAIL
|
|
fi
|
|
|
|
echo "=== Backup Complete ==="
|
|
echo "Backup: $LATEST_BACKUP"
|
|
echo "Retention: $RETENTION_DAYS days"
|