Kapitel 13/Tutorial.md aktualisiert

This commit is contained in:
2025-09-05 21:15:24 +00:00
parent 949e53f403
commit 6963489355

View File

@@ -123,6 +123,11 @@ SFTP_PORT=22
SFTP_USER=sftp_uploader
SFTP_KEY=/home/clipper/.ssh/nc_sftp_ed25519
SFTP_DROP_BASE=incoming
CLIPPER_IN=/srv/clipper/watch
CLIPPER_OUT=/srv/clipper/out
CLIPPER_TMP=/srv/clipper/temp
CLIPPER_LOG=/srv/clipper/logs
```
Dateirechte setzen, damit `clipper` sie lesen darf:
```bash
@@ -179,7 +184,7 @@ IN="$1" # absolute Datei
RANGES_JSON="$2" # Zeitbereiche (kommt später aus Abschnitt 4)
JOBID="${3:-manual}"
mkdir -p "$CLIPPER_OUT/$JOBID"
echo "$(date '+%F %T') [CUT] job=$JOBID file=$IN ranges=$RANGES_JSON" | tee -a "$CLIPPER_LOG"
echo "$(date '+%F %T') [CUT] job=$JOBID file=$IN ranges=$RANGES_JSON" | tee -a "$CLIPPER_LOG/$JOBID/cut.log"
exit 0
```
@@ -230,40 +235,6 @@ In diesem Abschnitt verbinden wir n8n mit Twitch, Nextcloud und dem Clipper. Das
### Schritt 1: Zugriff zwischen den Containern vorbereiten (Terminal)
<details>
<summary>Optional: SSH Known-Hosts zurücksetzen (falls Clipper schon einmal erstellt wurde)</summary>
Wenn du den Clipper-LXC bereits früher erstellt und neu aufgesetzt hast, kann es zu einem SSH-Fehler kommen:
```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
```
Das bedeutet, dass sich der **Server-Hostkey** geändert hat. SSH blockiert dann aus Sicherheitsgründen.
#### Lösung Schritt für Schritt (im n8n-LXC als root)
1. **Fingerprint auf dem Clipper prüfen**
```bash
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
```
(SHA256-Wert merken und vergleichen)
2. **Alten Eintrag löschen**
```bash
ssh-keygen -R "<CLIPPER-IP>"
```
> [!NOTE]
> SSH schützt vor Man-in-the-Middle-Angriffen, indem es Hostkeys prüft. Wenn ein Container neu erstellt wird, ist ein neuer Hostkey normal. Wir löschen den alten Eintrag bewusst, prüfen den neuen Fingerprint und akzeptieren ihn erst danach. So bleibt die Verbindung sicher **und** stabil.
</details>
**SSH-Schlüssel für Clipper hinterlegen (zwingend):**
```bash
ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/id_n8n_clipper -N ""
@@ -404,76 +375,16 @@ So landet jedes VOD automatisch in einem eigenen Sammelordner in Nextcloud s
Ganz am Ende fügen wir folgende Zeile ein:
```
nc_runner ALL=(www-data) NOPASSWD: /usr/bin/php, /var/www/nextcloud/occ
nc_runner ALL=(www-data) NOPASSWD: /usr/bin/php /srv/nextcloud/app/nextcloud/occ *
nc_runner ALL=(root) NOPASSWD: /usr/local/bin/nc_finalize_vod.sh
```
Hierdurch erlauben wir dem Benutzer `nc_runner`, genau diese Befehle als `www-data` auszuführen und nichts anderes.
6. Nextcloud benötigt einen Cache, um effizient arbeiten zu können. Standardmäßig wird oft **APCu** vorgeschlagen, das in der Praxis aber gerade bei der Nutzung von `occ` über die Kommandozeile Probleme bereitet.
Darum setzen wir hier direkt auf **Redis**. Redis ist stabiler, von Nextcloud offiziell empfohlen und funktioniert sowohl für den Web- als auch den CLI-Zugriff.
Zuerst installieren wir Redis samt PHP-Anbindung. Logge dich hierfür in deinen Nextcloud LXC ein und führe aus:
```bash
apt-get update
apt-get install -y redis-server php-redis
```
Im Anschluss stellen wir Redis so ein, dass es über einen Socket und nicht über TCP angesprochen wird. Das ist schneller und sicherer, da der Zugriff nur lokal erfolgt. Öffne die Konfiguration mit:
```bash
nano /etc/redis/redis.conf
```
und passe die folgenden Zeilen an:
```
supervised no
#unixsocket /var/run/redis/redis-server.sock
#unixsocketperm 770
port 6379
```
Ersetze sie bzw. entfere die kommentierung, damit sie wie folgt aussehen:
```
supervised systemd
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770
port 0
```
Danach fügen wir den Webserver-Benutzer in die Redis-Gruppe hinzu und starten den Dienst neu:
```bash
usermod -aG redis www-data
systemctl restart redis
```
Jetzt müssen wir Nextcloud selbst mitteilen, dass es Redis nutzen soll. Öffne dazu die Datei config.php mit `nano /var/www/nextcloud/config/config.php` und ergänze bzw. ändere diese Einträge:
```php
'filelocking.enabled' => true,
'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 1.5,
)
```
Speichern und schließen. Damit die Änderungen wirksam werden, starten wir noch PHP neu. Je nach Setup entweder mit:
```bash
systemctl restart apache2
```
Ab jetzt läuft Nextcloud vollständig mit Redis als Cache. Das heißt: `occ` funktioniert zuverlässig ohne zusätzliche Anpassungen, und wir sind bereit für den abschließenden Test im nächsten Schritt.
Zum Abschluss testen wir, ob alles funktioniert. Wechsle dazu wieder auf deinen Clipper LXC und rufe folgenden Befehl auf:
```bash
ssh -i ~/.ssh/nc_runner_ed25519 nc_runner@<IP_des_Nextcloud_LXC> "sudo -u www-data php /var/www/nextcloud/occ -V"
ssh -i ~/.ssh/nc_runner_ed25519 nc_runner@<NEXTCLOUD-IP> "sudo -u www-data php /srv/nextcloud/app/nextcloud/occ -V"
```
Wenn alles korrekt eingerichtet ist, bekommst du die aktuelle Nextcloud Version angezeigt.
@@ -750,10 +661,10 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
```bash
NC_USER=DEIN_NC_USER # Nextcloud-Benutzer, dem die Dateien gehören sollen
NC_TARGET_SUBPATH="Medien/VODs" # Zielordner innerhalb von Nextcloud (wie er im Web erscheint)
NC_DATA="/var/www/nextcloud/data" # Basis-Datenverzeichnis deiner Nextcloud-Instanz
NC_DATA="/srv/nextcloud/app/nextcloud/data" # Basis-Datenverzeichnis deiner Nextcloud-Instanz
DROP_BASE="/home/sftp_uploader/incoming" # SFTP-Drop-Zone von sftp_uploader
PHP="/usr/bin/php"
OCC="/var/www/nextcloud/occ"
OCC="/srv/nextcloud/app/nextcloud/occ"
```
Speichere die Datei wieder mit `STRG + O` und schließe den Editor mit `STRG + x`.
@@ -817,7 +728,7 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
chown -R www-data:www-data "$DST_DIR"
# ---- Index nur für diesen Pfad aktualisieren
"$PHP" "$OCC" files:scan --path="$SCAN_PATH" --quiet
sudo -u www-data "$PHP" "$OCC" files:scan --path="$SCAN_PATH" --quiet
echo "OK: $(printf '%s\n' "$DST_DIR")"
@@ -857,7 +768,8 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
- **Command is an Expression:** **ON**
- **Command:**
``` bash
{{`set -euo pipefail; STATE="/srv/clipper/state/vod_seen.list"; mkdir -p "$(dirname "$STATE")"; if [ -s "$STATE" ]; then printf "%s\n" "${$json.data.id}" >> "$STATE"; else printf "%s\n" "${$json.data.id}" > "$STATE"; fi`}}
{{`set -euo pipefail; STATE="/srv/clipper/state/vod_seen.list"; mkdir -p "$(dirname "$STATE")"; printf '%s\n' "{{$json.data.id}}" >> "$STATE"`}}
```
12. **SSH Node 2 Download & Upload** (Node-Name: `Down 'n' Up`)
@@ -877,7 +789,8 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
- Command is an Expression: ON
- Command:
```bash
/usr/local/bin/nc_finalize_vod.sh {{$('Down 'n' Up').item.json.vodId}} {{$('Down 'n' Up').item.json.filename}}
sudo /usr/local/bin/nc_finalize_vod.sh {{$('Merge').item.json.data.id}}
```
Diese 12 Nodes werden das gesamte Grundgerüst der gesamten Automation sein. Wie aber müssen sie verbudnen werden?