48 lines
1.2 KiB
Bash
48 lines
1.2 KiB
Bash
|
|
#!/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"
|