Files
florian.wildeandClaude Opus 5 86f1fbeb50
CI / pruefen (push) Has been cancelled
fix(scripts): Ausfuehrbarkeitsbit im Git setzen
Die Shell-Skripte lagen als 100644 im Index. Nach einem frischen Clone auf
dem Server scheiterte damit jedes "./scripts/setup.sh" und "./scripts/update.sh"
an fehlender Berechtigung; wer sich mit chmod +x behalf, hatte danach ein
schmutziges Arbeitsverzeichnis, und genau daran brach update.sh ab.

Unter Windows faellt das nicht auf, weil core.filemode dort auf false steht --
das Bit muss deshalb mit "git update-index --chmod=+x" gesetzt werden. Auch
docker/entrypoint.sh bekommt es; der Dockerfile-Aufruf chmod +x bleibt als
zweiter Riegel bestehen.

Ausserdem sagt update.sh jetzt, welche Dateien geaendert sind, statt nur zu
melden, dass etwas nicht sauber ist. Wer die Meldung liest, soll nicht erst
"git status" nachschlagen muessen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 10:13:56 +02:00

44 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
# ─────────────────────────────────────────────────────────────
# Byteweise Sicherung der Nebula-Datenbank mit pg_dump.
#
# Ergaenzt den JSON-Export im Adminbereich um eine vollstaendige
# Datenbanksicherung: Schema, Daten, Sequenzen, Indizes.
#
# Aufruf: ./scripts/backup.sh [Zielverzeichnis]
# ─────────────────────────────────────────────────────────────
set -eu
root="$(cd "$(dirname "$0")/.." && pwd)"
out_dir="${1:-$root/backups}"
container="${NEBULA_DB_CONTAINER:-nebula-db}"
user="nebula"
database="nebula"
if [ -f "$root/.env" ]; then
# Nur die beiden benoetigten Werte lesen, ohne die Datei auszufuehren.
value_of() {
sed -n "s/^[[:space:]]*$1[[:space:]]*=[[:space:]]*\"\{0,1\}\([^\"#]*\)\"\{0,1\}[[:space:]]*$/\1/p" \
"$root/.env" | tail -n 1
}
[ -n "$(value_of POSTGRES_USER)" ] && user="$(value_of POSTGRES_USER)"
[ -n "$(value_of POSTGRES_DB)" ] && database="$(value_of POSTGRES_DB)"
fi
if ! docker ps --filter "name=$container" --format '{{.Names}}' | grep -qx "$container"; then
echo "Container '$container' laeuft nicht. Zuerst 'docker compose up -d db' ausfuehren." >&2
exit 1
fi
mkdir -p "$out_dir"
stamp="$(date +%Y-%m-%d-%H%M%S)"
target="$out_dir/nebula-$stamp.sql"
echo "Sichere Datenbank '$database' aus Container '$container'..."
# --clean --if-exists macht die Datei fuer sich allein einspielbar.
docker exec "$container" pg_dump -U "$user" -d "$database" --clean --if-exists > "$target"
size="$(du -h "$target" | cut -f1)"
echo "Fertig: $target ($size)"
echo "Wiederherstellen mit: ./scripts/restore.sh \"$target\""