Paperless-NGX: Papierloses Büro mit Synology NAS und Docker

Dokumentenverwaltung Paperless-ngx mit Docker auf einem Synology NAS installieren.

Paperless-NGX: Papierloses Büro mit Synology NAS und Docker-heroimage

Paperless-ngx Dokumentenverwaltung

Paperless-NGX ist eine Open-Source-Dokumentenverwaltungssoftware bzw. ein Dokumenten-Management-System (DMS), das darauf abzielt, den Papierverbrauch in Büros und anderen Arbeitsumgebungen zu reduzieren, indem es die Verwaltung von Dokumenten elektronisch ermöglicht. Mit Paperless-ngx können Benutzer Dokumente organisieren, verwalten und von jedem Gerät aus darauf zugreifen. Die Software bietet auch verschiedene Funktionen wie OCR (Optical Character Recognition), um Dokumente digital durchsuchbar zu machen. Die Verwendung von Paperless-ngx kann dazu beitragen, den Papierverbrauch zu reduzieren und die Effizienz in der Arbeitsumgebung zu verbessern.

Warum Paperless-ngx ausprobieren?

  • Es ist kostenlos und Open-Source
  • Die Dokumente bleiben im eigenen Besitz
  • Die archivierten Dokumente liegen strukturiert auf dem NAS, sodass man nicht auf ewig an Paperless gebunden wird
  • Paperless-ngx ist einfach zu installieren und zu bedienen

Glossar: Wichtige Begriffe und Technologien

BegriffBeschreibung
ARM-CPUProzessorarchitektur, die von einigen Synology NAS-Geräten verwendet wird.
CaddyAlternativer Reverse-Proxy-Server.
Cloud SyncSynology-Dienst zur Synchronisierung von Daten mit Cloud-Speicherdiensten.
DockerContainerisierungsplattform für die Installation und Ausführung von Paperless-NGX.
GotenbergTool zur Konvertierung von Dokumenten in PDF-Dateien.
IMAPProtokoll zum Empfangen von E-Mails.
Nginx Proxy ManagerReverse-Proxy-Server, der den Zugriff auf Paperless-NGX von außerhalb des Netzwerks ermöglicht.
OCR (Optical Character Recognition)Technologie zur Texterkennung in gescannten Dokumenten.
Paperless-ngVorgängerversion von Paperless-NGX
Paperless-NGXOpen-Source-Dokumentenverwaltungssoftware
PortainerGrafische Benutzeroberfläche zur Verwaltung von Docker-Containern.
PostgreSQLDatenbankmanagementsystem für die Speicherung von Paperless-NGX-Daten.
RedisIn-Memory-Datenspeicher, der als Message Broker für Paperless-NGX verwendet wird.
SMTPProtokoll zum Senden von E-Mails.
SQLiteAlternative Datenbankoption für Paperless-NGX.
Synology NASNetwork Attached Storage-Gerät, auf dem Paperless-NGX installiert werden kann.

Installation auf Synology NAS mit Docker

Ich habe bereits eine Anleitung zur Installation auf einem Linux Server im Blog veröffentlicht. Mit der Zeit wurde es etwas unübersichtlich. Als dann die erste Version von Paperless-NGX als Nachfolger von Paperless-ng veröffentlicht wurde, habe ich beschlossen einen eigenen Blogpost für die Installation auf einem Synology NAS zu veröffentlichen. In dieser Anleitung beschreibe ich auf Deutsch, wie man Paperless ngx mithilfe von Docker auf einem Synology-NAS installiert.

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 zwingend notwendig. Es hängt auch stark 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 auch Docx-Dokumente mit Tika und Gotenberg 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. Ferner wird auch die Verwaltung der Container erleichtert. Auf die anderen Möglichkeiten (Compose über SSH oder Ausführung über Aufgabenplaner usw.) möchte ich hier nicht eingehen.

