Files
portainer-core/scripts/backup-configs.sh
T

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