Paperless-ngx, Teil 18: Synology/NAS ohne Docker nutzen

Gerade bei günstigen NAS-Varianten von Synology, QNAP und anderen Unternehmen läuft Paperless-ngx oft nicht, da die Docker-Unterstützung (Portainer/Container usw.) fehlt. So steht bei mir eine Synology von 2014 rum, die technisch vollkommen in Ordnung ist und alle Backup-Aufgaben prima erledigt, aber eben nicht die erwähnte Unterstützung hat. Wenn man noch einen Raspberry Pi (ab Modell 4) in der Schublade hat, so kann man den Winzling mit dem NAS kombinieren – und schon läuft Paperless-ngx. Der Vorteil: Die Daten werden direkt im Filesystem des NAS gespeichert und erhalten damit die gleichen Sicherungen/Backups, die ohnehin der gesamte Datenbestand des NAS erhält.

Kombination von Raspberry Pi mit einer Synology/einem NAS

Das Vorgehen zeige ich am Beispiel meiner Synology. Es klappt aber auch mit Geräten von anderen Herstellern, da die Grundfunktion – NAS-Ordner für Uploads freigeben – praktisch überall von Haus aus eingebaut ist. Was wir nun machen: Wir lassen die eigentliche (Docker-)Verarbeitung auf dem Raspberry Pi geschehen, weil dieser Docker beherrscht. Aber alle Verzeichnisse, mit denen der Raspberry Pi arbeitet, befinden sich auf dem NAS. Sogar der consume-Ordner, der neue Dokumente aufnimmt, befindet sich dort. Hat man also ohnehin bereits seinen Dokumentenscanner mit dem NAS verbunden, so können Scans weiterhin über das NAS aufgenommen werden. Alternativ kann man auch Dokumente, die sich bereits auf dem NAS befinden, in den consume-Ordner verschieben/kopieren:

Ordner auf dem NAS freigeben

NFS-Dienst aktivieren

Wer ein NAS besitzt, der wird in der Regel auch wissen, wie er dortige Verzeichnisse freigibt, damit zum Beispiel ein PC ein Backup auf dem NAS erstellen kann. Geräte wie die Synology bieten hier mehrere Verfahren/Protokolle an. Wir greifen zur NFS-Option, da auf diesem Weg die Übergabe vom Raspberry Pi sehr flott geschieht. Sofern noch nicht geschehen: NFS-Dienst aktivieren mit Systemsteuerung/Dateidienste/NFS. Dort die aktuelle Version NFSv4 verwenden.

Freigabe-Ordner erstellen

Noch einmal Systemsteuerung, jetzt Menüpunkte „Freigegebener Ordner“ und „Erstellen“.

In unserem Beispiel erhält der Hauptordner den Namen „paperless“. Dann auf „Bearbeiten“ gehen und dort in den Reiter „NFS-Berechtigungen“.

In der Maske folgende Einträge vornehmen:

  • Hostname: IP des Raspberry Pi im Heimnetz (hier: 192.168.178.64)
  • Berechtigung: Lesen/Schreiben
  • Squash: Alle Benutzer zu Admin zuweisen
  • Sicherheit: sys

Weiterhin die Häkchen bei „Asynchron aktivieren“ usw. setzen:

Nun noch im Hauptordner „paperless“ folgende Unterordner einrichten:

  • data
  • media
  • consume
  • export

Raspberry Pi: Installation anpassen

NFS-Dienst auf dem Raspberry Pi einrichten

Jetzt sind einige Schritte auf dem Raspberry Pi zu erledigen. Gut, das kostet ein paar Minuten Zeit – muss man aber ja nur am Anfang machen. Wenn es einmal läuft, hat man damit keinen Aufwand mehr.

Hinweis:
Ich verwende im Beispiel meine beiden IP-Adressen „192.168.178.64“ für den Raspberry Pi, meinen Nutzernamen „a“ und für die Synology „Volume 1“ und deren IP „192.168.178.22„. Diese Angaben an die im eigenen Heimnetz anpassen.

1. NFS-Client installieren

sudo apt update
sudo apt install nfs-common

2. Mount-Punkt erstellen

sudo mkdir -p /mnt/paperless/{data,media,consume,export}

3. NFS-Shares mounten

