28 lines
875 B
Bash
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))"
|