Viele Wege führen nach Rom, zumindest aber benötigst du eine Komponente: ein Gerät, auf dem Services betrieben werden können. Hier setzt Paperless-ngx nur wenige Grenzen. Ich habe mich für die virtualisierte Variante mit Docker1 entschieden, die Docker Bridge läuft auf meinem Synology NAS2. Dieser Leitfaden beschränkt sich auf die Verwendung von Docker.
Dokumentation#
Wichtigste Informationsquelle für die folgenden Inhalte ist die Webseite von Paperless-ngx.
Setup#
Ich empfehle stets die Verwendung von docker compose3, da es die Handhabung von Containern enorm erleichtert. Praktischerweise liefern die Macher von Paperless-ngx bereits diverse Beispiel-Setups mit, welche hier zur Verfügung stehen.
Meine Installation besteht aus den folgenden Komponenten:
# ...
services:
broker:
image: redis:7
# ...
webserver:
image: paperlessngx/paperless-ngx:latest
# ...
gotenberg:
image: gotenberg/gotenberg:7.8
# ...
tika:
image: ghcr.io/paperless-ngx/tika:latest
# ...
# ...
Bewusst verzichte ich auf den Einsatz einer relationalen Datenbank, wie z.B. PostgreSQL. Ich möchte mein papierloses Büro einfach nicht von einer Datenbank abhängig machen, denn diese benötigt auch Wartung, Backups, etc. Ein weiterer Vorteil ist, dass sich eine sqlite-Datei sehr viel einfacher sichern lässt 😎. Solltest du eine MySQL-Datenbank verwenden wollen, gibt es noch weitere Dinge zu beachten.
Gotenberg und Tika sind optionale Bestandteile der Paperless-ngx-Installation. Sie werden benötigt, um Office- und Email-Dateien verarbeiten zu können. Ich nutze diese Services zwar extrem sporadisch, Haben ist aber besser als Brauchen. Hier findest du weitergehende Erläuterungen dazu.
Konfiguration#
Meine docker compose-Konfiguration ist natürlich auf meine Bedürfnisse zugeschnitten. Hier ein kleiner Einblick in den Paperless-ngx-Container. Alle Ordner sind frei zugänglich auf dem Dateisystem meines Servers, Docker Volumes nutze ich nicht:
# ...
volumes:
- ./data:/usr/src/paperless/data
- ./media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
- ./hooks:/usr/src/paperless/scripts
- ./trash:/usr/src/paperless/trash
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
PAPERLESS_TASK_WORKERS: 2
PAPERLESS_THREADS_PER_WORKER: 2
PAPERLESS_PRE_CONSUME_SCRIPT: /usr/src/paperless/scripts/PRE_CONSUME.sh
PAPERLESS_POST_CONSUME_SCRIPT: /usr/src/paperless/scripts/POST_CONSUME.sh
PAPERLESS_TRASH_DIR: /usr/src/paperless/trash
PAPERLESS_URL: # vertraulich
PAPERLESS_TRUSTED_PROXIES: # vertraulich
PAPERLESS_USE_X_FORWARD_HOST: true
PAPERLESS_USE_X_FORWARD_PORT: true
PAPERLESS_PROXY_SSL_HEADER: ["HTTP_X_FORWARDED_PROTO", "https"]
PAPERLESS_SECRET_KEY: # vertraulich
PAPERLESS_ENABLE_UPDATE_CHECK: true
PAPERLESS_OCR_LANGUAGES: deu
PAPERLESS_OCR_LANGUAGE: deu
PAPERLESS_FILENAME_FORMAT: {owner_username}/{created}_{correspondent}_{document_type}_{title}
# QR Code Scanner
PAPERLESS_CONSUMER_ENABLE_BARCODES: true
PAPERLESS_CONSUMER_ENABLE_ASN_BARCODE: true
PAPERLESS_CONSUMER_BARCODE_SCANNER: ZXING
# ...
Alle Optionen sind detailliert hier dokumentiert, jedes Detail kann und sollte nachgelesen werden. Für Vorschläge zu meiner Konfiguration bin ich jederzeit zu haben, nimm einfach Kontakt mit mir auf!
Erläuterungen:
- Wie eingangs erwähnt, behalte ich mir den Zugriff auf alle Daten über das Dateisystem vor. Das erleichtert Backups ungemein.
- Ich verwende Custom Scripts, um Aktionen vor und nach dem Konsumieren von Dokumenten auszuführen.
- Der Papierkorb ist aktiviert. Sollte nicht passieren, aber falls ich mal etwas lösche, ist es nicht sofort verloren.
- Paperless-ngx läuft in meinem HomeLab innerhalb eines Traefik4-Netzwerks, ist also hinter einem Proxy.
- Beim
PAPERLESS_FILENAME_FORMAT
wird für jeden Eigentümer ein eigener Ordner angelegt. Paperless-ngx ist mandantenfähig, ein bisschen 😉. Für den Privathaushalt mit mehreren Personen reicht es vollkommen. - Der Barcode-Scanner ist aktiviert. Für eine bessere Erkennung von kleinen QR Codes auf Dokumenten verwende ich
ZXING
. Ein anderer Paperless-User, Marvin Gaube, hat einen interessanten Artikel darüber verfasst.
Fazit#
Es gibt viele Details, über die man seine Paperless-ngx-Installation für den persönlichen Gebrauch optimieren kann. Das hängt immer sehr vom eigenen Use-Case, aber auch der eingesetzten Technik ab.
Auf die oben angesprochenen Custom Scripts gehe ich im weiteren Verlauf detaillierter ein. Das ist ein extrem mächtiges Tool, womit sich allerhand Schandtaten realisieren lassen 😁. Stichwort: eigene Regelwerke, Validierung und Nachhalten eben dieser.
Feature-Foto von Luca Bravo auf Unsplash
Containermanager, docker.com ↩︎
Network Attached Storage, Synology Webseite ↩︎
Mehr Infos auf docker-compose ↩︎
Traefik ist ein Reverse Proxy, traefik.io ↩︎