sudo mount -t nfs 192.168.178.22:/volume1/paperless/data /mnt/paperless/data
sudo mount -t nfs 192.168.178.22:/volume1/paperless/media /mnt/paperless/media
sudo mount -t nfs 192.168.178.22:/volume1/paperless/consume /mnt/paperless/consume
sudo mount -t nfs 192.168.178.22:/volume1/paperless/export /mnt/paperless/export

4. Permanente NFS-Verbindung einrichten

Damit die Verknüpfungen auch nach einem Neustart des Geräts erhalten bleiben, muss eine bestimmte Datei ergänzt werden. Die Textdatei „fstab“ in einem Editor aufrufen:

sudo nano /etc/fstab

Folgende Zeilen hinzufügen und speichern:

192.168.178.22:/volume1/paperless/data /mnt/paperless/data nfs defaults 0 0
192.168.178.22:/volume1/paperless/media /mnt/paperless/media nfs defaults 0 0
192.168.178.22:/volume1/paperless/consume /mnt/paperless/consume nfs defaults 0 0
192.168.178.22:/volume1/paperless/export /mnt/paperless/export nfs defaults 0 0

Paperless-ngx installieren

Die „normale“ Installation für den Raspberry Pi habe ich ja ausführlich beschrieben (Teil 5 der Paperless-ngx-Serie). Die Installation passiert jetzt auf dem gleichen Weg (evtl. muss statt „docker-compose“ die modernere Syntax „docker compose“ in den Befehlen verwendet werden). Wenn man danach vorgegangen ist, erhält man eine Textdatei auf dem Raspberry Pi im Verzeichnis „paperless-ngx“ die den Namen „docker-compose.yml“ trägt. Darin wird jetzt der Inhalt angepasst, damit die Synology-Verzeichnisse einbezogen werden. Prinzipiell kann man mit dem folgenden Text den Inhalt der Textdatei überschreiben. Daran denken: Ich verwende darin meine Beispiel-IP-Adressen – diese durch die eigenen ersetzen.

Weiterhin habe ich in die Datei den Nutzernamen „admin“ und das Passwort „admin“ aufgenommen, damit man direkt nach der Installation nicht lange überlegen muss. Diese Angaben sollte man natürlich auch ändern. Außerdem habe ich einen 10-Sekunden-Abruf/Poll für Dokumente eingerichtet, die via Consume-Verzeichnis aufgenommen werden sollen.

services:
  broker:
    image: docker.io/library/redis:7
    restart: unless-stopped
    volumes:
      - redisdata:/data

  db:
    image: docker.io/library/postgres:15
    restart: unless-stopped
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: paperless

  webserver:
    container_name: paperless-webserver
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    depends_on:
      - db
      - broker
      - gotenberg
      - tika
    ports:
      - "8000:8000"
    volumes:
      - /mnt/paperless/data:/usr/src/paperless/data
      - /mnt/paperless/media:/usr/src/paperless/media
      - /mnt/paperless/consume:/usr/src/paperless/consume
      - /mnt/paperless/export:/usr/src/paperless/export
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_URL: http://192.168.178.64:8000
      PAPERLESS_TIME_ZONE: Europe/Berlin
      PAPERLESS_OCR_LANGUAGE: deu
      PAPERLESS_TIKA_ENABLED: 1
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
      PAPERLESS_ADMIN_USER: admin
      PAPERLESS_ADMIN_PASSWORD: admin
      PAPERLESS_CONSUMER_POLLING: 1
      PAPERLESS_CONSUMER_POLLING_INTERVAL: 10
      PAPERLESS_CONSUMER_DELETE_DUPLICATES: 1

  gotenberg:
    image: docker.io/gotenberg/gotenberg:7.8
    restart: unless-stopped

  tika:
    image: ghcr.io/paperless-ngx/tika:latest
    restart: unless-stopped

volumes:
  redisdata:
  pgdata:

Docker Compose starten

Der Start von Paperless-ngx erfolgt mit dem gewohnten Befehl:

sudo docker compose up -d

Paperless-ngx verwenden

Der Aufruf von Paperless-ngx erfolgt im Browser mit der IP des Raspberry Pi plus „:8000“. Man hat die gewohnte Web-Oberfläche vor sich. Es ist also kein Unterschied zu einer Installation erkennbar, die pur auf dem Raspberry Pi läuft. Aber jedes Dokument, das aufgenommen wird, landet in den freigegebenen Ordnern auf der Synology.

