#!/bin/bash # ========================================== # Meldestelle Backup Script # Sichert Datenbanken und Konfigurationen # ========================================== # .env laden (SSoT für alle Variablen) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" if [ -f "$PROJECT_ROOT/.env" ]; then set -a # shellcheck disable=SC1091 source "$PROJECT_ROOT/.env" set +a fi # Konfiguration (Defaults falls .env nicht vorhanden) BACKUP_DIR="${BACKUP_DIR:-$HOME/backups/meldestelle}" DATE=$(date +%Y-%m-%d_%H-%M-%S) RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-7}" PROJECT_NAME="${PROJECT_NAME:-meldestelle}" # Container Namen (müssen mit docker-compose übereinstimmen) DB_CONTAINER="${PROJECT_NAME}-postgres" DB_USER="${POSTGRES_USER:-pg-user}" # Verzeichnisse erstellen mkdir -p "$BACKUP_DIR" echo "🚀 Starte Backup: $DATE" # 1. PostgreSQL Dump echo " -> Erstelle Datenbank-Dump..." if docker exec "$DB_CONTAINER" pg_dumpall -U "$DB_USER" > "$BACKUP_DIR/db_dump_$DATE.sql"; then echo " ✅ DB Dump erfolgreich." gzip "$BACKUP_DIR/db_dump_$DATE.sql" else echo " ❌ FEHLER beim DB Dump!" # Optional: Mail senden oder Exit Code setzen fi # 2. Konfigurations-Dateien sichern (.env ist kritisch!) echo " -> Sichere Konfigurationen..." tar -czf "$BACKUP_DIR/config_$DATE.tar.gz" .env docker-compose.yaml dc-*.yaml config/ # 3. Alte Backups löschen (Rotation) echo " -> Lösche Backups älter als $RETENTION_DAYS Tage..." find "$BACKUP_DIR" -name "db_dump_*.sql.gz" -mtime +$RETENTION_DAYS -delete find "$BACKUP_DIR" -name "config_*.tar.gz" -mtime +$RETENTION_DAYS -delete echo "✅ Backup abgeschlossen: $BACKUP_DIR" ls -lh "$BACKUP_DIR" | grep "$DATE"