#!/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"