HomeBlogÜber

DMS Paperless-ngx auf Synology

Von Jewgeni
Kategorie: Homeserver
March 18, 2022
Update: June 10, 2022
8 Minuten
DMS Paperless-ngx auf Synology

Inhaltsverzeichnis

01
Voraussetzungen
02
Vorbereitung
03
Installation
04
Archivierung
05
Container Update
06
Backup

Paperless-NGX ist ein Open Source Dokumenten-Management-System (DMS). Ich habe in der Vergangenheit bereits mehrfach darüber geschrieben. Es gibt dazu sogar schon eine Anleitung im Blog. Jedoch wurde es mit der Zeit etwas unübersichtlich und vor einer Woche erschien dann die erste offizielle Version von Paperless-NGX als Nachfolger von Paperless-ng.

Deshalb denke ich, dass es an der Zeit den Synology Teil in diesen Blogpost zu verschieben.

Paperless ist es wert, getestet zu werden. Es ist kostenlos und die Dokumente werden nicht “eingesperrt”. Im Zweifel kann man die archivierten Dokumente alle auf dem NAS wiederfinden und ist damit nicht auf ewig an Paperless gebunden.

Voraussetzungen

Für diese Anleitung wird ein Synology-NAS benötigt. Ich selbst nutze ein Synology DS220+(Amazon Affiliate-Link) mit zusätzlichen 8 GB RAM(Amazon Affiliate-Link). So viel RAM ist nicht zwangsweise notwendig. Es hängt auch viel davon ab, wie viele andere Anwendungen auf dem NAS parallel laufen. Mindestens 1 GB ist jedoch empfehlenswert. Wenn man viele Dokumente mit OCR bearbeiten möchte und mit Tika sowie Gotenberg auch Docx Dokumente hochladen und konvertieren möchte, wären eher 2 GB wünschenswert.

Auf dem Synology NAS sind Docker aus dem Paket-Zentrum sowie Portainer, wie hier beschrieben, installiert. Wir möchten Paperless in einem Docker Container installieren. Portainer ermöglicht die Nutzung einer docker-compose Datei in einer grafischen Oberfläche, dadurch wird die Installation vereinfacht. Darüber hinaus wird auch die Verwaltung der Container erleichtert. Auf die anderen Möglichkeiten (Docker Compose über SSH oder Ausführung über Aufgabenplaner) möchte ich hier nicht eingehen.

(Optional) Im Netzwerk befindet sich ein Nginx Proxy Manager, dieser kann aber auch bei Bedarf auf dem Synology NAS selbst installiert werden. Des Weiteren sorgt ein DNS-Server für die interne Weiterleitung. Damit ist es möglich, dass Paperless nicht nur über {IP-Adresse-Synology}:{Portnummer} aufgerufen werden kann, sondern über sowas wie dms.domain.de. Ermöglicht wird dadurch auch auf Wunsch der externe Zugriff.

(Optional) Eine E-Mail-Adresse, die von Paperless gescannt werden darf. Damit ist es möglich, dass Anhänge aus E-Mails automatisch in Paperless archiviert werden. Man kann dazu natürlich auch einen eigenen Mail-Server benutzen. An diese Adresse leitet man dann E-Mails mit Anhängen weiter, die archiviert werden sollen. Die Anhänge werden geladen, die E-Mail kann automatisch verschoben oder gelöscht werden.

(Optional) Netzwerkscanner. Ich selbst nutze einen Xerox 6515DNI (Amazon Affiliate-Link), der entweder einen Scan an die oben erwähnte E-Mail-Adresse senden oder auch die Datei direkt ins NAS ablegen kann (wenn er gerade nicht Probleme damit hat, es zu finden). Dadurch spart man sich den Schritt des manuellen Uploads. Möchte man keinen Drucker, sondern nur einen Scanner haben, ist der Brother ADS-1700W (Amazon Affiliate-Link) empfehlenswert.

(Optional) Speicher zum Backup. Dabei lassen sich auch solche Dienste wie Google Drive oder Microsoft OneDrive nutzen sowie andere WebDAV-Speicher. Natürlich kann man für ein Backup auch etwas Simples, wie eine externe Festplatte nehmen. Man sollte nicht vergessen, dass RAID kein Backup ist.

