Synology: Plex mit JDownloader und Filebot über Docker installieren


Synology: PLEX zusammen mit FileBot und JDownloader installieren

Wer gerne Filme und Serien auf seinem NAS archiviert, kommt an dem Dream-Team Plex Media Server, JDownloader und Filebot nicht vorbei. In der Vergangenheit war eine native Installation auf einem Synology NAS die beste Option. Noch besser ist nach meiner Erfahrung die Installation und vor allem der Betrieb über Docker. Diese Anleitung funktioniert dank Docker auf mit DSM 7.

Warum Docker?

Docker kapselt Linux Umgebungen maßgeschneidert als Container für die jeweilige Anwendung. Bestimmte Bereiche wie Ports und Speicherplatz können dabei nach außen dem umliegenden System zur Verfügung gestellt werden. Bei Aktualisierungen wird dabei meistens der gesamte Container ausgetauscht. Der Betrieb und die Wartung sind viel einfacher über Docker zu realisieren als, wenn man sich das DSM über native Scripte und Anwendungen verunstaltet. Das bedeutet, kein Node.js Paket oder Java-Versionen mehr direkt auf dem NAS installieren. Zudem werden Docker Container nicht nur für Synology erstellt und gepflegt. Dadurch gibt es eine deutlich besserer Unterstützung durch die Community über Docker.

Voraussetzung für die Nutzung von Docker

Um Docker auf einem Synology NAS nutzen zu können, benötigt man ein Gerät der „plus“-Reihe. Denn nur diese Geräte verfügen über eine x86-CPU. Einsteigermodelle sind das DS218+ (kaufen) oder DS220+ (kaufen). Ich selber nutze das DS1019+ (kaufen) mit einer SSD als Laufwerk.

Nur die Synology Plus-Reihe unterstützt Docker.
Nur die Synology Plus-Reihe unterstützt Docker.

Notwendige Schritte zur Installation

Schritt 1: Docker installieren

Zuallererst wird Docker über den DSM Paketmanager installiert.

Schritt 2: Gemeinsamen Ordner für Filme und Serien anlegen

Um es den Programmen später so einfach wie möglich machen, benennen wir alles so wie im Standard vorgesehen. Ich habe einen „Gemeinsamen Ordner“ namens „video“ auf meinem größten Laufwerk angelegt. Dort liegen folgende Ordner:

  • config
    • filebot
    • jdownloader
  • Downloads
    • EXTRACTED
  • Movies
  • TV Shows
  • Unsorted

Da JDownloader und der Filebot die Dateien aus dem Download-Ordner verschieben werden, ist ein Laufwerk aus Gründen bezüglich der Geschwindigkeit besser.

Schritt 3: Installation von PLEX

PLEX habe ich bewusst nicht über Docker installiert. Die Hardware-Beschleunigung der GPU kann hier nicht ohne Weiteres genutzt werden. Deshalb ist der Weg über den Paketmanager einfacher. Ich halte mich hier bewusst kurz, weil es hier zu keinen Problemen kommen sollte.

  • DSM Paketmanager öffnen.
  • PLEX suchen, installieren und starten
  • Danach manuell aktualisieren mit der Version für Synology im DSM über den Button „Manuelle Installation“.
Für Docker habe ich keine bessere Lösung als „Alle“ dürfen Lesen und Schreiben.

Schritt 4: Berechtigungen setzen

Berechtigungen für PLEX setzen

Damit PLEX nachher die Daten sehen kann, muss man dem Laufwerk „video“ den Benutzer „PLEX“ zuweisen.

  • Einstellungen
  • Gemeinsame Ordner
  • Berechtigungen
  • Unter „PLEX“ bei „Lesen/Schreiben“ den Haken setzen.
  • Speichern.
Die Berechtigungen des Ordners anpassen.

Berechtigungen für Docker setzen

Leider habe ich keine einfache Möglichkeit gefunden, dass auch Docker auf den Video-Ordner zugreifen ohne, dass wir ihn im „docker“ Shared Folder anlegen. Deswegen müssen wir hier die Berechtigungen für „Alle“ setzen, damit Docker auf den Daten arbeiten kann.

  • File Station
  • Rechte Maustaste auf shared folder „video“
  • Einstellungen
  • Berechtigungen
  • Hinzufügen
  • Benutzer oder Gruppe: „Alle“.
  • Lesen und Schreiben auswählen.
  • Speichern.
