From 8378296b6ed76d020693871f897d9ff642cbc11b Mon Sep 17 00:00:00 2001 From: mscadm Date: Mon, 13 Jul 2026 14:57:51 +0000 Subject: [PATCH] Deploy: taeglicher pg_dump-Backup ausserhalb des Containers (Host-Verzeichnis, Rotation 14 Tage) --- deploy/backup.sh | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 deploy/backup.sh diff --git a/deploy/backup.sh b/deploy/backup.sh new file mode 100644 index 0000000..0b8af4d --- /dev/null +++ b/deploy/backup.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# ITSM: taeglicher PostgreSQL-Backup, ausserhalb des Containers auf dem Host +# abgelegt (Verzeichnis unter /docker/itsm/backups, kein Docker-Volume). +# Grund: das Live-Datenverzeichnis (pgdata) ist zwar schon ein Host-Bind-Mount, +# schuetzt aber nicht vor Korruption oder versehentlichem Loeschen -- ein +# separater, komprimierter Dump-Snapshot ist der eigentliche Wiederherstellungs- +# punkt (Nutzer-Vorgabe 2026-07-13: "nichtveraenderliche Daten ausserhalb des +# Docker-Containers"). +# +# Aufruf per Cron (siehe crontab -l), z. B. taeglich 03:00 UTC: +# 0 3 * * * /docker/itsm/backup.sh >> /docker/itsm/backup.log 2>&1 +set -e + +BACKUP_DIR=/docker/itsm/backups +RETAIN_DAYS=14 +STAMP=$(date -u +%Y%m%d-%H%M%S) +OUT="$BACKUP_DIR/itsm-$STAMP.sql.gz" + +mkdir -p "$BACKUP_DIR" + +echo "[backup] $(date -u) -- starte Dump nach $OUT" +docker exec itsm_postgres pg_dump -U itsm -d itsm | gzip > "$OUT.tmp" +mv "$OUT.tmp" "$OUT" +echo "[backup] fertig: $(du -h "$OUT" | cut -f1)" + +echo "[backup] entferne Backups aelter als $RETAIN_DAYS Tage" +find "$BACKUP_DIR" -name 'itsm-*.sql.gz' -mtime +"$RETAIN_DAYS" -print -delete + +echo "[backup] aktueller Bestand:" +ls -lh "$BACKUP_DIR" | tail -n +2