(Optional) Android Smartphone. Dafür gibt es die beiden Apps Paperless und Paperless Share, die die Handhabung von Paperless mit einem Android-Smartphone erleichtern.

Vorbereitung

Neuer Benutzer

Aus Sicherheitsgründen sollte man gegebenenfalls nicht sein Administrator Konto nutzen, um den Paperless Container zu starten. Deshalb erstelle ich eine “docker” Gruppe.

Gruppe für Docker einrichten
Gruppe für Docker einrichten

Danach erstelle ich einen neuen Benutzer. Wenn man Rechte noch kleinteiliger vergeben möchte, kann man an dieser Stelle auch den Benutzer “paperless” erstellen.

Neuen Benutzer einrichten
Neuen Benutzer einrichten

Diesen Benutzer packe ich in die Docker Gruppe.

Nutzer in die Docker Gruppe hinzufügen
Nutzer in die Docker Gruppe hinzufügen

Jedenfalls muss ich noch die ID vom gerade erstellten Benutzer und der Gruppe “docker” herausfinden. Dazu aktiviere ich temporär SSH und verbinde mich über irgendein Terminal mit dem NAS.

SSH-Dienst aktivieren
SSH-Dienst aktivieren

ssh adminbenutzername@{ip-adresse-vom-nas}

Ich möchte als Erstes die UserID vom Nutzer docker erfahren.

id docker

Daraufhin sollte sowas in der Art erscheinen:

uid=1010(docker) gid=100(users) groups=100(users),65555(docker)

In diesem Fall merke ich mir die 1010 als UserID und die 65555 als GruppenID.

exit

Außerdem schalte ich SSH wieder aus.

SSH-Dienst ausschalten
SSH-Dienst ausschalten

Neue Ordner

Jetzt erstelle ich einen neuen Freigabeordner ohne Prüfsummen-Check.

Synology schreibt dazu Folgendes:

Um die Qualität der Dienste sicherzustellen, empfehlen wir, Daten-Prüfsumme nicht zu aktivieren, wenn der freigegebene Ordner für folgende Dienste genutzt wird:

  • Hosting von Datenbanken oder virtuellen Maschinen
  • Speichern von Videoaufnahmen von Surveillance Station
  • Ausführen von Diensten, die kleine oder zufällige Schreiboperationen erfordern

Auch wenn es in diesem Fall keine Datenbank sein wird, die viele Schreiboperationen erhalten wird, lasse ich den Prüfsummencheck weg.

Neues Verzeichnis
Neues Verzeichnis

Die Docker Gruppe benötigt Zugriffsrechte auf den Ordner.

Rechteverwaltung für Gruppen
Rechteverwaltung für Gruppen

Der Docker-Nutzer am besten auch.

Zugriffsrecht für Benutzer
Zugriffsrecht für Benutzer

In den paperless Ordner kommen sechs Unterordner: data, db, db-backup, export, media und redis.

Paperless Verzeichnis
Paperless Verzeichnis

Zudem erstelle ich den Ordner, aus dem Paperless automatisch Dokumente extrahieren soll, in meinem Home-Verzeichnis.

Paperless Inbox
Paperless Inbox

Alternativ ist es auch denkbar seinem Netzwerk-Scanner ein Benutzerkonto auf der DiskStation anzulegen und den Inbox Ordner im Homeverzeichnis eben dieses Benutzers anzulegen. Damit braucht der Scanner keinen Zugriff auf das Hauptkonto, es ist aber dennoch möglich in diesen Ordner zu scannen. Oder man erstellt einen zusätzlichen Freigabeordner, wenn man auch manuell dort Dateien ablegen möchte.

An diesem Ordner ändere ich die Berechtigungen. Der Benutzer Docker erhält Schreib- und Leserechte, ggf. auch der Netzwerk-Scanner und der eigene Benutzer.

Paperless Inbox Berechtigungen
Paperless Inbox Berechtigungen

Damit habe ich alles, was nötig ist.

Firewall

