PeerTube – Videos auf extra Maschinen rendern (peertube-runner)

PeerTube ist eine Videoplattform, welche man selbst hosten kann.
Dabei werden wie z.B. bei YouTube auch, die hochgeladenen Videos in ein passendes Format konvertiert, damit man sie im Browser geräteübergreifend abspielen kann.
Dies braucht je nach Format, Qualitätseinstellungen und Auflösung allerdings viel Zeit und Rechenleistung.
Wer dieses Renderprozess gerne auslagern möchte, kann dies jetzt tun.

In dieser kurzen Anleitung zeige ich dir, wie du ein eigenen PeerTube Runner installieren kannst.

Was ist peertube-runner?
PeerTube Runner (peertube-runner) ist eine Anwendung, die auf einem anderen Server laufen kann.
Sie frägt via API bei deiner PeerTube-Instanz nach, ob es etwas zu konvertieren gibt.
Wenn was vorhanden ist, wird das Video über https heruntergeladen und auf dem Runner-Server in die gewünschten Auflösungen konvertiert.
Ist dies abgeschlossen, lädt der Runner die Datei wieder hoch.
Der Runner selbst benötigt daher auch keine extra Portfreigaben im Router, da er selbst die Verbindung iniziiert.
Der Runner funktioniert nicht nur für Videos, auch für Livestreams kann er eingesetzt werden.

Welche Formate unterstützt der Runner?
Aktuell wird nur x264 unterstützt. Andere Formate wie VP9 oder AV1 lassen sich noch nicht konfigurieren.
(Schau hier für aktuelle Infos: https://github.com/Chocobozzz/PeerTube/issues/5858)
Bei der Aktivierung der Runner, wird auch das Transkodierungsprofil deaktiviert.


Was brauchen wir?
– Eine funktionierende PeerTube-Instanz (Anleitung gibts HIER)
– Root-Zugang oder Administrator-Rechte zu der PeerTube-Instanz
– Ein extra Server (x86/x64 – arm/arm64 hab ich noch nicht getestet)
– Linux als Betriebssystem (Debian 12 habe ich getestet)
– CPU und RAM je nach dem wie schnell der Renderprozess laufen soll (nach oben keine Grenze)
– Min. 2x freien Speicherplatz, wie die größte Videodatei ist, die du hochladen willst (Ist sie 30GB, stell 60GB bereit)
– Eine Internetanbindung für den Server

Hinweis: Nutzt du ein LXC, aktiviere “Nesting” bei den Extra-Funktionen, damit alles sauber funktioiert.

1. Logge dich auf deinem Runner-Server per Root ein
2. Installiere folgende Pakete:

# apt install ffmpeg npm htop curl sudo unzip nano iftop -y

3. Installiere NodeJS

# curl -sL https://deb.nodesource.com/setup_20.x | bash -
# apt install -y nodejs -y

4. Installiere über npm peertube-runner

# sudo npm install -g @peertube/peertube-runner

5. Lege einen extra Benutzer für den peertube-runner an (er muss ja nicht mit root laufen)

# useradd -m -d /srv/prunner -s /bin/bash -p prunner prunner

6. Lege eine SystemD-Startdatei an

# nano /etc/systemd/system/prunner.service

Inhalt:

[Unit]
Description=PeerTube runner daemon
After=network.target

[Service]
Type=simple
Environment=NODE_ENV=production
User=prunner
Group=prunner
ExecStart=peertube-runner server
WorkingDirectory=/srv/prunner
SyslogIdentifier=prunner
Restart=always

; Some security directives.
; Mount /usr, /boot, and /etc as read-only for processes invoked by this service.
ProtectSystem=full
; Sets up a new /dev mount for the process and only adds API pseudo devices
; like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled
; by default because it may not work on devices like the Raspberry Pi.
PrivateDevices=false
; Ensures that the service process and all its children can never gain new
; privileges through execve().
NoNewPrivileges=true
; This makes /home, /root, and /run/user inaccessible and empty for processes invoked
; by this unit. Make sure that you do not depend on data inside these folders.
ProtectHome=true
; Drops the sys admin capability from the daemon.
CapabilityBoundingSet=~CAP_SYS_ADMIN

[Install]
WantedBy=multi-user.target

7. Aktiviere die SystemD-Datei und starte den Runner

# systemctl daemon-reload
# systemctl enable prunner.service
# systemctl restart prunner.service

8. Passe ggf. die Anzahl, der zu verwendenen Threads an (Standard sind 2)

# nano /srv/prunner/.config/peertube-runner-nodejs/default/config.toml

9. Starte den Runner anschließend neu

# systemctl restart prunner.service

Optionaler Tipp:
Füge in die Hosts-Datei einen Eintrag für deine PeerTube-Instanz hinzu, damit der Runner den Weg zu 100% finden kann.

# nano /etc/hosts
192.168.20.15   peertube.DOMAIN.COM

10. Öffne die Runner-Liste in der PeerTube-Instanz
https://peertube.DOMAIN.COM/admin/system/runners/runners-list

11. Drücke auf “Runner registration tokens” und dann auf “Token generieren”
Du erhälst ein Token der mit ptrrt-……….. beginnt.

12. Schicke folgenden Befehl ab, passe davor die URL sowie den Token an und ggf. den runner-name

# sudo -u prunner peertube-runner register --url https://peertube.DOMAIN.COM --registration-token ptrrt-XXXXX-XXXXX-XXXXXX-XXXXXX --runner-name Runner1337

Hinweis: Die URL muss passend mit HTTP oder HTTPS beginnen, da die automatische Umleitung von HTTP zu HTTPS nicht funktioniert!

13. Prüfen ob der Runner sich verbunden hat

# sudo -u prunner peertube-runner list-registered

14. In den Einstellungen von PeerTube nun die Runner aktivieren
https://peertube.DOMAIN.COM/admin/config/edit-custom#transcoding
>> Enable remote runners for VOD

15. PeerTube neu starten lassen, damit alles sauber übernommen wird

# systemctl restart peertube

Hinweis: Dieser Befehl muss natürlich auf dem Server abgeschickt werden, auf dem PeerTube installiert ist.

Ab jetzt gibt es im Webinterface auch ein neuer Eintrag.
Administration >> System >> Remote Runners
Hier siehst du, was deine Runner aktuell arbeiten.

Das Prozedere kannst du für jeden Server den du zur Verfügung hast wiederholen.
Je mehr Runner du hast, desto verteilter können deine Jobs laufen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.