Die Synology-Verzeichnisse werden von den Paperless-Kommandos, die man auf dem Raspberry-Pi ausführt, automatisch übernommen. Gibt man für den Export beispielsweise den Befehl

sudo docker-compose exec webserver document_exporter ../export

ein, so werden die Sicherungsdateien ebenfalls auf dem NAS gespeichert:

Auch die Anpassungen, die in der Artikelreihe erwähnt wurden – z. B. die Verwendung von sprechenden Dokumentennamen usw. – sollte funktionieren. Allerdings habe ich nicht alles getestet, da ich auch weiterhin vollständig Paperless-ngx auf meinem Raspberry-Pi betreiben werde. Aber da mich die Anfrage jetzt schon einige Male erreicht hat, ob man nicht seine Synology doch irgendwie verwenden kann, habe ich jetzt mal einen Test durchgeführt. Und wenn die Sache schon auf einem 10 Jahre alten Modell funktioniert, dann sollte es ja erst recht mit neueren Modellen klappen 🙂

Bisherige Teile der Paperless-ngx-Serie:

Teil 1: Ausführlicher Überblick
Teil 2: Suche & Tags
Teil 3: consume-Ordner – Einsatz von Scannern
Teil 4: Speicherpfade konfigurieren
Teil 5: Installation auf dem Raspberry Pi
Teil 6: Neue Funktionen in Version 2
Teil 7: Dokumente unterwegs über das eigene Modem abrufen
Teil 8: Exportfunktion nutzen
Teil 9: Update durchführen
Teil 10: Das Rundum-sorglos-Backup
Teil 11: Mail-Abruf mit vielen Extras
Teil 12: Mein Alltag mit Paperless-ngx
Teil 13: Ein Quanten-Code für das Papier-Archiv
FORUM für Fragen eröffnet
Teil 14: Automatisierte Ablage auf Speicherpfaden
Teil 15: Neue Funktion für das Verbinden und Trennen von Dokumenten
Teil 16: Dashboard, smarte Widgets und erweiterte Ansichten
Teil 17: Unterordner des consume-Verzeichnisses nutzen
Teil 18: Paperless-ngx auf Synology/NAS ohne Docker nutzen
Teil 19: Praxisbeispiel – kleine Hausverwaltung

