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