Schritt-für-Schritt-Anleitung für Paperless-ngx auf Ubuntu mit Docker Compose, PostgreSQL, Redis, Reverse Proxy und sauberem Dokumenten-Workflow.
Anleitung personalisieren
Trage Domain, Server-IP und Dokumentenpfade ein, damit die Beispiele direkt zu deinem Setup passen.
Paperless-ngx ist eine leistungsstarke Open-Source-Lösung für digitales Dokumentenmanagement. Damit kannst du Rechnungen, Verträge, Briefe und andere Unterlagen automatisch erfassen, per OCR durchsuchbar machen und sauber archivieren.
In dieser Anleitung richten wir Paperless-ngx auf einem Ubuntu Server mit Docker Compose ein, inklusive PostgreSQL, Redis, sinnvollen Verzeichnisstrukturen und einer sauberen Veröffentlichung hinter einem Reverse Proxy.
1. Voraussetzungen
- Ubuntu Server 22.04 oder neuer
- Root- oder Sudo-Zugriff
- Docker und Docker Compose Plugin
- Genügend Speicherplatz für Dokumente, Vorschaudateien und Datenbank
- Optional eine Domain wie
docs.example.comfür HTTPS-Zugriff
Für neue Installationen empfiehlt das Projekt bei Docker Compose ausdrücklich PostgreSQL als Datenbank. Das übernehmen wir auch hier.
2. Arbeitsverzeichnis anlegen
Lege zunächst ein eigenes Verzeichnis für Paperless-ngx an:
mkdir -p ~/paperless-ngx cd ~/paperless-ngx
Danach erstellen wir direkt die wichtigsten Unterordner für Dokumente, Import, Export und Anwendungsdaten:
sudo mkdir -p /srv/paperless/{consume,media,export,data}
sudo chown -R $USER:$USER /srv/paperless
Die Ordner haben dabei folgende Aufgaben:
consume: Eingang für neue Dokumentemedia: verwaltete Dokumente und Dateienexport: Exporte aus Paperless-ngxdata: interne Anwendungsdaten
3. Offizielle Compose-Datei vorbereiten
Paperless-ngx stellt offizielle Docker-Compose-Templates bereit. Für eine neue Installation mit PostgreSQL erstellen wir eine saubere lokale docker-compose.yml auf Basis des empfohlenen Setups:
services:
broker:
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: docker.io/library/postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless
volumes:
- pgdata:/var/lib/postgresql/data
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
- broker
ports:
- "8000:8000"
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
PAPERLESS_DBNAME: paperless
PAPERLESS_DBUSER: paperless
PAPERLESS_DBPASS: paperless
PAPERLESS_URL: https://docs.example.com
USERMAP_UID: 1000
USERMAP_GID: 1000
volumes:
- /srv/paperless/data:/usr/src/paperless/data
- /srv/paperless/media:/usr/src/paperless/media
- /srv/paperless/export:/usr/src/paperless/export
- /srv/paperless/consume:/usr/src/paperless/consume
volumes:
pgdata:
redisdata:
Speichere die Datei als docker-compose.yml.
Hinweis: Wenn dein Benutzer nicht die UID/GID 1000 hat, prüfe sie mit folgenden Befehlen:
id -u id -g
Setze die Werte dann entsprechend in der Compose-Datei, damit Container und Host korrekt auf das Consumption-Verzeichnis schreiben können.
4. Sicherheits- und Basiswerte anpassen
Vor dem ersten Start solltest du mindestens folgende Werte anpassen:
POSTGRES_PASSWORDauf ein eigenes starkes PasswortPAPERLESS_DBPASSidentisch zum PostgreSQL-Passwort setzenPAPERLESS_URLauf deine Ziel-Domain anpassen, z. B.https://docs.example.com
Wenn du Paperless-ngx zunächst nur lokal testen willst, kannst du den Dienst auch ohne Domain starten und den Reverse Proxy später ergänzen. Für den produktiven Betrieb ist die feste URL aber sinnvoll.
5. Container starten
Starte jetzt den Stack im Hintergrund:
docker compose pull docker compose up -d
Prüfe danach den Status:
docker compose ps
Falls etwas nicht hochkommt, helfen die Logs:
docker compose logs -f
6. Erster Zugriff und Superuser
Nach dem Start erreichst du Paperless-ngx direkt über Port 8000:
http://10.0.0.5:8000
Beim ersten Zugriff wirst du aufgefordert, einen Superuser anzulegen. Verwende dafür ein starkes Passwort und idealerweise später einen separaten Alltagsbenutzer für die tägliche Nutzung.
Das Projekt weist selbst darauf hin, dass Superuser vollständigen Zugriff auf alle Dokumente und Objekte haben. Für den Alltag ist ein normaler Benutzer oft sinnvoller.
7. Reverse Proxy mit eigener Domain
Für den produktiven Betrieb solltest du Paperless-ngx über eine eigene Domain mit HTTPS veröffentlichen. Mit Caddy könnte das so aussehen:
docs.example.com {
reverse_proxy localhost:8000
}
Danach erreichst du dein Dokumentenarchiv sauber unter:
https://docs.example.com
Achte darauf, dass PAPERLESS_URL in deiner Compose-Datei zu dieser Domain passt, sonst können Links und Weiterleitungen später unsauber werden.
8. Dokumente automatisch konsumieren
Einer der größten Vorteile von Paperless-ngx ist das automatische Verarbeiten neuer Dateien. Alles, was du in das Consumption-Verzeichnis legst, wird vom System erkannt und importiert:
cp meine-rechnung.pdf /srv/paperless/consume/
Danach OCRt Paperless das Dokument, analysiert Inhalt und Metadaten und legt es in der Bibliothek ab.
Wichtig: Wenn dein Consumption-Verzeichnis auf einem Dateisystem ohne inotify liegt, etwa auf manchen NFS-Freigaben, funktioniert die Standardüberwachung nicht zuverlässig. In solchen Fällen musst du Polling aktivieren.
9. Sinnvolle erste Einstellungen
Nach dem ersten Login solltest du dir besonders diese Punkte anschauen:
- Benutzer und Berechtigungen
- Korrespondenten, Tags und Dokumenttypen
- E-Mail-Import, falls du Dokumente per Mail empfangen willst
- OCR- und Spracheinstellungen
- Backup-Konzept für Dokumente und Datenbank
Gerade Tags, Korrespondenten und automatische Regeln machen Paperless-ngx mit der Zeit extrem stark. Es lohnt sich, diese Struktur früh sauber aufzubauen.
10. Updates einspielen
Updates kannst du in der Regel so durchführen:
cd ~/paperless-ngx docker compose pull docker compose up -d
Prüfe danach wieder kurz Status und Logs:
docker compose ps docker compose logs --tail=50
Vor größeren Updates solltest du immer ein Backup der Dokumente und der PostgreSQL-Daten haben.
11. Backups und Sicherheit
Für ein verlässliches Backup-Konzept solltest du mindestens diese Bereiche sichern:
/srv/paperless/mediamit deinen eigentlichen Dokumenten/srv/paperless/datamit internen Anwendungsdaten- die PostgreSQL-Daten aus dem Volume oder per Datenbank-Dump
Nur Dateien ohne Datenbank oder nur Datenbank ohne Dokumente reichen im Ernstfall nicht. Plane deshalb beides konsequent mit ein.
12. Fazit
Mit Paperless-ngx bekommst du ein sehr starkes selbst gehostetes Dokumentenarchiv, das weit über simples Dateispeichern hinausgeht. OCR, automatische Klassifizierung, Tags und Suche machen das System im Alltag extrem nützlich.
Wenn du Rechnungen, Verträge, Garantiescheine oder andere Unterlagen endlich sauber digital organisieren willst, ist Paperless-ngx auf Ubuntu eine der besten Lösungen überhaupt.
Tipp:
Kombiniere Paperless-ngx mit einem Scanner, einem Consumption-Ordner und einem guten Backup-Konzept. Dann wird daraus schnell eines der praktischsten Systeme in deinem Homelab.