67 lines
2.4 KiB
Bash
Executable file
67 lines
2.4 KiB
Bash
Executable file
#!/bin/sh
|
||
# Verschiebt die Nutzdaten aus der alten Struktur (./uploads mit Unterordner logo/)
|
||
# in die getrennten Verzeichnisse ./data/belege und ./data/logo.
|
||
#
|
||
# Idempotent: Ein zweiter Lauf findet nichts mehr zu tun und meldet das.
|
||
# Vor dem Lauf die Container stoppen: docker compose down
|
||
#
|
||
# ./scripts/migrate-datenverzeichnis.sh
|
||
#
|
||
# Die Belegdateien gehören www-data (uid 33), nicht dem angemeldeten Benutzer.
|
||
# Der eigentliche Umzug läuft deshalb in einem kurzlebigen Container als root –
|
||
# das vermeidet sudo und funktioniert auf jedem Host gleich.
|
||
|
||
set -eu
|
||
|
||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||
|
||
echo "Projektverzeichnis: $ROOT"
|
||
|
||
mkdir -p "$ROOT/data/belege" "$ROOT/data/logo"
|
||
|
||
# Historischer Sonderfall: Vor dem Umzug aus dem Web-Root landete das Logo in
|
||
# public/static/uploads/logo. Falls dort noch etwas liegt, zuerst herüberholen.
|
||
ALT_WEBROOT="$ROOT/public/static/uploads"
|
||
if [ -d "$ALT_WEBROOT/logo" ]; then
|
||
for f in "$ALT_WEBROOT"/logo/*; do
|
||
[ -e "$f" ] || continue
|
||
echo "Logo aus Web-Root: $(basename "$f") -> data/logo/"
|
||
cp -p "$f" "$ROOT/data/logo/" && rm -f "$f"
|
||
done
|
||
rmdir "$ALT_WEBROOT/logo" 2>/dev/null || true
|
||
rmdir "$ALT_WEBROOT" 2>/dev/null || true
|
||
fi
|
||
|
||
if [ ! -d "$ROOT/uploads" ]; then
|
||
echo "Kein altes Verzeichnis $ROOT/uploads vorhanden – nichts weiter zu verschieben."
|
||
exit 0
|
||
fi
|
||
|
||
if ! command -v docker >/dev/null 2>&1; then
|
||
echo "Fehler: docker nicht gefunden. Bitte den Umzug manuell als root durchführen:" >&2
|
||
echo " mv uploads/logo/* data/logo/ && mv uploads/* data/belege/" >&2
|
||
exit 1
|
||
fi
|
||
|
||
docker run --rm \
|
||
-v "$ROOT/uploads:/alt" \
|
||
-v "$ROOT/data:/neu" \
|
||
-v "$ROOT/scripts:/skripte:ro" \
|
||
alpine:3 sh -eu -c '
|
||
mkdir -p /neu/belege /neu/logo
|
||
|
||
# Gemeinsame Übernahme-Logik – dieselbe, die auch beim Container-Start läuft.
|
||
sh /skripte/intern/uploads-uebernahme.sh /alt /neu/belege /neu/logo || true
|
||
|
||
chown -R 33:33 /neu/belege /neu/logo
|
||
|
||
echo
|
||
echo "data/belege: $(find /neu/belege -type f | wc -l) Datei(en)"
|
||
echo "data/logo: $(find /neu/logo -type f | wc -l) Datei(en)"
|
||
'
|
||
|
||
rmdir "$ROOT/uploads" 2>/dev/null || echo "Hinweis: $ROOT/uploads ist nicht leer und bleibt bestehen."
|
||
|
||
echo
|
||
echo "Weiter mit: docker compose up -d --build"
|
||
echo "Die Pfad-Migration in der Datenbank (089) läuft beim Container-Start automatisch."
|