Jeder Medientyp wird einzeln angelegt.

Konfiguration von PLEX

Nach dem PLEX gestartet wurde, kann man es über die Benutzeroberfläche im Browser konfigurieren. Nun werden die Ordner TV Shows und Movies einzeln mit ihren jeweiligen Typen „Serien“ und „Filme“ hinzugefügt. Wenn die Ordner nicht gefunden werden können, wurde der letzte Schritt bei der Installation von PLEX nicht korrekt durchgeführt. Nun sollte PLEX eure vorhandenen Videodateien kennen und auf allen Clients abspielen können.

Wichtig für später: Wir merken uns, auf welchem „Volume“ der gemeinsame Ordner „video“ liegt. Wir brauchen das für die Installation des FileBots. Beispiel: /volume1/video/

Schritt 5: Installation vom JDownloader über Docker

Im DSM zuerst Docker starten. Dann im Docker Repository nach dem Image „jdownloader2-headless“ suchen das von „plusminus“ namens „plusminus/jdownloader2-headless“ auswählen und herunterladen. Nun startet man das Image und geht auf „Erweiterte Einstellungen„.

Volume Konfiguration

Lokaler OrdnerMount path ContainerType
video/Downloads/opt/JDownloader/Downloadsrw
video/config/jdownloader/opt/JDownloader/cfgrw

Port Konfiguration (optional)

Lokaler PortContainer PortType
31303130tcp
31303130udp
58005800tcp
Sollte auch ohne funktionieren.

Environment Variables

VariableValue
EMAIL Dein JDownloader User
PASSWORDDein JDownloader Passwort
Kann später entfernt werden, weil die Daten in die Konfiguration geschrieben werden.

Konfiguration über die Weboberfläche

Auf der Seite jdownloader.org gibt man seine Zugangsdaten ein und erreicht so die Weboberfläche des lokalen JDownloader. Dort wechselt man zu Einstellungen,

JDownloader WebWert
Archive Extractor > Extraction: Custom Extraction Path/opt/JDownloader/Downloads/EXTRACTED
Settings > Default Download Folder/opt/JDownloader/Downloads

Abschließend konfiguriert ihr den JDownloader Container so, dass er automatisch mit eurem NAS startet. Damit müsst ihr ihn nach einem Neustart nicht händisch starten.

Schritt 6: jDownloader automatisch per Script aktualisieren

Normalerweise aktualisiert sich der jDownloader nur, wenn er beendet und neu gestartet wird. Bei einer headless-Installation wieder dieser hier, ist das aber nervig. Deswegen kann mit folgenden Schritten den jDownloader dazu bringen, sich selbst zu aktualisieren, wenn er gerade nichts herunterlädt.

  1. Event Scripter in „Einstellungen“ Extension Manager“ aktivieren.
  2. Unter „Extensions“ den „Event Scripter“ aufrufen.
  3. Im Feld EventScripter: Scripts folgendes Script einsetzen.
  4. Speichern (Das Diskettensymbol).
  5. Allen folgenden Berechtigungsanfragen stattgeben.
[ {
  "eventTrigger" : "INTERVAL",
  "enabled" : true,
  "name" : "Auto-update JD",
  "script" : "// Restart & Update when JD is idle, or after 'x' hours.\n// Trigger: Interval (Recommended 600000 or more).\n\nvar hours = 0; // Update after 'x' hours, even if JD is not idle. (0 = Disabled)\n\nif (callAPI(\"update\", \"isUpdateAvailable\")) {\n\n    var updateNow = false;\n\n    if (hours > 0) {\n        \n        if (!getProperty(\"date\", false)) {\n            setProperty(\"date\", new Date(Date.now() + hours * 60 * 60 * 1000), false);\n        }\n\n        if (Date.now() > getProperty(\"date\", false)) {\n            updateNow = true;\n        }\n    }\n\n    if (!updateNow) {\n        \n        var idle = isDownloadControllerIdle() &&\n            !callAPI(\"linkcrawler\", \"isCrawling\") &&\n            !callAPI(\"linkgrabberv2\", \"isCollecting\") &&\n            !callAPI(\"extraction\", \"getQueue\").length > 0;\n\n        if (idle) {\n            updateNow = true;\n        }\n    }\n\n    if (updateNow) {\n        callAPI(\"update\", \"restartAndUpdate\");\n    }\n}",
  "eventTriggerSettings" : {
    "lastFire" : 1594799412187,
    "interval" : 600000,
    "isSynchronous" : false
  },
  "id" : 1594796988140
} ]

