75 lines
2.0 KiB
Bash
Executable File
75 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Backup Docker Configurations Script
|
|
# Creates timestamped backup of all Docker configs
|
|
|
|
set -e
|
|
|
|
BACKUP_DIR="/mnt/media/backups/tower-of-joy-configs"
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
BACKUP_PATH="${BACKUP_DIR}/backup_${TIMESTAMP}"
|
|
SOURCE_DIR="/home/jpmschweitzer/docker-data"
|
|
|
|
echo "=== Docker Configs Backup ==="
|
|
echo "Timestamp: $(date)"
|
|
echo ""
|
|
|
|
# Check if source exists
|
|
if [ ! -d "$SOURCE_DIR" ]; then
|
|
echo "❌ Source directory not found: $SOURCE_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
# Create backup directory
|
|
echo "[1/4] Creating backup directory..."
|
|
mkdir -p "$BACKUP_PATH"
|
|
echo "✅ Created: $BACKUP_PATH"
|
|
echo ""
|
|
|
|
# Backup Docker configs
|
|
echo "[2/4] Backing up Docker configs..."
|
|
rsync -av --progress "$SOURCE_DIR/" "$BACKUP_PATH/" --exclude='cache' --exclude='*.log'
|
|
echo "✅ Configs backed up"
|
|
echo ""
|
|
|
|
# Backup stack files
|
|
echo "[3/4] Backing up stack definitions..."
|
|
mkdir -p "$BACKUP_PATH/stacks"
|
|
cp -r /home/jpmschweitzer/Projects/tower-of-joy/stacks/*.yml "$BACKUP_PATH/stacks/" 2>/dev/null || true
|
|
echo "✅ Stack files backed up"
|
|
echo ""
|
|
|
|
# Create backup manifest
|
|
echo "[4/4] Creating backup manifest..."
|
|
cat > "$BACKUP_PATH/MANIFEST.txt" << EOF
|
|
Backup created: $(date)
|
|
Hostname: $(hostname)
|
|
Docker version: $(docker --version)
|
|
Containers backed up:
|
|
$(docker ps --format ' - {{.Names}} ({{.Image}})')
|
|
|
|
Backup size: $(du -sh "$BACKUP_PATH" | cut -f1)
|
|
EOF
|
|
echo "✅ Manifest created"
|
|
echo ""
|
|
|
|
# Cleanup old backups (keep last 30 days)
|
|
echo "[Cleanup] Removing backups older than 30 days..."
|
|
find "$BACKUP_DIR" -maxdepth 1 -type d -name "backup_*" -mtime +30 -exec rm -rf {} \; 2>/dev/null || true
|
|
remaining=$(find "$BACKUP_DIR" -maxdepth 1 -type d -name "backup_*" | wc -l)
|
|
echo "✅ Kept $remaining recent backups"
|
|
echo ""
|
|
|
|
echo "=== Backup Complete ==="
|
|
echo "Location: $BACKUP_PATH"
|
|
echo "Size: $(du -sh "$BACKUP_PATH" | cut -f1)"
|
|
echo ""
|
|
|
|
# Verify backup
|
|
if [ -d "$BACKUP_PATH" ] && [ -f "$BACKUP_PATH/MANIFEST.txt" ]; then
|
|
echo "✅ Backup verification passed"
|
|
exit 0
|
|
else
|
|
echo "❌ Backup verification failed"
|
|
exit 1
|
|
fi
|