#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT="$(dirname "$SCRIPT_DIR")" COMPOSE="$ROOT/compose/docker-compose.yml" ENV="$ROOT/.env" BACKUP_DIR="$ROOT/backups" MAX_BACKUPS=2 # shellcheck source=/dev/null source "$ENV" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") TARGET="$BACKUP_DIR/backup_$TIMESTAMP" mkdir -p "$TARGET" echo "[backup] Starte Backup → $TARGET" # PostgreSQL dump echo "[backup] Datenbank-Dump..." docker compose -f "$COMPOSE" exec -T postgres \ pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB" \ > "$TARGET/postgres.sql" # n8n data echo "[backup] n8n Datendirectory..." tar -czf "$TARGET/n8n-data.tar.gz" -C "$ROOT/data" n8n # Compose-Konfiguration echo "[backup] Compose + .env..." cp "$COMPOSE" "$TARGET/docker-compose.yml" cp "$ENV" "$TARGET/.env" echo "[backup] Backup abgeschlossen: $TARGET" # Retention: nur die letzten MAX_BACKUPS behalten EXISTING=$(ls -dt "$BACKUP_DIR"/backup_* 2>/dev/null) COUNT=$(echo "$EXISTING" | wc -l) if [ "$COUNT" -gt "$MAX_BACKUPS" ]; then TO_DELETE=$(echo "$EXISTING" | tail -n +"$((MAX_BACKUPS + 1))") echo "[backup] Lösche alte Backups:" echo "$TO_DELETE" echo "$TO_DELETE" | xargs rm -rf fi echo "[backup] Fertig. Aktuelle Backups:" ls -lht "$BACKUP_DIR"