Paperless-ngx im Homelab: Rechnungen und Belege automatisch scannen, OCR-en und durchsuchbar machen
Ein Schuhkarton voller Rechnungen, drei Ordner mit „Steuer" beschriftet und ein Handyfoto eines Belegs, den du vor zwei Jahren gebraucht hättest – so sieht typische Belegverwaltung aus, bevor sie digital wird. Paperless-ngx löst genau dieses Problem: Du wirfst Scans und PDFs in einen Posteingang, das System extrahiert per OCR den Text, vergibt Metadaten und indexiert alles. Danach findest du jeden Beleg über die Volltextsuche in Sekunden statt über Ordnerpfade.
Warum Papierchaos teuer wird: Datenhoheit und Volltextsuche
Die Motivation ist nicht Ordnungsliebe, sondern Zugriff. Steuerlich relevante Unterlagen unterliegen Aufbewahrungsfristen (§ 147 AO, § 257 HGB – je nach Art 2 bis 10 Jahre), Versicherungen und Gewährleistungen verlangen Rechnungen oft Jahre nach dem Kauf. Wer nur in Papier denkt, sortiert manuell und findet trotzdem nichts wieder.
Drei konkrete Gründe sprechen für ein selbst gehostetes Archiv:
1. Datenhoheit: Rechnungen enthalten Adressen, Bankdaten und Kundennamen. In der Cloud bist du auf die Verfügbarkeit, die Preispolitik und die Sicherheit eines fremden Anbieters angewiesen. Auf eigener Hardware bleiben sie unter deiner Kontrolle.
2. Volltextsuche statt Ordnerchaos: Du suchst „Stadtwerke August 2026" oder eine Rechnungsnummer und bekommst den Treffer, weil der komplette Text indexiert ist – auch bei gescannten Seiten.
3. Kostenlos und unabhängig: Paperless-ngx ist Open Source unter der GPL-3.0-Lizenz. Keine Lizenzgebühr, kein Abo, kein Anbieterwechsel-Risiko.
Was Paperless-ngx kann: Dokumentenarten, Tags, Korrespondenten, Custom Fields
Die Kernlogik des Systems baut auf vier Metadaten-Bausteinen:
- Dokumentenarten (Document Types): strukturieren nach Form, etwa Rechnung, Vertrag, Kontoauszug, Bescheid.
- Korrespondenten (Correspondents): der Absender oder Empfänger, etwa Stadtwerke, Finanzamt, Versicherung.
- Tags: freie, themenübergreifende Schlagworte wie Steuer 2026 oder Wohnung. Ein Dokument kann beliebig viele tragen.
- Custom Fields: eigene Felder mit Datentypen (Text, Zahl, Datum, Auswahl, Ja/Nein), etwa Garantie bis oder Rechnungsbetrag. Paperless-ngx führt über ein Custom Field vom Typ „Währung" sogar Summen pro Dokumentenart.
Hinzu kommen Speicherorte (Storage Paths), die den Ablagepfad im Medienordner über Platzhalter wie {created_year}/{correspondent}/{title} definieren. So entsteht auf der Platte eine lesbare Ordnerstruktur, während du in der Oberfläche weiter über Metadaten suchst. Automatische Regeln können Tags und Korrespondenten beim Import anhand von Suchbegriffen vergeben.
Docker-Compose-Setup mit PostgreSQL und Redis
Für den produktiven Betrieb lohnt sich PostgreSQL statt der eingebauten SQLite-Datenbank – es verkraftet parallele Zugriffe besser. Redis dient als Broker für die Verarbeitungswarteschlange. Die Verzeichnisse liegen als Bind-Mounts unter /srv/paperless:
services:
broker:
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- /srv/paperless/redis:/data
db:
image: docker.io/library/postgres:16
restart: unless-stopped
volumes:
- /srv/paperless/pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: bitte-aendern
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
- broker
ports:
- "8000:8000"
volumes:
- /srv/paperless/data:/usr/src/paperless/data
- /srv/paperless/media:/usr/src/paperless/media
- /srv/paperless/consume:/usr/src/paperless/consume
- /srv/paperless/export:/usr/src/paperless/export
environment:
PAPERLESS_DBHOST: db
PAPERLESS_DBNAME: paperless
PAPERLESS_DBUSER: paperless
PAPERLESS_DBPASS: bitte-aendern
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_OCR_LANGUAGE: deu
PAPERLESS_TIME_ZONE: Europe/Berlin
PAPERLESS_SECRET_KEY: bitte-aendern
PAPERLESS_FILENAME_FORMAT: "{created_year}/{correspondent}/{title}"
PAPERLESS_ADMIN_USER: admin
Start mit docker compose up -d, danach erreichst du die Oberfläche unter http://<server-ip>:8000. Wichtig: PAPERLESS_SECRET_KEY und beide Passwörter durch lange Zufallswerte ersetzen, bevor der Dienst erreichbar ist. Getrennte Verzeichnisse für pgdata, media und data erleichtern später das selektive Backup. Vertiefende Hinweise zur Container-Praxis sammelt der Artikel zu Docker-Compose Best Practices.
Brother-Scanner anbinden: Scan to Network Folder
Die eleganteste Anbindung nutzt den Netzzugriff des Multifunktionsdruckers direkt auf den consume-Ordner. Am Beispiel eines Brother MFC-L3750CDW (gilt analog für MFC-L3770CDW und ähnliche Modelle mit Scan-to-Network-Directory):
1. Auf dem Paperless-Host eine SMB-Freigabe consume einrichten, die auf /srv/paperless/consume zeigt – mit eigenem Benutzer und Schreibrecht.
2. Am Brother-Gerät im Webinterface unter Netzwerk → Scannen zu Netzwerk ein Profil anlegen: Protokoll SMB, Ziel \\192.168.1.10\consume, Benutzer und Passwort der Freigabe.
3. Scanprofil auf Schwarzweiß oder Graustufen, 300 dpi, PDF stellen. Diese Werte liefern die zuverlässigste OCR-Grundlage.
Nach dem Scan erkennt Paperless-ngx die neue Datei innerhalb weniger Sekunden, verarbeitet sie und ordnet sie über die Regeln ein. Ein FTP-Profil auf denselben Ordner funktioniert als Alternative, falls SMB an deinem Gerät nicht verfügbar ist.
OCR mit Tesseract und deutscher Sprachdatei
Die Texterkennung übernimmt Tesseract, das im offiziellen Paperless-Container bereits enthalten ist. Über PAPERLESS_OCR_LANGUAGE: deu aktivierst du die deutsche Spracherkennung; für gemischte Dokumente kombinierst du Sprachen als deu+eng. Umlaute und ß erkennt die deutsche Sprachdatei tesseract-ocr-deu korrekt – ohne sie würde aus „Straße" schnell „StraBe".
Bei schlechten Scans helfen diese Optionen: PAPERLESS_OCR_DESKEW (horizontales Ausrichten), PAPERLESS_OCR_ROTATE_PAGES (automatisches Drehen) und PAPERLESS_OCR_DESKEW zusammen mit 300 dpi als Mindestauflösung. Für durchsuchbare Ausgaben setzt PAPERLESS_OCR_MODE: redo-ocr oder das Standardverfahren die Textebene direkt ins PDF.
E-Rechnungen: ZUGFeRD und XRechnung aus dem Posteingang
Hybride ZUGFeRD-PDFs (Factur-X) enthalten sichtbares PDF plus eingebettetes XML. Paperless-ngx liest dieses XML beim Import direkt aus und übernimmt Rechnungsnummer, Datum, Betrag und Absender als Metadaten – du musst die Datei nur in consume legen. Für reine XRechnung-XML-Dateien gilt ehrlich: Sie werden als Dokument importiert und die Kerndaten ausgewertet; die vollständige Buchungslogik bleibt dem Rechnungswesen überlassen. Lege dafür einen Unterordner wie /srv/paperless/consume/erechnung an, um E-Rechnungen getrennt zu beobachten. Die XML-Standards selbst sind in der offiziellen Spezifikation von Factur-X/ZUGFeRD beschrieben (siehe Quellen).
Backup-Konzept: PostgreSQL plus Medienordner
Ein Paperless-Backup ohne die Datenbank ist blind, eines ohne die Medien leer. Sichere daher beide gemeinsam. Für PostgreSQL erzeugst du einen konsistenten Dump:
docker compose exec db pg_dump -U paperless paperless > /backup/paperless-$(date +%F).sql
Den Medien- und Datenordner packst du als Archiv:
tar czf /backup/paperless-media-$(date +%F).tar.gz -C /srv/paperless media
Ergänzend erzeugt docker compose exec webserver document_exporter ../export eine menschenlesbare Kopie aller Dokumente samt Metadaten. Nach der 3-2-1-Regel hältst du drei Kopien auf zwei Medien, eine davon außerhalb des Standorts – etwa verschlüsselt offsite. Details zur Umsetzung stehen im Artikel Backup-Strategie 3-2-1.
Typische Fehlerquellen und Troubleshooting
Die meisten Probleme entstehen nicht im Betrieb, sondern beim Import. Häufig sind:
- Zeichensatz-Fehler: Wird Text als „Straße" angezeigt, wurde eine Datei als ISO-8859-1 statt UTF-8 interpretiert. Prüfe die Quelldatei und den Dateinamen auf UTF-8.
- Schlechte Scans: Unter 200 dpi, schief eingezogen oder kontrastarm – die OCR produziert Kauderwelsch. 300 dpi als Standard löst das.
- Duplikate: Gleiches Dokument doppelt importiert. Paperless-ngx vergleicht Checksummen und kann Duplikate erkennen; gegen Mehrfachimporte hilft der Konsumenten-Schalter
PAPERLESS_CONSUMER_RECURSIVEnur bewusst eingesetzt.
| Symptom | Wahrscheinliche Ursache | Maßnahme |
|---|---|---|
| Umlaute falsch (ß, ü) | Datei in ISO-8859-1, nicht UTF-8 | Quelldatei neu in UTF-8 exportieren |
| OCR findet nichts | Scan unter 200 dpi oder kontrastarm | Neu scannen mit 300 dpi, Graustufen |
| Dienst startet nicht | DB-Passwort falsch oder Volume-Rechte | docker compose logs webserver prüfen |
| Falsches Datum | Zeitzone nicht gesetzt | PAPERLESS_TIME_ZONE: Europe/Berlin |
| Dokument doppelt | Erneut in consume gelegt | Duplikatprüfung aktivieren, Datei entfernen |
| Import hängt | Falsche DB-Engine nach Wechsel | PAPERLESS_DBENGINE=postgresql setzen |
Einordnung: Was Paperless-ngx nicht kann
Paperless-ngx ist ein Dokumentenarchiv, keine Finanzbuchhaltung. Es erzeugt keine Buchhaltungssätze, ordnet Belege nicht automatisch Bankbuchungen zu, führt keine Umsatzsteuer-Voranmeldung und übernimmt keine Abschreibung. Die erkannten Rechnungsdaten lassen sich per API an eine Buchhaltungs- oder ERP-Software weiterreichen – die eigentliche Buchungslogik bleibt dort. Ebenso ist es kein Workflow-Tool für Freigabeprozesse und keine revisionssichere Ablage nach GoBD ohne zusätzliche Konfiguration. Wer das erwartet, wird enttäuscht; wer ein durchsuchbares, selbst gehostetes Archiv sucht, bekommt genau das.
FAQ
Ist Paperless-ngx kostenlos?
Ja. Paperless-ngx steht unter der GPL-3.0-Lizenz und kann ohne Lizenzkosten selbst gehostet werden. Nur Hardware und Strom fallen an.
Welche Hardware brauche ich im Homelab?
Für einen Haushalt genügen 2 vCPU und 4 GB RAM; die OCR-Verarbeitung ist der Hauptlastfaktor. Ein Raspberry Pi 4 ab 4 GB oder ein Mini-PC mit x86-Prozessor reichen aus. Bei mehreren hundert Scans pro Monat sind 8 GB RAM komfortabler.
Kann ich PostgreSQL auch später noch umstellen?
Ja, aber nicht trivial: Die vorhandene Datenbank muss per pg_dump/pg_restore oder Admin-Befehl migriert werden. Plane den Wechsel deshalb von Anfang an ein – oder starte gleich mit PostgreSQL.
Wie erreiche ich Paperless von unterwegs?
Nicht direkt ins Internet stellen. Nutze ein VPN wie WireGuard oder einen abgesicherten Reverse-Proxy mit HTTPS und Authentifizierung. Der Zugriff über einen Reverse-Proxy mit HTTPS kapselt den Dienst hinter TLS.
Erkennt Paperless-ngx handschriftliche Belege?
Tesseract ist auf gedruckten Text optimiert. Handschrift wird nur unzuverlässig erkannt; für verlässliche Ergebnisse eignen sich maschinell erzeugte Dokumente am besten.
Quellen
- Paperless-ngx – Offizielle Dokumentation: https://docs.paperless-ngx.com/
- Paperless-ngx – Quellcode (GitHub): https://github.com/paperless-ngx/paperless-ngx
- Tesseract OCR – Dokumentation: https://tesseract-ocr.github.io/
- Factur-X / ZUGFeRD – Offizielle Spezifikation: https://fnfe-mpe.org/factur-x/
- Mustangproject (ZUGFeRD/XRechnung-Toolkit): https://www.mustangproject.org/
- Docker Compose – Referenz: https://docs.docker.com/compose/
- PostgreSQL 16 – Dokumentation: https://www.postgresql.org/docs/16/
Siehe auch: Paperless-ngx einrichten, Paperless-ngx Backup, Backup-Strategie 3-2-1, Docker-Compose Best Practices.
Hinweis: Dieser Artikel ist redaktioneller Inhalt und enthält keine Affiliate- oder Partner-Links. Alle Angaben entsprechen dem Stand 2026 und können sich ändern.