Quelle: jDownloader Hilfeseiten

Schritt 7: Installation vom FileBot Watcher über Docker

Im DSM zuerst Docker starten. Im Docker Repository sucht ihr nach dem Image „filebot“ von „rednoah“ namens „rednoah/filebot“ und ladet den Tag „watcher“ herunter. Danach stellen wir unter „Advanced Configuration“ folgende Optionen ein.

Volume Konfiguration

Da der FileBot auf gesamten Videodateien und dem Downloader-Verzeichnis arbeiten muss, braucht es vollen Zugriff auf den gemeinsamen Ordner „video“. Das habt ihr euch bei der Installation von PLEX im letzten Schritt gemerkt.

Lokaler OrdnerMount path ContainerType
video/volume1 rw
video/config/filebot/datarw

Environment Variables

VariableValue
SETTLE_DOWN_TIME 900

Zu guter Letzt konfiguriert ihr den FileBot Container so, dass er automatisch mit eurem NAS startet. So müsst ihr ihn nach einem Neustart nicht händisch starten.

Konfiguration des FileBot im erweiterten Container Menü von Docker.
Konfiguration des FileBot im erweiterten Container Menü von Docker.

Execution Command

Diese Einstellung kann nur beim Erzeugen des Container vorgenommen und später nicht verändert werden. Die zwei Backslashes „\\“ sind nötig, weil es sonst einen Formatierungsfehler gibt.

/volume1/Downloads/EXTRACTED --output /volume1/ --action move --conflict auto --lang en 

Wenn Parameter wie clean gesetzt werden sollen, dann wird es hier unnötig kompliziert. Dafür erstellt man den Container und exportiert in als JSON-Datei. Darin kann man dann mit \\ die Gleichzeichen erlauben. Nun importiert man diese JSON Datei wieder. So kann man auch im Nachhinein die Befehle ändern.

"cmd" : "-script fn:amc /volume3/Downloads/EXTRACTED --output /volume3/ --action move --conflict auto --def clean\\=y skipExtract\\=y",

Die verwendeten Befehle sind auf der Filebot Seite dokumentiert.

Ein komplexeres Beispiel aus den Kommentaren sieht wie folgt aus:

/volume1/downloads/EXTRACTED –output /volume1 --action move --def seriesFormat\='serien/{n}/{n}.{S00E00}.{t}' movieFormat\='filme/{n}' unsortedFormat\='unsortiert/{file.structurePathTail}' --conflict auto --lang de --def clean\=y skipExtract\=y

Filebot Lizenz in Docker aktivieren

Nachdem der Filebot Container einmal gestartet wurde, findet ihr in DSM den folgenden Ordner:

video/config/filebot/.filebot 

Sollte das nicht der Fall sein, legt diesen Ordner manuell an. Dann legt ihr eine Datei namens „license.txt“ mit dem Inhalt eurer filebot.psm Lizenz-Datei an:

video/config/filebot/.filebot/license.txt

Achtet auf den Punkt im Ordnernamen. Das Erstellen und editieren geht am einfachsten direkt in DSM über den Texteditor, den man sich als Paket herunterladen kann. Danach sollte der filebot eure Lizenz erkennen. Coole Leute machen das alles per vi auf der Shell. Die Lesen aber auch nicht eine Anleitung wie diese.

Aktualisierungen der Container

Man kann die Container per Hand aktualisieren oder automatisch per Watchtower.

So greifen JDownloader, FileBot und PLEX ineinander
So greifen JDownloader, FileBot und PLEX ineinander.

Zusammenfassung

