# [Anleitung] Paperless-ngx (Digitales Dokumenten-Archiv) via Docker Compose einrichten
Hallo zusammen,
wer seine Briefe, Rechnungen und Dokumente digitalisieren, per OCR-Texterkennung durchsuchbar machen und intelligent taggen lassen möchte, kommt an **Paperless-ngx** nicht vorbei. Das System analysiert eure PDFs automatisch, liest das Datum sowie Beträge aus und archiviert alles revisionssicher.
Hier ist das fertige Docker Compose Setup für euren eigenen Paperless-Server.
---
### Die
docker-compose.yml
yaml
version: '3.8'
services:
# 1. Das Herzstück: Paperless-ngx Webapp
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
container_name: paperless-webserver
restart: unless-stopped
depends_on:
- db
- redis
networks:
Netzwerk-Container:
ipv4_address: 192.168.164.108 # <--- FREIE IP AUS EUREM NETZWERK EINTRAGEN!
backend:
volumes:
- ./data:/usr/src/paperless/data # Anwendungsdaten
- ./media:/usr/src/paperless/media # Eure archivierten PDFs
- ./export:/usr/src/paperless/export # Für Backups / Exporte
- ./consume:/usr/src/paperless/consume # <--- DER SCAN-ORDNER! (Hier Dokumente zum Einlesen reinwerfen)
environment:
# Zwingend erforderlicher geheimer Schlüssel für die Verschlüsselung (Bitte ändern!)
PAPERLESS_SECRET_KEY: "HIER_EINE_LANGE_ZUFÄLLIGE_ZEICHENKETTE_EINTRAGEN"
PAPERLESS_REDIS: redis://paperless-redis:6379
PAPERLESS_DBHOST: paperless-db
PAPERLESS_DBUSER: paperless
PAPERLESS_DBPASS: DEIN_SICHERES_DATENBANK_PASSWORT # <--- ANPASSEN!
PAPERLESS_DBNAME: paperless
PAPERLESS_OCR_LANGUAGE: deu+eng # Standard-Texterkennung auf Deutsch und Englisch
PAPERLESS_TIME_ZONE: Europe/Berlin
PAPERLESS_URL: https://deine-domain.de # <--- EURE SPÄTERE HTTPs-DOMAIN!
# 2. Die Datenbank (PostgreSQL)
db:
image: docker.io/library/postgres:18-alpine # 18-alpine für ressourcensparenden Betrieb
container_name: paperless-db
restart: unless-stopped
networks:
- backend
volumes:
- ./pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: DEIN_SICHERES_DATENBANK_PASSWORT # <--- IDENTISCH MIT OBEN!
# 3. Der Task-Broker (Redis für die Hintergrund-Warteschlange)
redis:
image: docker.io/library/redis:7-alpine
container_name: paperless-redis
restart: unless-stopped
networks:
- backend
networks:
backend:
driver: bridge
Netzwerk-Container:
name: Netzwerk-Container # <--- NAME EURES EXISTIERENDEN NETZWERKS!
external: true
---
### 👤 Ersten Admin-Nutzer anlegen (Wichtig nach dem ersten Start!)
Sobald ihr den Stack gestartet habt, könnt ihr euch noch nicht direkt einloggen, da noch kein Benutzer existiert. Öffnet die Konsole des Containers
paperless-webserver (oder via Putty auf dem Host) und führt folgenden Befehl aus, um euren Admin-Account zu erstellen:
bash
docker exec -it paperless-webserver manage_createsuperuser
Folgt einfach den Anweisungen im Terminal, um euren Benutzernamen, eure E-Mail und das gewünschte Login-Passwort festzulegen.
---
### 🌐 Einrichtung im Nginx Proxy Manager (NPM)
Um Paperless sicher über den Browser zu nutzen, legt ihr im NPM einen neuen **Proxy Host** an:
1. **Domain Names:**
paperless.deine-domain.de
2. **Scheme:**
http
3. **Forward Hostname / IP:**
192.168.164.108
4. **Forward Port:**
8000 *(Standard-Port von Paperless-ngx)*
5. **Websockets Support:** 🟩 **Häkchen setzen / Aktivieren!** *(Wichtig, damit Statusmeldungen beim Scannen live im Browser aktualisiert werden).*
6. **SSL:** Ein neues Let's Encrypt Zertifikat anfordern und *Force SSL* aktivieren.
---
### 🛠️ Nginx-Erweiterung für große Datei-Uploads (Advanced Settings)
Wenn ihr dicke, mehrseitige Dokumente oder hochauflösende Scans hochladet, bricht der Proxy standardmäßig ab. Erhöht das Limit im NPM im Reiter **Advanced** mit diesem Code:
nginx
# Maximale Upload-Größe für große PDFs anheben (z. B. auf 100 M<img class='smiley' style='width:20px;height:20px;' src='../../images/smiley/cool.svg' alt='Cool'>
client_max_body_size 100M;
# Timeouts hochsetzen, falls die OCR-Texterkennung beim Upload etwas länger braucht
proxy_read_timeout 120s;
proxy_send_timeout 120s;