Paperless-ngx auf Synology

Da ich noch keine kurze Anleitung zum Installieren von paperless-ngx in der normalen Docker-Umgebung auf der Synology gefunden habe, kommt hier eine.

Ich gehe davon aus, dass Docker-Paket installiert ist und funktioniert.

  1. Verzeichnis anlegen um alle relevanten Daten von paperless-ngx außerhalb des Docker-Containers zu lagern. Das wird im docker-Ordner gemacht damit der Container dann auch Schreibrechte hat.

2.Download der benötigten Docker-Images

Zum Betrieb von paperless-nx benötigen wir die beiden Images redis und paperlessngx/paperless-ngx. Diese findet man im Registry-Bereich in Docker.

paperless-ngx in der Registry
Das redis-Paket in der Registry

Wenn der Download fertig ist, findet man sie unter Image

Meine Docker-Images

3. Redis-Container erzeugen

paperless benötigt redis um zu funktionieren. Deshalb erzeugen wir den Container mit dem Launch-Knopf während das Redis-Image markiert ist.

Auf der ersten Seite des Assistenten müssen wir die Netzwerkanbindung des Containers wählen. Ich wähle hier immer “Use same network as Docker Host”

Auswahl der Netzwerkanbindung

Alle anderen Einstellungen auf den Folgeseiten einfach auf den Standardeinstellungen stehen lassen und auch den Container danach starten lassen.

4. paperless-ngx-Container erzeugen.

Hierzu auch den Lauch-Knopf drücken während paperlessngx/paperless-ngx markiert ist.

Auf der ersten Wizard-Seite wieder die zweite Option auswählen:

Auf der zweiten Seite drücken wir den “Advanced Settings”-Knopf.

In dem Menü müssen wir zwei Umgebungsvariablen hinzufügen um uns später mit einem Admin-User einloggen zu können In der Variable PAPERLESS_ADMIN_USER kommt der Nutzername des ersten Benutzers rein.

PAPERLESS_ADMIN_PASSWORD enthält das Passwort

zwei Variablen um Paperless den Nutzer mitzuteilen.

Auf der Folgeseite kommen dann die Volume Settings. Hier fügen wir das in Schritt 1 angelegte Verzeichnis an zwei Stellen im Container ein. Dadurch kann dann der komplette Container gelöscht werden und trotzdem sind noch alle Daten da. Hier drücken wir also den “Add Folder”-Knopf und wählen dann den paperless-Ordner aus

als Mount-Path kommt /usr/src/paperless/media/ rein. Danach fügen wir den selben Ordner nochmal hinzu und wählen als Mount-Path stattdessen /usr/src/paperless/data/

Mount-Paths

Auf der Summary-Seite einfach Done drücken und der paperless-ngx-Container sollte loslaufen. Den Erfolg können wir auf der Container-Seite überprüfen.

Laufende Container auf der Synology

Sollte irgendetwas nicht in Ordnung sein, beendet sich der Container nach einigen Sekunden wieder. Den Fehler kann man dann auf dem Log-Tab der Container-Details erlesen.

Wenn alles geklappt hat, können wir uns mit den vorher festgelegten Zugangsdaten auf dem Webinterface von Paperless einloggen. Das finden wir unter Port 8000 der Synology