30 Kommentare

    • Herbert

      Hallo Sebastian, danke Dir für den Hinweis! Ich werde den Artikel demnächst um die Befehle ergänzen, die die Verknüpfung auch nach einem Reboot beibehalten.

  • huebi

    Moin,
    dein Verfahren hat den Nachteil, dass du die Datenbank von den PDF Dateien trenst, denn die Dstenbank läßt du ja weiterhin auf dem Pi. Damit ist ein konsistentes Backup nicht mehr gegeben.

    • Herbert

      Danke für den Hinweis – das ist prinzipiell richtig. Die Datenbank könnte man auch noch verschieben, was aber trotzdem die Sicherung von zwei Orten/Geräten erfordert. Im Falle von Paperless-ngx ist die Besonderheit, dass die Datenbankinhalte recht gut und sehr flott durch den Export-Ordner rekonstruiert werden können. Zusammen mit den Skripten, die ich in der Artikelreihe beschrieben habe, scheint mir das ausreichend zu sein.

  • Chris

    Hallo, Danke für den Artikel,

    funktioniert das auch wenn ich Paperless mit Docker auf einem PC instaliere und die Daten am NAS speichere, den möchte denPC nicht 24/7 laufen lassen und schalte ihn am Abend aus, da benötige ich paperless auch nicht .

    bleibt die Verbindung dann beim docker starten bestehen?

    Dank für deinen Tipp
    Chris

    • Herbert

      Ja, das sollte klappen. Das Synology-NAS wird ja immer in Betrieb oder Standby sein und damit die Freigabe der notwendigen Ordner zur Verfügung stellen. Zumindest bei einem Linux-PC mit Docker Compose startet das System automatisch neu, wenn man den PC wieder anwirft. Unter Windows habe ich es nicht ausprobiert.

      • Chris

        Super Danke für die Antwort,
        Die Volumes für die Redis und Postgress Container würdest du am PC lassen oder auch aufe den NAS setzen?

        • Herbert

          Würde ich jetzt mal so lassen. Wichtig ist der Export-Ordner und dass man regelmäßig exportiert – damit hat man eigentlich ein vollständiges Backup.

  • Christian

    Hallo und danke für die Anleitung,

    allerdings habe ich das Problem, dass wenn ich die Daten auf der NAS in den „consume“ Ordner lege, keine Aktion stattfindet.
    Im Protokoll steht folgendes:
    „[2025-02-02 17:29:15,898] [INFO] [paperless.management.consumer] Using inotify to watch directory for changes: /usr/src/paperless/consume“

    Wenn ich aber in „/usr/src/paperless/consume“ nachschaue, gibt es keinen Ordner mit dem Namen „paperless“.
    Die Laufwerke der NAS sind unter „/mnt/paperless/consume“ auf dem Pi sichtbar. Auch dort ist das Dokument hinterlegt.

    Kann es sein, dass ich hier was anpassen muss:
    volumes:
    – /mnt/paperless/data:/usr/src/paperless/data
    – /mnt/paperless/media:/usr/src/paperless/media
    – /mnt/paperless/consume:/usr/src/paperless/consume
    – /mnt/paperless/export:/usr/src/paperless/export

    Grüße

    • Herbert

      Das Problem sollte einfach zu beheben sein. Füge diese Zeilen Deiner yml hinzu, dann schaut Paperless-ngx alle 10 Sekunden auf dem consume-Pfad nach, ob etwas zu holen ist.

      environment:
      PAPERLESS_CONSUMER_POLLING: 1
      PAPERLESS_CONSUMER_POLLING_INTERVAL: 10

      • Christian

        Danke für die Antwort.
        Ich habe deine Muster *.yml genommen und dort steht das ja schon drin.

        Ich sehe eher das Problem darin, dass er vermutlich nach wie vor auf den falschen Ordner schaut.
        Wenn ich die Datei im „/home/MyUser/paperless-ngx/consume“ direkt auf dem Pi reinlege funktioniert es nämlich.

        Das heißt ja er schaut eindeutig auf den falschen Ordner.

        Lesen/schreiben auf die mnt-Verzeichnisse funktioniert einwandfrei. Also heißt Zugriff funktioniert.

        • Herbert

          Dann muss er ja noch von einer früheren Installation den Pfad auf dem Pi intus haben. Probier zunächst mal sudo docker compose down und dann Neustart. Falls das nichts bringt, könnte es helfen, die bisherigen Docker-Container zu löschen (Export-Backup vorher machen, sicher ist sicher).

          • CHristian

            So ich hab es nun neu installiert, jetzt läuft es auch über die NAS. Allerdings ist es so, dass er die Dokumente nur nach einem Pi Reboot einliest.
            Danach kann ich in den „consume“ Ordner reinpacken was ich will, funktioniert dann leider nicht.

          • Herbert

            Gut, dann ist der eine Fehler ja behoben. (Zur Sicherheit solltest Du aber dennoch schauen, dass alte Container gelöscht sind.) Durch die Zeilen mit dem Polling-Intervall hat es mit meiner Synology gut funktioniert. Du kannst Dir ja mal die Log-Files anschauen, die Paperless-ngx zur Verfügung stellt.

  • Christian

    Hallo,
    also im Protokoll steht leider nichts auffälliges. Was ich nun rausgefunden habe, immer wenn der Docker Container neugestartet wird zieht er die Dokumente aus dem consume Ordner einmalig rein.
    Wenn diese abgearbeitet sind passiert aber dann leider nichts mehr… 😪

    Liegt deine docker-compose.yml auf dem. Pi oder auf der NAS?
    Bei mir ist sie auf dem Pi. Hatte bei der Installation versucht den Target Folder auf die NAS zu machen, das lässt er aber nicht zu.
    Vielleicht liegt es auch daran?

    • Christian

      Lösung:
      So nun habe ich eine Lösung gefunden und zwar liegt es unteranderem daran, dass meine Docker Version zu neu ist. Man darf dann auf keinen Fall „sudo docker-compose down“ & „sudo docker-compose up -d“ verwenden sondern nur die Variante ohne „-„.
      „sudo docker compose down“
      „sudo docker compose up -d“

      Was ich anfangs auch falsch gemacht habe, ich bin davon ausgegangen, dass beim Neustart die docker neu eingelsen wird, was aber nicht so ist in der Standardeinstellung. Dies hat dann zu vielen Problemen geführt.

      Ein große Hilfe war mir dann auch noch ChatGPT mit einer RapsberryPI GPT. Ist wirklich faszinierden.

      Schönen Abend und danke für die Hilfe und Doku!

      • Herbert

        Prima, wenn jetzt alles bei Dir klappt! Ja, die Änderung von „docker-compose“ zu „docker compose“ gab es vor einiger Zeit. Aber eigentlich kommt eine entsprechende Meldung auf dem Raspberry Pi, wenn man die ältere Variante eingibt. Egal – es funktioniert! 🙂

  • Thomas

    Hallo,

    ich habe paperless auf der Synology jetzt ein paar Tage nicht mehr verwendet, wollte heute einsteigen, und komme jtzt nicht mehr rein, weil angeblich der Benutzername oder das Passwort falsch ist?

    Was kann da passiert sein, das PW und der Benutzer sind aber mit Sicherheit richtig….???

    Danke,
    Thomas

    • Herbert

      Du kannst mit dem Befehl „docker compose run –rm webserver createsuperuser“ einen Superadmin erstellen und damit auf alle Konten zugreifen und auch die Passwörter anpassen. Warum es im konkreten Fall zu einer Änderung kam, kann ich nicht sagen.

  • Michael

    Hallo,
    auch von mir vielen Dank für die Anleitung. Ich hatte jetzt fast alles so weit, wie ich es wollte. Leider ist mir aufgefallen, dass paperless mit den Einstellungen hier nicht „lernt“. Die Zuordnungen werden nicht intelligenter. Ich habe versucht es über „docker-compose run webserver document_create_classifier“ zu erzwingen, dabei kommt jedoch der Fehler, dass paperless die „ownership“ der Ordner ändern will und das nicht kann: „chown: changing ownership of ‚/usr/src/paperless/consume‘: Invalid argument“. Da muss man wahrscheinlich noch etwas mit den Rechten umstellen, ich habe aber noch nicht genau rausbekommen, was.
    Viele Grüße,
    Michael

    • Michael

      OK, war mein Fehler. Es kann nur von Dokumenten gelernt werden, die nicht mit „Eingang“ gekennzeichnet sind. Da ich die Dokumente noch mit dem Tag hatte, hat es nicht funktioniert. Also auch mit dem Problem, dass er die ownership nicht ändern kann, funktioniert es.

      • Herbert

        Prima! Danke für die Ergänzung, hilft sicher auch anderen weiter, weil man nicht unbedingt an den Tag „Eingang“ in diesem Zusammenhang denkt.

  • Florian

    Hi,

    wenn ich die nfs shares mounten will, sagt er mir dass der Zugriff vom Server verweigert wird. Hab aber die NFS Berechtigungen wie oben beschrieben gesetzt. woran könnte das noch liegen?

    • Herbert

      Das ist schwer zu sagen, da ich nicht weiß, mit welchen Systemen Du arbeitest. Wenn Du eine Synology mit der aktuellen Version einsetzt und einen Raspberry Pi mit Raspberry Pi OS 64-bit sollte es funktionieren, da ich es auf verschiedenen Geräten getestet habe. Klappt denn die Synology-NFS-Freigabe jenseits von Paperless-ngx?

  • Herbert

    Priobier mal einen spezialisierten Bankpfad:
    Bank = {{ created_year }}/{{ correspondent }}/Bank/{{ correspondent }}/{{ title }}
    Dokumenttyp wäre hier „Bank“

    Alternativ kannst Du mal ausprobieren:

    {% if document_type == „Bank“ %}
    {{ created_year }}/{{ correspondent }}/{{ document_type }}/{{ correspondent }}/{{ title }}
    {% else %}
    {{ created_year }}/{{ correspondent }}/{{ document_type }}/{{ title }}
    {% endif %}

    Schreib‘ bitte mal, ob eine dieser Lösungen bei Dir funktioniert.

  • Florian

    Das Mounten hat gut funktioniert. Alle Dateien die ich auf das NAS schiebe sehe ich jetzt auch auf dem Pi.. nur paperless importiert die DAten in dem Ordner nicht.. was mache ich falsch?

    • Herbert

      Was meinst Du genau? Hast Du den Ordner „consume“ auf der Synology angelegt? Falls Paperless-ngx sie von dort nicht automatisch aufsaugt, dann ergänze mal Deine *.env mit „CONSUMER_POLLING: 5“ (damit schaut Paperless-ngx alle 5 Sekunden nach neuen Dateien).

Eine Antwort schreiben

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