Durch diese Anleitung haben wir den JDownloader entsprechend konfiguriert, dass er die Dateien in den Ordner EXTRACTED entpackt. Wenn dort keine Änderungen mehr stattfinden, wartet der FileBot Watcher 15 Minuten, diese Dateien zu analysieren und umzubenennen. Danach verschiebt er sie in die entsprechende Verzeichnisse TV Shows, Movies oder Unsorted. PLEX merkt, dass in TV Shows oder Movies neue Dateien sind, sucht die passenden Titelbilder raus und stellt sie den Clients bereit. Diese Lösung läuft nach eigenen Erfahrungen sehr stabil, übersteht jegliche Updates und ist sehr performant auf einem NAS wie dem DS218+ (kaufen). Danke an Dänjiel für die Motivation, Screenshots und Testing.


Beitrag veröffentlicht

in

von

Kommentare

49 Antworten zu „Synology: Plex mit JDownloader und Filebot über Docker installieren“

  1. Avatar von Dänjiel
    Dänjiel

    Läuft bestens bei mir. Wichtig war vor allem die exakt benannten Pakte für Docker (JD und Filebot) auszuwählen. Der Rest ist schnell gemacht :) Allein dafür hat sich das Upgrade von der 215j auf den 920+ gelohnt.

    1. Avatar von Dimi
      Dimi

      funktioniert auch hardware transcoding bei Plex unter Docker??

    2. Avatar von Marc
      Marc

      Artikel bitte lesen bevor du was fragst. Das steht im Text.

  2. Avatar von Frage
    Frage

    Hallo,

    ich versuche gerade das Execution-Command für Filebot einzurichten.
    Ich bin bei Erweiterte Einstellungen unter „Ausführungsbefehl“ geangen und beim leeren Feld (unter Entrypoint) steht Befehl: dort habe ich einfach deine Zeilen kopiert
    und nun erhalte ich den Fehler „Ausführungsbefehl-Formatfehler“.

    Was kann ich dagegen tun? Vielen Dank.

    1. Avatar von Marc
      Marc

      Leerzeichen mitgenommen? Slashes genau so übernommen? Anführungszeichen?

    2. Avatar von frage
      frage

      Hallo,

      ich habe es einmal kopiert und einmal manuell eingegeben, hat beides leider nicht funktioniert.
      Ich hatte auch Probleme mit den Berechtigungen. Ich kann keine hinzufügen beim Schritt Berechtigungen für Docker setzen.
      Siehe:

      Was mache ich hier falsch? Vielen Dank.

    3. Avatar von Marc
      Marc

      Zu den \\: Tatsächlich geht das so (mehr?). Ich habe die Anleitung angepasst. Komisch, das ist damals bei Daniel nicht passiert.

      Zu den Berechtigungen. Ich habe den Teil ergänzt. Nicht die Shared Folder anpassen, sondern wie beschrieben nur den Order. Da kannst du das anlegen.

  3. Avatar von Tim
    Tim

    Hallo,
    bei mir läuft es soweit inklusive anstoßen einer Plex aktualisierung (Plex läuft auf einem externen Server)
    Ein Problem habe ich jedoch, wie kann ich die Ordner und den File Namen mit dem Script ändern und wie lasse ich die leeren Ordner vom Extrahieren löschen?

    Mein Script hatte ich so angedacht (der markierte Teil funktioniert allerdings nicht)
    /volume1/Downloads/EXTRACTED –output /volume1/ –action move –def seriesFormat\\=/volume1/Serien/{n}/Season {s}/{n} – {S00E00} – {t} movieFormat\\=/volume1/Filme/{n} ({y}) unsortedFormat\\=/volume1/unsortiert/{file.structurePathTail} -non-strict –conflict auto –lang de –def plex\\=192.168.1.3:E(Token entfernt)B –def clean\\=y skipExtract\\=y

    1. Avatar von Marc
      Marc

      Zum debuggen nimm einfach mal nur den –def clean=y Parameter mit rein und werde erst dann komplexer, wenn alles läuft. Denn bei mir mit meinen Parametern aus dem Artikel und bei einem Freund löscht er die Ordner und räumt auf.

    2. Avatar von Tim
      Tim

      Der clean Befehl klappt mittlerweile auch aber die alternativen Ordner (Filme statt Movies) und die Namensgebung der Filme klappt leider bisher gar nicht.

  4. Avatar von Tim
    Tim

    Mittlerweile klappt FAST alles, mein einziges Problem das ich noch habe ist, dass keine Leerzeichen oder Klammern im Namen akzeptiert werden. Sobald ich diese im script drin habe hört er beim ersten Leerzeichen mit dem Generieren des Namens auf. Bei einer Klammer ( ) kann ich das Script nicht mehr importieren.

    seriesFormat\\=/Serien/{n}/Season\ {s}/{n} – {S00E00} – {t}

    1. Avatar von Tim
      Tim

      Die Lösung war ein ‚ vor und hinter dem Pfad
      seriesFormat\\=’/Serien/{n}/Season {s}/{n} – {S00E00} – {t}‘

    2. Avatar von Flo
      Flo

      Hi Tim,

      wäre es möglich, dass du dein aktuell funktionierendes Skript hier teilst? Das würde mir sehr weiterhelfen bei der Einrichtung :)
      Danke dir und lieben Gruß

    3. Avatar von Marc
      Marc

      Mein Tipp ist, den Standard an dieser Stelle oben aus meinen Beispielen nicht zu verändern, sondern eher seine Prozesse und Ordner anzupassen.

    4. Avatar von Lutz
      Lutz

      Hallo Marc,
      zunächst Danke für Anleitung (hat mir damals schon sehr geholfen ohne Docker). Das Anpassen des amc-Scripts konnte ich damals noch nachvollziehen, aber wo jetzt die Konfig für deine Standardordner liegt erschließt sich mir leider nicht mehr. Von daher würde mich die Übergabe der Parameter von Tim (also seine ganze Commandline) sehr interessieren. Es sei denn es gibt noch eine andere Möglichkeit die Konfig als externes File abzulegen und dieses dann einzubinden.
      Danke euch beiden.

    5. Avatar von Marc
      Marc

      Was ihr meint ist nicht das Script sondern die Paramaterübergabe an den Filebot. Das ist seine Lösung gewesen. Ihr müsst nur bestimmte Zeichen escapen wie = und das Format in Ticks setzen.

      seriesFormat\\='/Serien/{n}/Season {s}/{n} – {S00E00} – {t}'

      Wobei ich nach wie vor nicht verstehe wieso ihr hier vom Standard abweicht. Es hat nur Vorteile die Standardpfade zu nutzen weil dann jede Software auf diesem Planeten weiß, wo die Sachen wie abgelegt wurden. Sein Beispiel ändert nur den Ordner „TV Shows“ zu „Serien“.

    6. Avatar von Lutz
      Lutz

      Ich möchte eben meine eigenen Ordner „filme“ und „serien“ benutzen, aber ich habe jetzt mehrere verschiedene Formate des Parameters getestet und bekomme immer wieder den Fehler „Ausführungsbefehl-Formatfehler“ vom docker zurück.
      Mein Parameter sieht aktuell so aus: /volume1/downloads/EXTRACTED -output /volume1/ -action move -def seriesFormat\\=’/serien/{n}/{n}.{S00E00}.{t}‘ movieFormat\\=’/filme/{n}‘ unsortedFormat\\=’/unsortiert/{file.structurePathTail}‘ -conflict auto -lang de
      Siehst du oder Tim wo hier der Fehler liegt? Ich habe extra „–def clean\\=y skipExtract\\=y“ auch schon weggelassen. Auch wenn ich die commands mit doppeltem Strich „–action move …“ angebe, passiert das gleiche. Danke für euern Support.

    7. Avatar von Marc
      Marc

      Taste dich ran. Nimm erst das einfache Beispiel von mir und schaue, ob es geht. Dann übernimmst du deine Ergänzungen. Schaue, ob die Punkte mit \\ escaped werden müsseb usw. Einfach starten und dann komplexer werden.

    8. Avatar von Lutz
      Lutz

      Hallo miteinander,
      ich habe es jetzt hinbekommen. Man darf nur mit einem „\“ escapen. Falls jemand die gleichen Probleme/Ansprüche hat, wie ich, schmeisse ich mal meine Übergabe an den Container mit hier rein:

      /volume1/downloads/EXTRACTED –output /volume1 –action move –def seriesFormat\=’serien/{n}/{n}.{S00E00}.{t}‘ movieFormat\=’filme/{n}‘ unsortedFormat\=’unsortiert/{file.structurePathTail}‘ –conflict auto –lang de –-def clean\=y skipExtract\=y

      Jetzt habe ich nur noch das Problem, dass es mir alle Dateien aus dem Archiv in die jeweiligen Ordner verschiebt (also auch alle *.jpg, **.nfo etc.) – mal sehen, wie man das verhindern und nur die alleinige Videodatei moven kann.

    9. Avatar von Marc
      Marc

      Habe es mit in die Anleitung aufgenommen. Danke.

  5. Avatar von peng
    peng

    Filebot startet nach Abschluss der Konfiguration ständig neu. Wie kann man das beheben?
    Gibt es auch eine grafische Oberfläche?

    1. Avatar von Marc
      Marc

      Nein, der Filebot braucht auch keine grafische Oberfläche wenn er so konfiguriert wird wie in diesem Artikel.

  6. Avatar von Marcel
    Marcel

    Das Problem mit dem Filebot startet ständig neu habe ich leider auch. Es hat etwas nut den — zu tun. Bei mir macht er nach dem copy paste dort ein Sonderzeichen hin. Wieso weiß ich allerdings nicht.

    1. Avatar von Marc
      Marc

      Funktioniert das einfache Bespiel denn?

    2. Avatar von Marcel
      Marcel

      Japp das simple funktioniert. Das komplexe jedoch nicht. Ich hatte darauf hin mal kleine Schritte versucht um nur die Sprache von Englisch auf Deutsch umzustellen. Das funktionierte jedoch garnicht. Ich hatte bei „lang“ dann „DE“ getestet.
      Er arbeitet dann gar nichts mehr ab.

  7. Avatar von Marcel
    Marcel

    So hat jetzt funktioniert. Bin auf Notepad++ umgestiegen dann läufts direkt mal besser. Also Deutsch ist es jetzt. Muss nur noch die Quellordner anpassen.

  8. Avatar von holger
    holger

    Wenn ich versuche die Einstellung als JSON Datei exportiere, editiere (Text Editor auf der Synology oder auch notepad++ auf dem PC) und wieder versuch zu importiren, bekomme ich die Fehlermeldung „rednoah-filebot1.syno.json Datei(en) haben ein ungültiges Format :(

    1. Avatar von Marc
      Marc

      Das hatten wir hier schon mal. Irgendwas ist dann wohl im falschen Format angegeben.

  9. Avatar von Davey
    Davey

    Beim „komplexeren“ Beispiel für Filebot hat sich noch ein Formatierungsfehler eingeschlichen.
    Vor output, action, def, conflict und lang ist ein „–“, das müsste aber ein „–“ sein sonst stürzt der Container wieder ab.
    Windows hat die tolle angewohnheit aus zwei kurzen Bindestrichen diesen langem zu machen :)

    1. Avatar von Davey
      Davey

      oops jetzt hats mir das Zeichen grad selber falsch formatiert, scheint wohl ein Website Ding zu sein.
      Jedenfalls muss „–“ mit zwei mal „-“ ersetzt werden

    2. Avatar von Marc
      Marc

      Ja, passiert auch unter macOS bei mir. Danke!

  10. Avatar von Xantalin
    Xantalin

    Hi, der Container stürzt bei mir immer direkt ab und im Protokoll kommt die Fehlermeldung „–license *.psm : Import license file“
    Ich habe wie in der Anleitung beschrieben die Datei license und den Ordner umbenannt, doch der Fehler bleibt gleich.

    1. Avatar von Marc
      Marc

      Dann ist es ein Problem mit den Rechten. Der Container kann die lokale Datei nicht lesen.

    2. Avatar von Xantalin
      Xantalin

      Danke für die Rückmeldung. Das hat soweit funktioniert. Nun kommt allerdings die Meldung: Setting up watches.
      Couldn’t watch /volume1/downloads/EXTRACTED: No such file or directory
      Läuft der Container nicht dauerhaft ?

    3. Avatar von Marc
      Marc

      Wieder ein Rechteproblem: “ /volume1/downloads/EXTRACTED: No such file or directory“ Er findet dein Verzeichnis nicht.

    4. Avatar von Xantalin
      Xantalin

      Ich habe den Fehler gefunden. Das „D“ von Downloads habe ich groß geschrieben.
      Vielen Dank.

    5. Avatar von Marc
      Marc

      Du kannst solche Artikel gerne weiterhin unterstützen.

Schreibe einen Kommentar

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