An dieser Stelle ist es zudem hilfreich sicherzugehen, dass die Container, die erstellt werden, miteinander kommunizieren dürfen. Hat man eine restrektive Firewall eingerichtet, empfielt es sich entweder gleich den kompletten internen IP-Bereich freizugeben oder nach der Installation zu schauen, welche IP-Adressen von den Containern verwendet werden.

Installation

Paperless unterstützt PostgreSQL und sqlite für die Speicherung der Daten. Dadurch, dass mehrere Vorgänge gleichzeitig geschrieben werden können, wird jedoch dringend empfohlen, PostgreSQL zu verwenden, da sqlite in dieser Hinsicht seine Grenzen hat.

Deshalb wollen wir auch hier Paperless-ngx mit einer PostgreSQL Datenbank nutzen. Zudem muss ein Redis Broker eingesetzt werden. Redis ist dafür verantwortlich, Aufgaben vom Webserver zum Aufgabenplaner zu bringen.

Ich habe die letzten Wochen Paperless-ngx mit Redis 6.2 und PostgreSQL 14 genutzt (statt 6.0 bzw. 13). Es lief stabil und ohne jegliche Probleme. Deshalb nutze ich hier diesmal diese neueren Versionen. Zudem starte ich einen Container, der für das Backup automatisch jede Woche einen dump der Datenbank erstellt. Darüber hinaus auch Tika/Gotenberg, um auch Office-Dokumente (wie “.docx”, “.doc”, “.odt”, “.ppt”, “.pptx”, “.odp”, “.xls”, “.xlsx” und “.ods”) verarbeiten zu können.

Wir rufen Portainer auf und können mit der Installationen beginnen.

Neuer Stack (Docker-Compose)

Unter Stacks kann nun ein neuer Stack hinzugefügt werden.

Neuer Stack
Neuer Stack

Wenn dieser Menüpunkt fehlt, sollte man nochmal sichergehen, dass man die lokale (“local”) Umgebung ausgewählt hat und Portainer mit dem Image portainer/portainer-ce und nicht portainer/portainer betrieben wird.

Hier fügen wir den Docker Compose Code ein.

Compose Datei in den Stack einfügen
Compose Datei in den Stack einfügen

version: '3.6'

networks:
  internal:
    external: false

