Kapitel 13/Tutorial.md aktualisiert

This commit is contained in:
2025-09-23 17:13:17 +00:00
parent 2fe73dc05a
commit de45e91097

View File

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