Steuerkram/scripts/migrate-datenverzeichnis.sh

67 lines
2.3 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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/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."