#!/bin/bash # Backup script for /opt/infra # Run daily via cron BACKUP_DIR=/opt/backups RETENTION_DAYS=7 TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/infra_backup_$TIMESTAMP.tar.gz" mkdir -p "$BACKUP_DIR" # Create backup tar -czf "$BACKUP_FILE" -C /opt infra 2>/dev/null # Backup Docker volumes for vol in infra_caddy_data infra_caddy_config infra_gitea_data infra_gitea_config infra_uptime_kuma_data; do vol_path=$(sudo docker volume inspect $vol --format '{{.Mountpoint}}' 2>/dev/null) if [ -n "$vol_path" ] && [ -d "$vol_path" ]; then vol_backup="$BACKUP_DIR/${vol}_${TIMESTAMP}.tar.gz" sudo tar -czf "$vol_backup" -C "$vol_path" . 2>/dev/null fi done # Cleanup old backups find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete 2>/dev/null echo "Backup completed: $BACKUP_DIR ($(du -sh $BACKUP_DIR | cut -f1))"