Das Dokumentenmanagement Paperless-ngx läuft natürlich auch auf einem NAS eines anderen Herstellers wie QNAP oder ASUSTOR, insbesondere dann, wenn Portainer installiert ist und das NAS eine x64 CPU hat. Nur die Vorbereitung wie die Erstellung der Freigabeordner ist dann etwas anders. Am Ende müssen aber auch hier die Container in Docker laufen.

(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 so etwas 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 zur Sicherungskopie. 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.

Systemauslastung

Nachdem ich alle nötigen Container gestartet habe, sieht die Systemauslastung im Leerlauf folgendermaßen aus (Werte aus dem Container Manager):

ServiceRAM
Gotenberg42 MB
Paperless904 MB
Postgres90 MB
Postgres-Backup20 MB
Redis20 MB
Tika234 MB

Vorbereitung

Neuer Benutzer anlegen

Aus Sicherheitsgründen empfiehlt es sich, für den Paperless-Container einen separaten Benutzer anzulegen, anstatt das Administrator-Konto zu verwenden. Dazu erstellen wir zunächst eine “docker” Gruppe.

Gruppe für Docker einrichten

Anschließend legen wir einen neuen Benutzer an. Für eine noch granularere Rechtevergabe könnte man an dieser Stelle auch den Benutzer “paperless” erstellen.

Neuen Benutzer einrichten

Diesen Benutzer fügen wir der Docker-Gruppe hinzu.

Nutzer in die Docker Gruppe hinzufügen

Um die UserID des erstellten Benutzers und die GruppenID der “docker” Gruppe herauszufinden, aktivieren wir temporär den SSH-Dienst und verbinden uns über ein Terminal mit dem NAS.

SSH-Dienst aktivieren

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

Mit folgendem Befehl erhalten wir die UserID des docker-Benutzers:

id docker

Die Ausgabe sollte etwa so aussehen:

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

In diesem Beispiel notieren wir uns die 1010 als UserID und die 65555 als GruppenID.

exit

Anschließend schalten wir den SSH-Dienst wieder aus.

SSH-Dienst ausschalten

Neue Ordner

Als nächstes erstellen wir 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 sich in unserem Fall nicht um eine Datenbank mit vielen Schreiboperationen handelt, verzichten wir auf den Prüfsummencheck.

Neues Verzeichnis

Die Docker-Gruppe benötigt Zugriffsrechte auf den Ordner.

Rechteverwaltung für Gruppen

Auch der Docker-Benutzer sollte Zugriffsrechte erhalten.

Zugriffsrecht für Benutzer

Im paperless-Ordner erstellen wir folgende Unterordner:

  • data
  • db
  • db-backup
  • export
  • media
  • redis

Paperless Verzeichnis

Zusätzlich legen wir im Home-Verzeichnis einen Ordner an, aus dem Paperless automatisch Dokumente extrahieren soll.

Paperless Inbox

Alternativ könnte man dem Netzwerk-Scanner ein eigenes Benutzerkonto auf der DiskStation zuweisen und den Inbox-Ordner im Homeverzeichnis dieses Benutzers anlegen. So benötigt der Scanner keinen Zugriff auf das Hauptkonto, kann aber dennoch in diesen Ordner scannen. Eine weitere Option wäre die Erstellung eines zusätzlichen Freigabeordners, wenn man auch manuell Dateien dort ablegen möchte.

Für den Inbox-Ordner passen wir die Berechtigungen an. Der Docker-Benutzer erhält Schreib- und Leserechte, ebenso der Netzwerk-Scanner und der eigene Benutzer.

Paperless Inbox Berechtigungen

Damit sind alle Vorbereitungen abgeschlossen.

Patrick hat mich darauf aufmerksam gemacht, dass der Inbox-Ordner sich nicht richtig verhält, solange man Synology Drive nutzt.

“Derzeit kann der Server von Synology Drive keine Dateiänderungen in einem Ordner erkennen, der an einen Docker-Container angebunden ist. Synology Drive Server, Client und ShareSync können keine Dateien mit Docker angebundenen Ordnern synchronisieren. Die Einschränkung wird hier erwähnt und hier. Derzeit gibt es keine Möglichkeit, es ordnungsgemäß zu machen. Es gibt leider auch kein Binärprogramm, das für diesen Fall ausgelöst werden könnte. Die Dateien müssten stattdessen direkt vom Hostsystem gelöscht werden, anstatt vom Container.”

Firewall

Um sicherzustellen, dass die erstellten Container miteinander kommunizieren können, empfiehlt es sich bei einer restriktiven Firewall entweder gleich den kompletten internen IP-Bereich freizugeben oder nach der Installation die von den Containern verwendeten IP-Adressen zu überprüfen. Andernfalls kann es vorkommen, dass die Container nicht miteinander kommunizieren können und der Datenbank-Container vom Paperless-Container nicht gefunden wird.

Installation

Paperless unterstützt PostgreSQL und SQLite für die Speicherung der Daten. Da mehrere Vorgänge gleichzeitig geschrieben werden können, wird jedoch 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 7.0 und PostgreSQL 16 genutzt (statt ursprünglich 6.0 und 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. Weiterhin auch Tika/Gotenberg, um nicht nur PDFs, sondern auch Office-Dokumente (wie “.docx”, “.doc”, “.odt”, “.ppt”, “.pptx”, “.odp”, “.xls”, “.xlsx” und “.ods”) verarbeiten zu können.

Seit Version 1.11.0 von Paperless werden auch bei E-Mails nicht nur die Anhänge verarbeitet, sondern auch der Text der E-Mail selbst kann mit Gotenberg archiviert werden.

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

Neuer Stack (Docker-Compose)

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

Neuer Stack

Wenn dieser Menüpunkt fehlt, sollte man erneut 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

networks:
    internal:
        external: false

services:
    broker:
        container_name: paperless-redis
        image: redis:7
        # Wenn man lieber 6.0 nutzen möchte
        # image: redis:6.0
        networks:
            - internal
        volumes:
            # Hier den richtigen Pfad eintragen
            - /volume1/paperless/redis:/data
        #  - /volume2/paperless/redis:/data
        restart: unless-stopped
        user: "1010:65555" # BenutzerID und GruppenID des Docker-Benutzers
        sysctls:
            - net.core.somaxconn=511
        cap_add:
            - SYS_RESOURCE
        deploy:
            resources:
                limits:
                    memory: 256M
        healthcheck:
            test: ["CMD", "redis-cli", "ping"]
            interval: 30s
            timeout: 5s
            retries: 3

    db:
        container_name: paperless-db
        image: postgres:16
        # 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
        deploy:
            resources:
                limits:
                    memory: 512M
        healthcheck:
            test: ["CMD", "pg_isready", "-U", "paperless"]
            interval: 30s
            timeout: 5s
            retries: 3
        logging:
            driver: "json-file"
            options:
                max-size: "10m"
                max-file: "5"

    webserver:
        container_name: paperless
        image: ghcr.io/paperless-ngx/paperless-ngx:2.9
        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/ #bzw. 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"
        deploy:
            resources:
                limits:
                    memory: 2048M
        logging:
            driver: "json-file"
            options:
                max-size: "10m"
                max-file: "5"

    db-backup:
        container_name: paperless-db-backup
        # Das Image ggf. an das obere anpassen
        image: postgres:16
        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
        deploy:
            resources:
                limits:
                    memory: 256M

    # Diesen Part weglassen, wenn man keine Umwandlung von Office-Dokumenten, Mails haben möchte.
    gotenberg:
        container_name: paperless-gotenberg
        image: gotenberg/gotenberg:8
        restart: unless-stopped
        environment:
            CHROMIUM_DISABLE_ROUTES: 1
        command:
            - "gotenberg"
            - "--chromium-disable-javascript=true"
            - "--chromium-allow-list=file:///tmp/.*"
        networks:
            - internal
        deploy:
            resources:
                limits:
                    memory: 512M
        healthcheck:
            test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
            interval: 30s
            timeout: 5s
            retries: 3

    tika:
        container_name: paperless-tika
        image: apache/tika:2.9.2.1
        restart: unless-stopped
        networks:
            - internal
        deploy:
            resources:
                limits:
                    memory: 512M

In den Kommentaren habe ich die Stellen angegeben, die eventuell angepasst werden müssen. Weiter unten befindet sich auch ein experminteller Generator, den ich hinzugefügt habe. Die Pfade zu den Verzeichnissen sollten angepasst werden. Insbesondere der Pfad zur Paperless-Inbox wird anders lauten.

Die Images können angepasst werden, ich rate davon ab latest zu nutzen, da es zu Problemen führen kann, wenn ein neues Image veröffentlicht wird, das nicht kompatibel ist. Bei Paperless kann man hier gucken, welches Image momentan das neuste ist. Gibt man z. B. 2.7 ein, wird das Image 2.7.0 oder 2.7.1 usw. genutzt.

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 auch 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 sollten 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 würde mein Steuerbescheid 2020 beispielsweise in dem Verzeichnis “/media/documents/originals/2021/Finanzamt” abgelegt werden. Wenn ich aber zum Beispiel {created}_{title} stattdessen nutze, wird die nicht in einem Unterordner abgelegt, sondern der Name der Datei erhält das Präfix mit dem Erstellungsdatum (z. B. 20211217_namederdatei.pdf). Hier ist es wichtig, dass man die Struktur nicht manuell anfasst! Möchte man diese im Nachhinein ändern, muss der Befehl document_renamer im Paperless-Container ausgeführt werden.

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 nicht heruntergeladen wurden. Nach ein bisschen Warten sollten alle Container gestartet sein.

Die Container mit den Healthchecks sollten als healthy angezeigt werden:

Container Healthcheck

Generator

Docker Compose Generator

1
General Settings
2
Service Versions
3
Advanced Options
4
Filename Format
5
Review & Generate

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

Wenn sich der Nginx Proxy Manager auf dem NAS befindet und der Webserver im gleichen Docker Netzwerk ist, kann man hier den Containernamen 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

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.

Caddy Proxy

Alternativ können auch andere Proxy Server genutzt werden. Insbesondere dann, wenn man ein anderes Gerät dafür verwendet, gibt es viele Optionen. Mit Caddy kann das so aussehen:

{
    acme_ca https://acme-v02.api.letsencrypt.org/directory
    email   mail@domain.com
}

paperless.domain.de {
    @blocked not remote_ip private_ranges
    respond @blocked 403
    reverse_proxy 192.168.1.123:8010
}

Neuer Benutzer

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

Auswahl des Containers

Anschließend auf Console.

Console

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

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 von Dokumenten

Es gibt mehrere Möglichkeiten, Dokumente in Paperless zu archivieren:

  1. Drag & Drop: Zur Archivierung kann man die Dateien einfach in die Web-Ansicht von Paperless ziehen.
  2. Paperless Inbox: Man kann die Dokumente aber auch in den angelegten Paperless-Inbox Ordner legen.
  3. E-Mail: Ebenso kann man eine Mail schicken, wenn man die entsprechenden Einstellungen im Admin-Menü dafür konfiguriert hat.

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

Bearbeiten von Meta-Daten

Nach dem Hochladen eines Dokuments in Paperless ist es wichtig, die Meta-Daten zu bearbeiten, um es später leicht wiederzufinden:

  • 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 oder an wem sie geht. Im Zweifel würde ich es eher breiter definieren. Das bedeutet, wenn ich eine Rechnung von Netcup (Affiliate-Link) bekomme, ist Netcup der Korrespondent. Meine Versicherungspolice ist in meinem Fall bei Getsafe (Affiliate-Link) Manchmal habe ich darüber nachgedacht, ein paar Korrespondenten zu gruppieren. So wäre es beispielsweise für mich denkbar Finanzamt, Gewerbeamt usw. unter “Behörde” zusammenzufassen.

  • Dokumenttyp: Hier würde ich die Art des Dokuments eintragen. So etwas wie Rechnung, Bericht, Anleitung, Vertrag, Sonstiges usw. Ich packe die Dokumente in Sonstiges, bis ich mir denke, dass ein Typ häufiger vorkommt und es sinnvoll wäre zu trennen. Die Versicherungspolice wäre dann unter Vertrag zu finden. Schriftverkehr mit der Versicherung würde ich unter Sonstiges oder Mitteilung packen, solange es nicht den eigentlichen Vertrag ändert.

  • 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 (also sowohl Arbeitsvertrag als auch Lohnabrechnungen oder ein einfacher Brief). Alles, was mit meinem Gewerbe zu tun hat, bekommt den Tag Gewerbe. Manchmal habe ich auch Jahreszahlen als Tag, wenn ich etwa ein Dokument im Jahr 2022 erhalte, das sich aber auf 2021 bezieht, bekommt es den Tag 2021.

Damit bin ich bisher ganz zufrieden. 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 ein PDF-Web-Betrachter aktivieren, der zumindest unter Chrome zuverlässig funktioniert.

Aktualisierung der Docker Container

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 können aktualisiert werden.

Dazu einfach im Image Menü von Portainer das Image “ghcr.io/paperless-ngx/paperless-ngx:latest” oder gleich die richtige Minor-Version “ghcr.io/paperless-ngx/paperless-ngx:2.7” neu pullen.

Paperless-ng Image Update

Ebenso können Postgres:16, Redis:7 und Gotenberg/Gotenberg:8 aktualisiert werden. Postgres:16 bedeutet, dass das aktuellste Image von Postgres mit einer 14 am Anfang verwendet werden soll. Das kann 16.0 sein, aber auch 16.1.2 (falls es das gibt). Bei Postgres nicht die Major-Version ändern (also Postgres:17), da die Datenbank ohne Migration nicht mehr geladen wird.

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”.

Update: Noch schneller geht es inzwischen, wenn man in Portainer in den Stack Editor von Paperless navigiert und auf den Knopf “Update the stack” drückt. Anschließend kann man die Option “Re-pull image and redeploy” auswählen.

Backup

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

Cloud Sync

Hier kann man sich drei Aufgaben erstellen.

Cloud Sync Aufgabe

Damit werden diese Ordner automatisch mit dem eingestellten Dienst synchronisiert.

Document Exporter

Paperless-ngx besitzt auch einen Dokument-Exporter, mit dem alle gespeicherten Dokumente exportierten und in einem anderen Paperless wieder importiert werden können.

Der Einsatz wird ungefähr so bewerkstelligt:

Schritt 1: Im Paperless Verzeichnis auf der Synology einen neuen Ordner erstellen, zum Beispiel mit dem Namen export.

Schritt 2: In Portainer den Paperless Container aufrufen und einen benutzerdefinierten Befehl ausführen: document_exporter ../export.

Schritt 3: Nach ein paar Minuten im Ordner export nachsehen, ob sich dort nun die Dateien befinden.

Schritt 4: Paperless woanders aufsetzen.

Schritt 5: Den kompletten Ordner export zum neuen Paperless Verzeichnis kopieren.

Schritt 6: In Portainer den Paperless Container aufrufen und einen benutzerdefinierten Befehl eingeben: document_importer ../export

Schritt 7: Überprüfen, ob es funktioniert hat.

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.

FAQs

Wofür das NGX in Paperless NGX?

NGX steht für Next Gen X. Paperless-ngx ist der Nachfolger von Paperless-ng, welches wiederum ein Fork des originalen Projekts ist.

Kann ich Paperless-ngx auf meinem Synology NAS installieren?

Ja, das ist mit Hilfe von Docker möglich.

Was ist Docker Compose und welches Verhältnis hat es zu Paperless?

Docker Compose ist ein Tool, um mehrere Docker Container gleichzeitig zu starten. Es hilft bei der Installation und Konfiguration von Paperless-ngx.

Wie kann ich DMS Paperless-ngx auf meinem Synology NAS installieren und konfigurieren?

Zuerst musst du Portainer auf deinem NAS installieren. Dann musst du das DMS Paperless-ngx Tool per Portainer auf deinem NAS installieren und konfigurieren. Achte darauf, dass du dabei die Ordnerstrukturen richtig einstellst!

Wie kann ich Dokumente im PDF- oder docx-Format in DMS Paperless-ngx hochladen?

Du musst nur deine PDF- oder docx-Datei per Drag&Drop in das Tool ziehen. Das Tool wird dann deine Datei scannen und die Metadaten extrahieren. Für Docx werden Tika und Gotenberg benötigt.

Wie lade ich Dokumente von Google Drive in Paperless-ngx hoch?

Du kannst Dokumente von Google Drive in Paperless-ngx hochladen, indem du sie in den Paperless-Inbox Ordner auf deinem NAS kopierst. Paperless-ngx wird sie dann automatisch archivieren. Dazu kann auch Cloud Sync genutzt werden.

Wie kann ich Redis auf meinem Synology NAS installieren?

Die Installation von Redis erfolgt über den Stack in Portainer.

Wie kann ich mein DMS Paperless-ngx konfigurieren?

Die Konfiguration vom DMS Paperless-ngx erfolgt hauptsächlich über das Tool selbst, bestimmte Einstellungen, wie z.B. der Reverse Proxy, müssen allerdings auf deinem NAS oder anderen Geräteen eingestellt werden.

Muss ich meine Dokumente mit OCR scannen, bevor ich sie in DMS Paperless-ngx hochlade?

Nein, das Tool scannt deine Dokumente automatisch, nachdem du sie hochgeladen hast. Denn wer hat schon Lust, all seine Dokumente vorher selbst zu scannen?

Welche Dokumente kann ich in DMS Paperless-ngx hochladen?

Du kannst PDF, PNG, JPEG, TIFF, and GIF Dokumente in Paperless hochladen. Zusätzlich kannst du auch emails und Office Dokumente wie docx, doc, odt, ppt, pptx, odp, xls, xlsx und ods hochladen, wenn du Tika und Gotenberg installiert hast.

Wo finde ich meine hochgeladenen Dokumente in DMS Paperless-ngx?

Nachdem du deine Dokumente hochgeladen hast, sind sie in DMS Paperless-ngx unter 'Dokumente' zu finden. So verlierst du nie den Überblick! Auf dem NAS selbst befinden sich die Dokumente im Ordner 'media'.

Kann ich DMS Paperless-ngx auf meinem Raspberry Pi installieren?

Ja, das ist möglich. Du musst dafür Docker und Docker Compose installieren. Außerdem musst du die docker-compose.yml Datei anpassen, damit sie auf deinem Raspberry Pi läuft. Eine allgemeinere Anleitung findest du unter https://deployn.de/blog/setup-paperless/.

Was kann ich mit den Metadaten meiner Dokumente in DMS Paperless-ngx machen?

Du kannst die Metadaten deiner Dokumente in DMS Paperless-ngx bearbeiten. So kannst du deine Dokumente besser organisieren und findest sie schneller wieder.

E-Mails werden nicht in Paperless nicht richtig archiviert. Was kann ich tun?

Achte darauf, dass die SMTP Einstellungen in Paperless richtig gesetzt sind. Der IMAP Server ist nicht die Mail-Adresse. Außerdem könnte der Pfad von Gotenberg falsch sein.

Ich habe ein anderes Problem mit Paperless. Was kann ich tun?

Du kannst gerne die Kommentarfunktion benutzen. Falls es jedoch ein Problem gibt wäre es gut zu wissen, welches Gerät du benutzt, in welchen Punkten von der Anleitung abgewichen wurde und was die Logs sagen.


Diese Website verwendet Cookies. Diese sind notwendig, um die Funktionalität der Website zu gewährleisten. Weitere Informationen finden Sie in der Datenschutzerklärung