31 thoughts on “Paperless-ngx auf Synology”

  1. Noch ein kurzer Kommentar:
    ich bin an der Einbindung eines ‘Consume’ Ordners verzweifelt da ich den gerne in einem Unterordner des Scancverzeichnisses, welcher per SMB freigegeben ist, hierfür nutzen wollte. Da Docker wohl nur Zugriff auf Unterverzeichnisse im Dockerlaufwerk hat bin ich folgendermaßen vorgegangen:
    1. Verzeichnis ‘paperless-consume’ parallel zum ‘paperless’-Verzeichnis unter Docker angelegt (vgl Punkt 1)
    2. unter ‘Volume Settings’ diesen Ordner ausgewählt und mit ‘/usr/src/paperless/consume/’ gemountet
    3. Verknüpfung zum Scanverzeichnis über Mount-Bind erstellt:
    Einloggen per SSH und dann ‘sudo mount –bind Quelle Ziel’ bspw bei mir:
    sudo mount –bind volume1/Scanner/paperless-consume/ volume1/docker/paperless-consume/
    dieser Mount wird nach einem Neustart gelöscht ist aber für das Ausprobieren nützlich. Sollte die Einstellung dauerhaft gewünscht sein geht dies über eine Einbindung in ‘rc.local’:
    sudo vi /etc/rc.local
    sudo mount –bind volume1/Scanner/paperless-consume/ volume1/docker/paperless-consume/

    1. Das steht mir noch bevor. Aktuell habe ich noch keinen Scanner, der direkt in einen SMB-Share scannt. Es wäre halt schön, wenn man dafür keinen Hack auf der Shell machen müsste,…

      1. Das sind so ein paar Eigenheiten die man dann mit der Zeit lernt… Ich habe mich auch lange damit herumgeschlagen bis ich herausgefunden habe warum das Einbinden des fremden Verzeichnisses nicht direkt gegangen ist sondern der Umweg über das Verzeichnis in Docker gegangen werden muss…

        Der Mount ist notwendig da man bei SMB-shares unter Synology keine Verknüpfungen machen kann, wohl aus Sicherheitsaspekten (https://www.albertogonzalez.net/how-to-create-a-symbolic-link-to-a-folder-on-a-synology-nas/)

    2. Da ich mich mit der Shell nicht auskenne, habe ich die Sache mit einem einfachen Umweg erledigt:
      Scan to file in einen freigegebenen 08/15-Ordner namens “scans” und dann eine Aufgabe in meinen Zeitplan eingestellt:
      “rsync -a /volume1/scans/ /volume1/docker/paperless-ngx/data/consume/
      find /volume1/scans/ -print -delete”
      Läuft ohne Probleme seit Monaten.

      1. Ist auch das einzige, was bei mir funktioniert hat. Die Mounterei und Symlinks hatten dieselben Permission-Probleme… also vielen Dank für den Tipp.

        Bei der Recherche was die Optionen deiner Befehle tun, habe ich herausgefunden, dass rsync die Quellfiles auch selbst löschen kann mit “–remove-source-files”. So spart man sich find -delete und remove-source-files scheint auch etwas vorsichtiger mit dem Löschen zu sein, falls beim Kopieren was schiefgehen sollte.

        rsync /volume1/homes/user/Paperless-Inbox/ /volume2/docker/paperless-ngx/consume -a –remove-source-files

        Gibt sicher intelligentere Lösungen, aber die stumpfen funktionieren wenigstens.

        1. Danke für den Hinweis…wichtig ist, dass vor dem remove-source-files zwei “-” (Minus/Bindestriche) sind.

    3. Ich habe es anders gelöst:
      Wir haben einen gemeinsamen Share: “public”. Auf diesen haben alle Nutzer im Netzwerk zugriff (wobei es ja auch egal ist, hauptsache es gibt einen gemeinsamen Ordner).

      Hier habe ich einen Unterordner “paperless” angelegt und via File-Station die Berechtigung für “Everyone” mit “Lesen & Schreiben” gegeben. Ich sehe hier kein Sicherheitsproblem, da Paperless ja den Ordner sowieso leert. Korrigiert mich, wenn ich falsch liege.

      Anschließend dem Docker unter “Volume-Einstellungen” -> “Ordner hinzufügen” -> “/public/paperless” mit dem Ziel “/usr/src/paperless/consume/” mitgegeben.

      Für Multiuser fehlt leider noch die “Multi-User-Consume”-Option, daher muss man manuell die Berechtigung auf den jeweiligen User anpassen, sonst sieht jeder alles.
      -> https://github.com/paperless-ngx/paperless-ngx/pull/4196

      Funktioniert für mich ohne gebastle auf der Shell oder Cronjobs.

  2. Wie würde denn ein Upgrade auf paperless-ngx auf 1.8 funktionieren, ein Austauschen / Reload des LATEST Image klappt leider nicht ganz da als Fehler PAPERLESS_CONSUMPTION_DIR is not writeable angezeigt wird.

    1. Sorry für die späte Antwort. Ich habe bei dem Update den gleichen Fehler gehabt. Das habe ich dadurch gelöst, dass ich das Verzeichnis /usr/src/paperless/consume in den Volume-Settings ebenfalls nach außen gemappt habe.

  3. Hallo,

    ich habe es nun auf verschiedene Arten probiert, aber ich komme einfach nicht auf das Interface unter localhost:8000. Alle Browser zeigen mir immer: ERR_SSL_PROTOCOL_ERROR

    Die beiden Container Redis und Paperless laufen beide, in den Protokollen stehen keine Fehlermeldungen. Hat mir jemand noch eine Idee? Vielen Dank

  4. Funktioniert. Scanordner ist eingerichtet. Ganz ohne gebastel mit Befehlseingaben. Danke für den Tip.

  5. Hallo bert
    Erst einmal vielen Dank für dein Tutorial! Hat alles gut geklappt.
    Leider klappt die “Weiterleitung” via reverse proxy nicht (bei bitwarden klappt es wunderbar). Die Eintragung PAPERLESS_URL bringt einen 400er Fehler.
    Hast du oder vielleicht jemand anderer eine Idee, was ich da falsch mache?
    Vielen Dank

    1. Habe das Problem nun selbst gelöst:
      Nachdem ich den Reverse Proxy eingelöst habe, habe ich doch glatt vergessen das Zertifikat einzurichten. Nachdem ich das gemacht habe und die Eintragung PAPERLESS_URL gemacht habe, hat alles geklappt.

  6. Hallo,
    ich möchte einfach nur auf diesem Weg DANKE sagen. Das ist die erste Anleitung, die auf Anhieb funktioniert hat.

  7. Hallo Bert,

    danke für den guten Beitrag. Wie kann ich denn einen Export/Import der Daten bzw. ein Backup durchführen um zum Beispiel auf eine neue Version zu aktualisieren? Danke für die Unterstützung und viele Grüße. 🙂

    1. Alle relevanten Daten liegen in dem eingebunden Verzeichnis. In meiner Anleitung ist das docker/paperless. Für ein Update kannst Du den Container also einfach löschen und mit der neuen Version wieder erzeugen. Mit den eingebundenen weiß der neue Container wieder alles. Von dem Docker/paperless-Verzeichnis kann man natürlich auch jederzeit mit den Bordmitteln der Synology ein Backup machen.

  8. Hallo, erst einmal danke für Anleitung. Ich habe mich genau daran gehalten, aber Paperless fährt kurz nach dem Start autom. herunter und es kommen folgende Meldungen:

    -Error 99 connecting to localhost:6379. Cannot assign requested address
    -Redis ping #1 failed
    -Failed to connect to redis using environment variable PAPERLESS_REDIS

    Paperless kann sich anscheinend nicht mit redis verbinden. Unter Netzwerk sind die beiden Container über Bridge verbunden bzw. aktiviert.

    1. Hi,
      versuche auch gerade paperless ans Laufen zu bekommen und habe auch den Fehler: Failed to connect to PAPERLESS_REDIS – localhost: 6379
      Gibt es da schon einen Lösungsansatz, was ich hier falsch mache?

      1. Ich habe das lösen können in dem ich die Variable “PAPERLESS_REDIS” mit dem Wert “redis://[IP-Adresse-der NAS]:6379 eingetragen habe.

  9. Hallo, ich habe paperless nun mal mit Docker am laufen, wenn ich aber Dokumente hoch lade (einfach rein ziehen) kommt nach kurzer verarbeitung User matching query does not exist.
    Der komplette Fehler:
    Rechnung-nc-2779467.pdf: The following error occurred while consuming Rechnung-nc-2779467.pdf: User matching query does not exist. : Traceback (most recent call last):
    File “/usr/local/lib/python3.8/dist-packages/asgiref/sync.py”, line 280, in main_wrap
    raise exc_info[1]
    File “/app/paperless/src/documents/consumer.py”, line 356, in try_consume_file
    document_consumption_finished.send(
    File “/usr/local/lib/python3.8/dist-packages/django/dispatch/dispatcher.py”, line 176, in send
    return [
    File “/usr/local/lib/python3.8/dist-packages/django/dispatch/dispatcher.py”, line 177, in
    (receiver, receiver(signal=self, sender=sender, **named))
    File “/app/paperless/src/documents/signals/handlers.py”, line 489, in set_log_entry
    user = User.objects.get(username=”consumer”)
    File “/usr/local/lib/python3.8/dist-packages/django/db/models/manager.py”, line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
    File “/usr/local/lib/python3.8/dist-packages/django/db/models/query.py”, line 496, in get
    raise self.model.DoesNotExist(
    django.contrib.auth.models.User.DoesNotExist: User matching query does not exist.

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/src/django-q/django_q/cluster.py”, line 434, in worker
    res = f(*task[“args”], **task[“kwargs”])
    File “/app/paperless/src/documents/tasks.py”, line 162, in consume_file
    document = Consumer().try_consume_file(
    File “/app/paperless/src/documents/consumer.py”, line 413, in try_consume_file
    self._fail(
    File “/app/paperless/src/documents/consumer.py”, line 84, in _fail
    raise ConsumerError(f”{self.filename}: {log_message or message}”)
    documents.consumer.ConsumerError: Rechnung-nc-2779467.pdf: The following error occurred while consuming Rechnung-nc-2779467.pdf: User matching query does not exist.

    1. In diesem Ticket wird der Fehler erwähnt. Hier schein der Consumer-Nutzer abhanden gekommen zu sein. Den muss man wie in der vorletzen Antwort beschrieben, nur wieder anlegen,

  10. Hallo bert,

    besten Dank für deine Anleitung. Eine Frage dennoch, welche auch bereits gestellt wurde. Ist es für ein Backup wirklich ausreichend, lediglich den paperless Ordner, in welchem sich nur die Ordner data und media befinden, zu sichern? Man liest überall, man müsse das über die Befehlszeile exportieren.

    Wo legt paperless eigentlich die config Daten ab, wenn man den Ordner nicht per Variable mitgibt?

    Grüße Maik

  11. Hallo, vielen Dank für die Anleitung, klappt eigentlich super mit meiner Synology (6.9….). Ich kann nur leider Dateien nur manuell hochladen. Ich habe jetzt eine Stunde lang verschiedenes versucht, aber egal wo ich den consume Ordner anlege (in paperless/ oder in paperless/data/), paperless sieht die Dateien nicht. Wenn ich eine weitere Variable hinzufüge (PAPERLESS_CONSUMPTION_DIR=/consume/), stürzt der Container ab. Bei allen anderen scheint es ja zu laufen, wie habt Ihr das hingekriegt? Hab mich genau an diese Anleitung gehalten. Danke

    1. Sorry, inzwischen läuft es doch. Habe es gelöst wie Martin, alles andere lief nicht. Wichtig war dabei wirklich das chmod 777 für den Scanordner, den mein Scanner befüllt, manuelle Rechtevergabe im DSM hat nicht gereicht.

Leave a Reply to achi Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.