Files

28 lines
875 B
Bash

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