Kapitel 13/Tutorial.md aktualisiert

This commit is contained in:
2025-09-23 14:01:03 +00:00
parent 6fb23f8d9e
commit 67cb6831c6

View File

@@ -630,66 +630,82 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
Inhalt: Inhalt:
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
# /usr/local/bin/nc_finalize_vod # /usr/local/bin/nc_finalize_vod
set -euo pipefail set -euo pipefail
CONF="/etc/nc_uploader.conf" # ---- Konfigurationsdatei einbinden
[[ -f "$CONF" ]] || { echo "Config fehlt: $CONF" >&2; exit 1; } CONF="/etc/nc_uploader.conf"
# shellcheck disable=SC1090 [[ -f "$CONF" ]] || { echo "Config fehlt: $CONF" >&2; exit 1; }
source "$CONF" # shellcheck disable=SC1090
source "$CONF"
VOD_ID="${1:?need VOD id}" # ---- VOD-ID als Argument
VOD_ID="${1:?need VOD id}"
# ---- Eingaben & Pfade # ---- Eingaben & Pfade aus Config
DROP_BASE="${DROP_BASE:?DROP_BASE fehlt in Config}" DROP_BASE="${DROP_BASE:?DROP_BASE fehlt in Config}"
NC_DATA="${NC_DATA:?NC_DATA fehlt in Config}" NC_DATA="${NC_DATA:?NC_DATA fehlt in Config}"
NC_USER="${NC_USER:?NC_USER fehlt in Config}" NC_USER="${NC_USER:?NC_USER fehlt in Config}"
NC_TARGET_SUBPATH="${NC_TARGET_SUBPATH:?NC_TARGET_SUBPATH fehlt in Config}" NC_TARGET_SUBPATH="${NC_TARGET_SUBPATH:?NC_TARGET_SUBPATH fehlt in Config}"
PHP="${PHP:-/usr/bin/php}" PHP="${PHP:-/usr/bin/php}"
OCC="${OCC:-/var/www/nextcloud/occ}" OCC="${OCC:-/var/www/nextcloud/occ}"
CLIPPER_OUT="${CLIPPER_OUT:?CLIPPER_OUT fehlt in Config}"
SFTP_HOST="${SFTP_HOST:?}"
SFTP_PORT="${SFTP_PORT:?}"
SFTP_USER="${SFTP_USER:?}"
SFTP_KEY="${SFTP_KEY:?}"
SRC_DIR="${DROP_BASE}/${VOD_ID}" # ---- Abgeleitete Pfade
DST_BASE="${NC_DATA}/${NC_USER}/files" SRC_DIR="${DROP_BASE}/${VOD_ID}" # kann leer bleiben wird nicht mehr verwendet
DST_DIR="${DST_BASE}/${NC_TARGET_SUBPATH}/${VOD_ID}" DST_BASE="${NC_DATA}/${NC_USER}/files"
SCAN_PATH="${NC_USER}/files/${NC_TARGET_SUBPATH}/${VOD_ID}" DST_DIR="${DST_BASE}/${NC_TARGET_SUBPATH}"
SCAN_PATH="${NC_USER}/files/${NC_TARGET_SUBPATH}"
# ---- Vorbedingungen prüfen (wir legen KEINE Benutzerstruktur an!) # ---- Vorbedingungen prüfen
[[ -d "$NC_DATA" ]] || { echo "NC_DATA nicht gefunden: $NC_DATA" >&2; exit 2; } [[ -d "$NC_DATA" ]] || { echo "NC_DATA nicht gefunden: $NC_DATA" >&2; exit 2; }
[[ -d "$DST_BASE" ]] || { echo "Benutzerdateien fehlen: $DST_BASE (stimmt NC_USER/NC_DATA?)" >&2; exit 3; } [[ -d "$DST_BASE" ]] || { echo "Benutzerdateien fehlen: $DST_BASE (stimmt NC_USER/NC_DATA?)" >&2; exit 3; }
[[ -d "$SRC_DIR" ]] || { echo "Drop-Ordner fehlt: $SRC_DIR" >&2; exit 4; }
# ---- Ziel-Unterordner anlegen (falls nicht vorhanden) # ---- Archiv des gesamten VOD-Ordners erstellen (z.B. /srv/clipper/out/VOD123 → VOD123.tar.gz)
mkdir -p "$DST_DIR" ARCHIVE_NAME="${VOD_ID}.tar.gz"
chown -R www-data:www-data "$DST_BASE/$NC_TARGET_SUBPATH" ARCHIVE_PATH="${CLIPPER_OUT}/${ARCHIVE_NAME}"
# ---- Dateien/Ordner verschieben if [[ -f "$ARCHIVE_PATH" ]]; then
shopt -s nullglob dotglob echo "⚠️ Archiv existiert bereits: $ARCHIVE_PATH wird nicht erneut erstellt"
had_files=false else
for f in "${SRC_DIR}/"*; do echo "📦 Erstelle Archiv: $ARCHIVE_PATH"
had_files=true tar -czf "$ARCHIVE_PATH" -C "$CLIPPER_OUT" "$VOD_ID"
mv -f "$f" "$DST_DIR/" echo "✅ Archiv erfolgreich erstellt"
done fi
# Leeren Drop-Ordner entfernen (optional)
rmdir "$SRC_DIR" 2>/dev/null || true
shopt -u nullglob dotglob
if [[ "$had_files" = false ]]; then # ---- Archiv direkt ins Nextcloud-Zielverzeichnis hochladen (per SFTP)
echo "Keine Dateien in Drop-Ordner: ${SRC_DIR}" >&2 REMOTE_PATH="${DST_DIR}/${ARCHIVE_NAME}"
exit 5 LOCAL_PATH="${ARCHIVE_PATH}"
fi
# ---- Rechte setzen wie von Nextcloud erwartet if [[ ! -f "$LOCAL_PATH" ]]; then
chown -R www-data:www-data "$DST_DIR" echo "❌ Archiv nicht gefunden: $LOCAL_PATH" >&2
exit 6
fi
# ---- Index nur für diesen Pfad aktualisieren # Hochladen per SFTP mit SSH-Key
sudo -n -u www-data "$PHP" "$OCC" files:scan --path="$SCAN_PATH" --quiet sftp -i "$SFTP_KEY" -P "$SFTP_PORT" -oStrictHostKeyChecking=no "$SFTP_USER@$SFTP_HOST" <<EOF
put "$LOCAL_PATH" "$REMOTE_PATH"
EOF
# ---- Übrig gebliebene .lock-Dateien entfernen (z.B. durch Abbrüche bei Upload) echo "✅ Archiv erfolgreich hochgeladen nach: $REMOTE_PATH"
find "$DROP_BASE" -type f -name "*.lock" -delete 2>/dev/null || true
# ---- Erfolgsmeldung # ---- Ziel-Verzeichnis absichern (Rechte setzen)
echo "OK: $(printf '%s\n' "$DST_DIR")" mkdir -p "$DST_DIR"
chown -R www-data:www-data "$DST_DIR"
# ---- Index in Nextcloud aktualisieren
sudo -n -u www-data "$PHP" "$OCC" files:scan --path="$SCAN_PATH" --quiet
# ---- Übrig gebliebene .lock-Dateien entfernen (optional)
find "$DROP_BASE" -type f -name "*.lock" -delete 2>/dev/null || true
# ---- Erfolgsmeldung
echo "OK: ${REMOTE_PATH}"
``` ```