services:
  broker:
    container_name: paperless-redis
    image: redis:6.2
    # Wenn man lieber 6.0 nutzen möchte
    # image: redis:6.0
    networks:
      - internal
    volumes:
      # Hier den richtigen Pfad eintragen
      - /volume1/paperless/redis:/redis
    #  - /volume2/paperless/redis:/redis
    restart: unless-stopped

  db:
    container_name: paperless-db
    image: postgres:14
    # Wenn man lieber die 13 Version von PostgreSQL möchte
    # image: postgres:13
    # Nicht einfach up- oder downgraden, die Datenbank wird dann nicht mehr laden.
    networks:
      - internal
    restart: unless-stopped
    volumes:
      # Hier den richtigen Pfad eintragen
      - /volume1/paperless/db:/var/lib/postgresql/data
    #  - /volume2/paperless/db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      # Hier ein anderes Passwort verwenden
      POSTGRES_PASSWORD: xzdN19DTd3CxWOuXP6eSyfhB19HRAx

  webserver:
    container_name: paperless
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    networks:
      # Wenn sich der Proxy Manager auf der Synology befindet, sollte hier zusätzlich das Netzwerk davon eingetragen werden, statt einen Port freizugeben.
      - internal
    restart: unless-stopped
    depends_on:
      - db
      - broker
    ports:
      # Diesen Teil löschen, wenn der Proxy Manager auf der Synology ist.
      # Ansonsten hier einen Port auswählen, der frei ist.
      - 8010:8000
    # - 8011:8000
    # - 8012:8000
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:8000']
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      # Hier die richtigen Pfade eintragen
      - /volume1/paperless/data:/usr/src/paperless/data
      - /volume1/paperless/media:/usr/src/paperless/media
      - /volume1/paperless/export:/usr/src/paperless/export
      - /volume1/homes/benutzername/Paperless-Inbox:/usr/src/paperless/consume
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBPASS: xzdN19DTd3CxWOuXP6eSyfhB19HRAx # Das ist das Passwort von oben
      USERMAP_UID: 1010 # UserID für den docker Benutzer
      USERMAP_GID: 65555 # GruppenID für den docker Benutzer
      PAPERLESS_OCR_LANGUAGES: eng deu
      # Hier einen zufälligen Key eintragen, wenn man Paperless von Außen erreichbar machen möchte.
      PAPERLESS_SECRET_KEY: C3Q2dLkVPqZWDKTXgkHwWhJ6jk8XqAbeDmDZjCxvb3c2jXl6pTGQXqJFqEkS9umFmXrk4WmzT8rlwjqWan6A2G54Q5IgraBv96CS
      # Hier die eigene Domain hinter localhost eintragen, wenn man einen Proxy Host benutzt, ansonsten diese Umgebungsvariable löschen.
      PAPERLESS_ALLOWED_HOSTS: 'localhost,paperless.domain.de'
      PAPERLESS_TIME_ZONE: Europe/Berlin
      PAPERLESS_OCR_LANGUAGE: deu
      # Hier anpassen, wenn man eine andere Ordnerstruktur haben möchte
      PAPERLESS_FILENAME_FORMAT: '{created_year}/{correspondent}/{title}'
      # Die nächsten drei Zeilen weglassen, wenn man Tika/Gotenberg nicht einsetzen möchte.
      PAPERLESS_TIKA_ENABLED: 1
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000/forms/libreoffice/convert#
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
      # Die nächste Zeile setzen, wenn man einen Proxy Server benutzt.
      PAPERLESS_URL: 'https://paperless.domain.de'

  db-backup:
    container_name: paperless-db-backup
    # Das Image ggf. an das obere anpassen
    image: postgres:14
    volumes:
      # Hier den richtigen Pfad eintragen
      - /volume1/paperless/db-backup:/dump
      - /etc/localtime:/etc/localtime:ro
    environment:
      PGHOST: db
      PGDATABASE: paperless
      PGUSER: paperless
      PGPASSWORD: xzdN19DTd3CxWOuXP6eSyfhB19HRAx # Das ist das Passwort von oben
      BACKUP_NUM_KEEP: 10
      BACKUP_FREQUENCY: 7d # Alle 7 Tage, kann man anpassen
    entrypoint: |
      bash -c 'bash -s <<EOF 
      trap "break;exit" SIGHUP SIGINT SIGTERM 
      sleep 2m 
      while /bin/true; do
        pg_dump -Fc > /dump/dump_\`date +%d-%m-%Y"_"%H_%M_%S\`.psql 
        (ls -t /dump/dump*.psql|head -n $$BACKUP_NUM_KEEP;ls /dump/dump*.psql)|sort|uniq -u|xargs rm -- {} 
        sleep $$BACKUP_FREQUENCY 
      done 
      EOF'
    networks:
      - internal

  # Diesen Part weglassen, wenn man keine Umwandlung von Office-Dokumenten haben möchte.
  gotenberg:
    container_name: paperless-gotenberg
    image: gotenberg/gotenberg:7
    restart: unless-stopped
    environment:
      CHROMIUM_DISABLE_ROUTES: 1
    networks:
      - internal

  tika:
    container_name: paperless-tika
    image: apache/tika:2.3.0
    restart: unless-stopped
    networks:
      - internal

In den Kommentaren habe ich die Stellen angegeben, die eventuell angepasst werden müssen. Die Pfade zu den Verzeichnissen sollten angepasst werden. Insbesondere der Pfad zur Paperless-Inbox wird anders lauten.

Das Passwort der Datenbank muss an drei Stellen geändert werden.

PAPERLESS_ALLOWED_HOSTS sollte gelöscht werden, wenn man nicht über einen Proxy-Host auf Paperless zugreifen möchte. Ansonsten sorgt es dafür, dass nur das Synology-NAS selbst Zugriff hat sowie Geräte, die über die eingetragene Domain Paperless aufrufen. Geändert werden muss der PAPERLESS_SECRET_KEY. Wenn man nicht plant Paperless öffentlich zu betreiben, kann man die Zeile auch auskommentieren oder löschen. Der Key kann zufällig sein.

Die UserID und GruppenID sollte geändert werden (ansonsten ist kein Zugriffsrecht auf die Ordner sichergestellt).

Bei PAPERLESS_FILENAME_FORMAT hat man folgende Variablen zur Verfügung:

  • {asn}: Die Archivierungs-Seriennummer des Dokuments
  • {correspondent}
  • {document_type}
  • {tag_list}: Alle Tags mit einem Komma getrennt
  • {title}: Name des Dokuments
  • {created}
  • {created_year}
  • {created_month}: Monat (1-12)
  • {created_day}: Tag (1-31)
  • {added}: Zeitpunkt, indem das Dokument zu Paperless hinzugefügt wurde
  • {added_year}
  • {added_month}
  • {added_day}

Die Dateien werden nach dem gewählten Schema im Ordner media abgelegt. Im Beispiel oben “{created_year}/{correspondent}/{title}” würde so mein Steuerbescheid 2020 beispielsweise in dem Verzeichnis “/media/documents/originals/2021/Finanzamt” abgelegt werden. Hier ist es wichtig, dass man die Struktur nicht manuell anfassen sollte!

Hat man wenig Systemressourcen, kann man den Teil mit Tika und Gotenberg weglassen. Dann können weiterhin noch PDF Dokumente, PNG Grafiken, JPEG, TIFF und GIF Bilder verarbeitet werden.

Weitere Konfigurationsmöglichkeiten finden sich in der Dokumentation.

Das Deployment kann etwas Zeit in Anspruch nehmen, wenn alle Images bisher noch nicht heruntergeladen wurden. Nach ein bisschen Warten sollten alle Container gestartet sein.

Nginx Proxy

In der Zwischenzeit kann man einen Proxy-Host für Paperless erstellen. Dabei gebe ich die Adresse meines Synology-NAS sowie die oben gewählte Portnummer ein. Außerdem kann ich mit einer Access Liste einstellen, ob nur ein lokaler Zugriff möglich ist.

Proxy Host
Proxy Host

Wenn sich der Nginx Proxy Manager auf dem NAS befindet und der Webserver im gleichen Docker Netzwerk ist, kann man hier den Hostnamen des Webservers eingeben sowie den Port 8000.

Nachdem ich das SSL Zertifikat für den Proxy Host besorgt habe, füge ich aber auch noch ein paar zusätzliche Einstellungen in die “Custom Nginx Configuration” ein.

Custom Nginx Configuration
Custom Nginx Configuration

client_max_body_size 20M;
proxy_redirect off;

Das sorgt dafür, dass auch größere Dateien (20 MB) über das Web Interface zu Paperless geladen werden können.

Neuer Benutzer

Als Letztes brauchen wir noch ein Benutzerkonto in Paperless. Dazu drücke ich in Portainer auf den paperless Container.

Auswahl des Containers
Auswahl des Containers

Anschließend auf Console.

Console
Console

Und dann gebe ich python3 manage.py createsuperuser als Befehl ein.

Neuen Benutzer anlegen
Neuen Benutzer anlegen

Anschließend werde ich dann nach Benutzernamen, Passwort sowie E-Mail-Adresse gefragt.

Jetzt sollte möglich sein, sich in Paperless anzumelden. Hat man keinen Proxy Host eingerichtet, ist Paperless unter der IP-Adresse des NAS inklusive gewähltem Port (8010) erreichbar.

Archivierung

Ablage

Zur Archivierung kann man die Dateien in die Web-Ansicht von Paperless reinschieben. Man kann die Dokumente aber auch in den angelegten Paperless-Inbox Ordner legen. Ebenso kann man eine Mail schicken, wenn man die Einstellungen im Admin-Menü dafür ausgefüllt hat.

Wenn Tika und Gotenberg eingerichtet sind, sollte es auch möglich sein, beispielsweise ein *.docx Dokument hochzuladen. Gibt es dabei Fehler, könnte es beispielsweise daran liegen, dass die Synology DiskStation eine ARM-CPU hat. In diesem Fall braucht man hier andere Images.

Meta-Daten

Sobald man ein Dokument in Paperless geladen hat, kann man die Meta-Daten bearbeiten. Dies sollte man auch tun, wenn man das Dokument später wiederfinden möchte.

  • Titel: Der Titel des Dokuments
  • Archiv-Seriennummer: Wichtig insbesondere für Dokumente, die man auch analog ablegt. Auf diese kann man vor dem Scan eine Nummer schreiben und diese anschließend in einen Ordner legen. So ist es dann möglich, mithilfe von Paperless später auch den analogen Beleg wiederzufinden.
  • Korrespondent: Hier würde ich die Person eintragen, von der die Datei erstellt wurde, bzw. an wem sie geht. Im Zweifel würde ich es eher breiter definieren.
  • Dokumenttyp: Hier würde ich die Art des Dokuments eintragen. Sowas wie Rechnung, Bericht, Anleitung, Vertrag, Sonstiges usw.
  • Tags: Hier kann man mehrere Filter für das Dokument eintragen. Z. B. den Empfänger des Dokuments, welchen Betreff das Dokument hat und ggf. auch welches Jahr es betrifft. Wichtig sind vermutlich auch solche Tags wie “Steuer”, wenn es die Steuer betrifft oder “Arbeit”, wenn die Dokumente mit der Arbeit zu tun haben.

Am Ende muss das jeder für sich entscheiden. Glücklicherweise hilft auch das OCR sehr beim Wiederfinden der gesuchten Informationen.

PDF-Viewer

In den Einstellungen lässt sich auch der PDF-Web-Betrachter einschalten. Zumindest unter Chrome funktioniert er bisher zuverlässig.

Container Update

Gegebenenfalls möchte man seine Paperless Instanz oder die anderen Container auf den neuesten Stand bringen. Die neuste Paperless-Version finde ich hier.

Die aktuell installierte Version sieht man unten links in der Paperless-ngx UI. Vor dem Update empfehle ich, eine Sicherung zu erstellen. Auch die anderen Container lassen sich updaten.

Dazu einfach im Image Menü von Portainer das Image “ghcr.io/paperless-ngx/paperless-ngx:latest” neu pullen.

Paperless-ng Image Update
Paperless-ng Image Update

Ebenso können Postgres:14, Redis:6.2 und Gotenberg/Gotenberg:7 upgedatet werden. Postgres:14 bedeutet, dass das aktuellste Image von Postgres mit einer 14 am Anfang verwendet werden soll. Das kann 14.0 sein, aber auch 14.1.2 (falls es das gibt).

Image Update
Image Update

Wenn es ein neues Image gibt, bekommt das ursprüngliche den Tag <none>.

Nun muss nur noch der Stack einmal neu gestartet werden, dazu Stack auswählen. Stop this stack drücken und dann wieder Start this stack.

Backup

Für ein Backup muss man die Ordner db-backup (Datenbank), media (archivierte PDF Dokumente) und data (Einstellungen) sichern. Das lässt sich manuell machen. Man kann aber auch Cloud Sync aus dem Paket-Zentrum nutzen.

Cloud Sync
Cloud Sync

Hier kann man sich drei Aufgaben erstellen.

Cloud Sync Aufgabe
Cloud Sync Aufgabe

Damit werden diese Ordner automatisch mit dem eingestellten Dienst synchronisiert.

Die Einrichtung ist damit fertig. Viel Spaß beim Archivieren :)

Bei Fragen / Anmerkungen / Verbesserungsvorschlägen usw. freue ich mich über Kommentare. Mich würde auch interessieren, wie ihr eure Dokumente archiviert.


Tags

#anleitung#dms#docker#homeserver#nas#paperless#portainer#server#synology
Vorheriger Blogpost
Calibre auf Synology
Nächster Blogpost
Proxmox Installation

Kategorien

Aktuelles
Excel
Finanzen
Gaming
Gatsby
Git
Google
Homeserver
Server
Werbung

Inhaltsverzeichnis

1
Voraussetzungen
2
Vorbereitung
3
Installation
4
Archivierung
5
Container Update
6
Backup

Related Posts

Strom sparen mit TLP
April 15, 2022
1 min

Links

KontaktÜber

Social Media