Prüfung / pruefung (push) Canceled after 0s
deploy/update.sh und deploy/backup.sh konnten nur Docker. Beide erkennen die Installationsart jetzt selbst und beherrschen auch die Installation als Dienst: npm ci, prisma migrate deploy, bauen, systemctl restart - und pg_dump ueber DATABASE_URL fuer die Sicherung. Beim Durchspielen gegen einen laufenden Stapel zwei Fehler gefunden: 1. Die Zustandspruefung des Web-Containers konnte nie gelingen. Next bindet im Standalone-Modus an die Adresse aus HOSTNAME, und Docker setzt dort den Containernamen - der Server lauschte nur auf der Container-IP. Der Dienst web blieb dauerhaft auf "health: starting". Behoben mit ENV HOSTNAME=0.0.0.0; geprueft wird jetzt ueber 127.0.0.1. 2. Eine fehlgeschlagene Sicherung hielt die Aktualisierung nicht auf. Jetzt bricht sie ab, bevor etwas veraendert wird, und nennt die Auswege. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
73 lines
2.4 KiB
Bash
Executable File
73 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# Sichert Datenbank, hochgeladene PDFs und die Konfiguration von ProxLedger.
|
||
# Erkennt selbst, ob die Installation mit Docker oder als Dienst im Container läuft.
|
||
#
|
||
# ./backup.sh /pfad/zum/sicherungsordner
|
||
#
|
||
# Für regelmäßige Sicherungen in die Crontab eintragen, z. B. täglich um 02:30 Uhr:
|
||
# 30 2 * * * /opt/proxledger/deploy/backup.sh /var/backups/proxledger
|
||
|
||
set -o errexit
|
||
set -o nounset
|
||
set -o pipefail
|
||
|
||
ZIEL="${1:-/var/backups/proxledger}"
|
||
AUFBEWAHRUNG_TAGE="${AUFBEWAHRUNG_TAGE:-30}"
|
||
STAND=$(date +%Y%m%d-%H%M%S)
|
||
VERZEICHNIS="${COMPOSE_VERZEICHNIS:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}"
|
||
|
||
mkdir -p "$ZIEL"
|
||
cd "$VERZEICHNIS"
|
||
|
||
# Siehe deploy/update.sh – der Dienst ist das eindeutigere Merkmal.
|
||
if systemctl cat proxledger.service >/dev/null 2>&1; then
|
||
ART="dienst"
|
||
else
|
||
ART="docker"
|
||
fi
|
||
|
||
echo "Sichere ProxLedger (${ART}) nach ${ZIEL} …"
|
||
|
||
if [ "$ART" = "docker" ]; then
|
||
echo "Sichere Datenbank …"
|
||
docker compose exec -T postgres pg_dump -U "${POSTGRES_USER:-proxledger}" "${POSTGRES_DB:-proxledger}" \
|
||
| gzip > "${ZIEL}/datenbank-${STAND}.sql.gz"
|
||
|
||
echo "Sichere hochgeladene Dateien …"
|
||
docker compose run --rm -T --entrypoint tar web -czf - /data/uploads > "${ZIEL}/uploads-${STAND}.tar.gz" 2>/dev/null || true
|
||
else
|
||
# DATABASE_URL steht in der .env; pg_dump versteht sie direkt.
|
||
# shellcheck disable=SC1091
|
||
set -o allexport
|
||
. ./.env
|
||
set +o allexport
|
||
|
||
[ -n "${DATABASE_URL:-}" ] || {
|
||
echo "DATABASE_URL fehlt in der .env – ohne sie keine Sicherung." >&2
|
||
exit 1
|
||
}
|
||
|
||
echo "Sichere Datenbank …"
|
||
pg_dump "$DATABASE_URL" | gzip > "${ZIEL}/datenbank-${STAND}.sql.gz"
|
||
|
||
echo "Sichere hochgeladene Dateien …"
|
||
UPLOADS="${UPLOAD_DIR:-${VERZEICHNIS}/data/uploads}"
|
||
if [ -d "$UPLOADS" ]; then
|
||
tar -czf "${ZIEL}/uploads-${STAND}.tar.gz" -C "$(dirname "$UPLOADS")" "$(basename "$UPLOADS")"
|
||
else
|
||
echo " (kein Upload-Verzeichnis unter ${UPLOADS})"
|
||
fi
|
||
fi
|
||
|
||
echo "Sichere Konfiguration …"
|
||
cp .env "${ZIEL}/env-${STAND}.txt"
|
||
chmod 600 "${ZIEL}/env-${STAND}.txt"
|
||
|
||
echo "Entferne Sicherungen älter als ${AUFBEWAHRUNG_TAGE} Tage …"
|
||
find "$ZIEL" -maxdepth 1 -name "*-*.sql.gz" -mtime "+${AUFBEWAHRUNG_TAGE}" -delete
|
||
find "$ZIEL" -maxdepth 1 -name "*-*.tar.gz" -mtime "+${AUFBEWAHRUNG_TAGE}" -delete
|
||
find "$ZIEL" -maxdepth 1 -name "env-*.txt" -mtime "+${AUFBEWAHRUNG_TAGE}" -delete
|
||
|
||
echo "Fertig: ${ZIEL}"
|
||
ls -lh "$ZIEL" | tail -n 5
|