fix(deploy): postgres:18-Mount /var/lib/postgresql + backup ohne cron
Some checks failed
CI / Backend Tests (.NET) (push) Successful in 1m8s
CI / Frontend Tests (Node/Vite) (push) Successful in 9m35s
CI / Docker Build & Push (push) Successful in 1m28s
CI / Deploy auf TrueNAS (Custom App) (push) Failing after 3s

- db-Volume auf /var/lib/postgresql (v18 legt PGDATA in .../18/docker; Mount auf
  .../data laesst v18 nicht starten -> db unhealthy -> App-Rollback)
- Backup-Sidecar: Shell-Scheduler statt Alpine-crond (/etc/crontabs fehlt im
  Debian-postgres:18-Image -> Crash-Loop)

Verifiziert auf TrueNAS: Custom-App gerbilmanager RUNNING, 2370 Tiere, Port 8090.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-19 10:13:01 +02:00
parent 60214a7c92
commit 854da1a000
3 changed files with 28 additions and 11 deletions

View File

@@ -1,16 +1,28 @@
#!/bin/sh
# Backup-Sidecar Entrypoint
# Installiert den Cron-Job und startet crond im Vordergrund.
# ==========================
# Image-unabhaengiger Shell-Scheduler (kein cron noetig): laeuft im Vordergrund und
# stoesst backup.sh einmal taeglich zur konfigurierten Stunde an. Funktioniert auf
# Debian (postgres:18, GNU date) wie auf Alpine — der fruehere crond-Ansatz brauchte
# /etc/crontabs (Alpine-only) und crashte im Debian-Image.
set -e
# Cron-Job: taeglich um 03:00 Uhr
CRON_SCHEDULE="${BACKUP_CRON:-0 3 * * *}"
echo "$CRON_SCHEDULE /bin/sh /scripts/backup.sh >> /backups/backup.log 2>&1" > /etc/crontabs/root
BACKUP_HOUR="${BACKUP_HOUR:-3}" # Stunde (0-23) fuer das taegliche Backup
HHMM=$(printf '%02d:00' "$BACKUP_HOUR")
echo "[$(date)] Backup-Sidecar gestartet. Naechste Sicherung: $CRON_SCHEDULE"
echo "[$(date)] Backup-Sidecar gestartet (Shell-Scheduler, taeglich $HHMM)."
echo "[$(date)] Backup-Verzeichnis: /backups Fotos: /data/photos"
# Ersten Backup-Lauf direkt beim Start ausfuehren (optional, auskommentieren wenn unerwuenscht)
# /bin/sh /scripts/backup.sh
exec crond -f -l 6
while :; do
now=$(date +%s)
target=$(date -d "$HHMM" +%s 2>/dev/null || echo "")
if [ -z "$target" ]; then
# Fallback ohne GNU 'date -d': einfach 24h schlafen.
sleep 86400
else
[ "$target" -le "$now" ] && target=$(date -d "$HHMM tomorrow" +%s)
sleep "$((target - now))"
fi
echo "[$(date)] Starte Backup ..."
/bin/sh /scripts/backup.sh >> /backups/backup.log 2>&1 || echo "[$(date)] WARNUNG: backup.sh Exit $?"
done