Kapitel 13/Tutorial.md aktualisiert
This commit is contained in:
@@ -123,6 +123,11 @@ SFTP_PORT=22
|
|||||||
SFTP_USER=sftp_uploader
|
SFTP_USER=sftp_uploader
|
||||||
SFTP_KEY=/home/clipper/.ssh/nc_sftp_ed25519
|
SFTP_KEY=/home/clipper/.ssh/nc_sftp_ed25519
|
||||||
SFTP_DROP_BASE=incoming
|
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:
|
Dateirechte setzen, damit `clipper` sie lesen darf:
|
||||||
```bash
|
```bash
|
||||||
@@ -179,7 +184,7 @@ IN="$1" # absolute Datei
|
|||||||
RANGES_JSON="$2" # Zeitbereiche (kommt später aus Abschnitt 4)
|
RANGES_JSON="$2" # Zeitbereiche (kommt später aus Abschnitt 4)
|
||||||
JOBID="${3:-manual}"
|
JOBID="${3:-manual}"
|
||||||
mkdir -p "$CLIPPER_OUT/$JOBID"
|
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
|
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)
|
### 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):**
|
**SSH-Schlüssel für Clipper hinterlegen (zwingend):**
|
||||||
```bash
|
```bash
|
||||||
ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/id_n8n_clipper -N ""
|
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:
|
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.
|
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:
|
Zum Abschluss testen wir, ob alles funktioniert. Wechsle dazu wieder auf deinen Clipper LXC und rufe folgenden Befehl auf:
|
||||||
|
|
||||||
```bash
|
```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.
|
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
|
```bash
|
||||||
NC_USER=DEIN_NC_USER # Nextcloud-Benutzer, dem die Dateien gehören sollen
|
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_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
|
DROP_BASE="/home/sftp_uploader/incoming" # SFTP-Drop-Zone von sftp_uploader
|
||||||
PHP="/usr/bin/php"
|
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`.
|
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"
|
chown -R www-data:www-data "$DST_DIR"
|
||||||
|
|
||||||
# ---- Index nur für diesen Pfad aktualisieren
|
# ---- 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")"
|
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 is an Expression:** **ON**
|
||||||
- **Command:**
|
- **Command:**
|
||||||
``` bash
|
``` 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`)
|
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 is an Expression: ON
|
||||||
- Command:
|
- Command:
|
||||||
```bash
|
```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?
|
Diese 12 Nodes werden das gesamte Grundgerüst der gesamten Automation sein. Wie aber müssen sie verbudnen werden?
|
||||||
|
|||||||
Reference in New Issue
Block a user