Paperless Ngx Dokumentenverwaltung Self Hosted
Paperless-ngx – Self-Hosted Dokumentenverwaltung installieren
Was ist Paperless-ngx?
Paperless-ngx ist eine moderne, open-source Dokumentenverwaltungssystem und die Weiterentwicklung des ursprünglichen Paperless-Projekts. Mit Paperless-ngx können Sie Ihre physischen Dokumente digitalisieren, OCR-scannen und vollständig durchsuchbar speichern.
Anwendungsfälle:
- Rechnungen und Quittungen: Automatische Kategorisierung und Archivierung
- Versicherungsdokumente: Zentrale Speicherung mit Volltextsuche
- Steuererklärungen: Organisiert nach Jahr und Kategorie
- Verträge und Vereinbarungen: Leicht auffindbar durch OCR-Indexierung
- Beziehungen: Verknüpfung von Dokumenten mit Personen
- Email-Archivierung: Automatischer Import über IMAP
Hauptfunktionen
| Feature | Beschreibung |
|---|---|
| OCR (Optical Character Recognition) | Extrahiert Text aus gescannten Dokumenten für Volltextsuche |
| Automatische Verschlagwortung | Tags werden automatisch basierend auf Inhalt zugewiesen |
| Entsprechende (Correspondents) | Gruppierung von Dokumenten nach Absender/Empfänger |
| Dokumenttypen | Klassifizierung (Rechnung, Brief, Vertrag, etc.) |
| Volltextsuche | Sofortige Suche über alle Dokumente |
| Email-Integration | Automatischer Import via IMAP |
Systemanforderungen
| Komponente | Minimum | Empfohlen |
|---|---|---|
| CPU | 2 Kerne | 4+ Kerne |
| RAM | 2 GB | 4-8 GB |
| Speicher | 20 GB | 100+ GB (für Dokumente) |
| Docker | 20.10+ | 24.0+ |
Installation mit Docker Compose
Schritt 1: Verzeichnisse vorbereiten
mkdir -p /opt/paperless cd /opt/paperless mkdir -p consume data media
Schritt 2: .env Datei erstellen
Erstellen Sie /opt/paperless/.env:
# Paperless Environment PAPERLESS_VERSION=2.8.0 # Django Secret Key (generieren mit: python3 -c 'import secrets; print(secrets.token_urlsafe(50))') PAPERLESS_SECRET_KEY=your-secret-key-here-change-this # Database PAPERLESS_DBHOST=paperless-db PAPERLESS_DBNAME=paperless PAPERLESS_DBUSER=paperless PAPERLESS_DBPASS=secure_password_here # URL und Admin PAPERLESS_URL=http://documents.example.com PAPERLESS_ADMIN_USER=admin PAPERLESS_ADMIN_PASSWORD=admin_password # OCR Sprachen (Deutsch + Englisch) PAPERLESS_OCR_LANGUAGE=deu+eng # Redis PAPERLESS_REDIS=redis://paperless-redis:6379 # Taiga für Task Queue PAPERLESS_TASK_WORKERS=2 # Timezone PAPERLESS_TIME_ZONE=Europe/Berlin # Email Konfiguration (optional, für Eingabe) PAPERLESS_ENABLE_COMPRESSION=true PAPERLESS_ENABLE_NGRAM_SEARCH=true # UID/GID für Dateiberechtigungen USERMAP_UID=1000 USERMAP_GID=1000
Schritt 3: docker-compose.yml erstellen
version: '3.8'
services:
paperless-db:
image: postgres:15-alpine
container_name: paperless-db
environment:
POSTGRES_DB: ${PAPERLESS_DBNAME}
POSTGRES_USER: ${PAPERLESS_DBUSER}
POSTGRES_PASSWORD: ${PAPERLESS_DBPASS}
volumes:
- /opt/paperless/pgdata:/var/lib/postgresql/data
restart: unless-stopped
networks:
- paperless-network
paperless-redis:
image: redis:7-alpine
container_name: paperless-redis
restart: unless-stopped
networks:
- paperless-network
paperless-webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:${PAPERLESS_VERSION:-latest}
container_name: paperless-webserver
ports:
- "8000:8000"
depends_on:
- paperless-db
- paperless-redis
- paperless-gotenberg
- paperless-tika
environment:
PAPERLESS_DBHOST: ${PAPERLESS_DBHOST}
PAPERLESS_DBNAME: ${PAPERLESS_DBNAME}
PAPERLESS_DBUSER: ${PAPERLESS_DBUSER}
PAPERLESS_DBPASS: ${PAPERLESS_DBPASS}
PAPERLESS_REDIS: ${PAPERLESS_REDIS}
PAPERLESS_SECRET_KEY: ${PAPERLESS_SECRET_KEY}
PAPERLESS_URL: ${PAPERLESS_URL}
PAPERLESS_OCR_LANGUAGE: ${PAPERLESS_OCR_LANGUAGE}
PAPERLESS_TIME_ZONE: ${PAPERLESS_TIME_ZONE}
USERMAP_UID: ${USERMAP_UID}
USERMAP_GID: ${USERMAP_GID}
PAPERLESS_TIKA_ENABLED: "true"
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://paperless-gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://paperless-tika:9998
PAPERLESS_ENABLE_COMPRESSION: "true"
volumes:
- /opt/paperless/data:/usr/src/app/data
- /opt/paperless/media:/usr/src/app/media
- /opt/paperless/consume:/usr/src/app/consume
- /opt/paperless/export:/usr/src/app/export
restart: unless-stopped
networks:
- paperless-network
paperless-worker:
image: ghcr.io/paperless-ngx/paperless-ngx:${PAPERLESS_VERSION:-latest}
container_name: paperless-worker
command: celery -A paperless worker --loglevel=info -n worker1@%h
depends_on:
- paperless-db
- paperless-redis
environment:
PAPERLESS_DBHOST: ${PAPERLESS_DBHOST}
PAPERLESS_DBNAME: ${PAPERLESS_DBNAME}
PAPERLESS_DBUSER: ${PAPERLESS_DBUSER}
PAPERLESS_DBPASS: ${PAPERLESS_DBPASS}
PAPERLESS_REDIS: ${PAPERLESS_REDIS}
PAPERLESS_SECRET_KEY: ${PAPERLESS_SECRET_KEY}
PAPERLESS_OCR_LANGUAGE: ${PAPERLESS_OCR_LANGUAGE}
USERMAP_UID: ${USERMAP_UID}
USERMAP_GID: ${USERMAP_GID}
volumes:
- /opt/paperless/data:/usr/src/app/data
- /opt/paperless/media:/usr/src/app/media
- /opt/paperless/consume:/usr/src/app/consume
restart: unless-stopped
networks:
- paperless-network
paperless-gotenberg:
image: gotenberg/gotenberg:8
container_name: paperless-gotenberg
restart: unless-stopped
networks:
- paperless-network
paperless-tika:
image: apache/tika:latest
container_name: paperless-tika
restart: unless-stopped
networks:
- paperless-network
networks:
paperless-network:
driver: bridge
volumes:
pgdata:
media:
data:
consume:
Schritt 4: Paperless starten
cd /opt/paperless docker-compose up -d # Logs prüfen docker-compose logs -f paperless-webserver
Paperless ist jetzt verfügbar unter: http://localhost:8000
Schritt 5: Admin-Benutzer erstellen
docker exec paperless-webserver python manage.py createsuperuser # Oder über .env-Variablen (wird beim Start erstellt) # PAPERLESS_ADMIN_USER=admin # PAPERLESS_ADMIN_PASSWORD=secure_admin_password
Erste Dokumente hochladen
Drag-and-Drop Upload
- Melden Sie sich an: http://localhost:8000
- Gehen Sie zur Startseite
- Ziehen Sie PDF/Bilder auf die Seite oder klicken Sie zum Dateiauswähler
- Dokumente werden verarbeitet und indexiert
Automatischer Import-Ordner
Dateien im Ordner /opt/paperless/consume werden automatisch importiert:
cp /path/to/document.pdf /opt/paperless/consume/ # Paperless verarbeitet die Datei automatisch und verschiebt sie in die Mediathek # Fortschritt kann in Administration → Logs angesehen werden
Scanner-Integration
Brother Scanner (oder andere)
Konfigurieren Sie Ihren Scanner, um in den consume-Ordner zu scannen:
# Samba/CIFS freigeben für Scanner # Oder FTP-Server einrichten # Beispiel mit FTP: # Scanner FTP-Einstellung: ftp://server-ip (mit Zugang)
Email-Integration (IMAP)
Email-Ingestion konfigurieren
- Gehen Sie zu Settings → Email
- Konfigurieren Sie IMAP-Server:
- IMAP Server: imap.example.com
- Port: 993 (SSL) oder 143
- Username: Ihre Email
- Password: Passwort oder App-Passwort
- Folder: INBOX oder spezifischer Ordner
- Speichern
Email-Dokumentenverarbeitung
Emails mit Anhängen werden automatisch verarbeitet:
- Anhänge werden als Dokumente importiert
- Email-Text wird in der OCR indexiert
- Emails können automatisch archiviert werden
Automatische Verschlagwortung
Matching Rules erstellen
Paperless kann Dokumenten automatisch Tags, Entsprechende und Dokumenttypen zuweisen:
- Gehen Sie zu Administration → Matching Rules
- Erstellen Sie eine neue Rule:
- Name: "Rechnungen Deutsche Telekom"
- Matching Type: Regex oder Text
- Matching Pattern:
Deutsche Telekom|Telefonica - Actions: Correspondent → "Deutsche Telekom"
- Speichern
Beispiel-Matching Rules:
# Rechnungen automatisch markieren
Pattern: Rechnung|Invoice|Bill
Action: Document Type → "Rechnung"
Tag → "Finanzen"
# Steuerdokumente
Pattern: Steuererklärung|Tax|1040
Action: Tag → "Steuern"
Correspondent → "Finanzamt"
# Versicherungen
Pattern: Versicherung|Insurance|Versicherungspolice
Action: Correspondent → "Versicherungen"
Document Type → "Versicherung"
Volltextsuche und Filterung
Dokumenten finden
Nutzen Sie die Suchfunktion um Dokumente zu finden:
- Einfache Suche: "Rechnung" - findet alle Dokumente mit "Rechnung" im OCR-Text
- Filter: Nach Tags, Correspondent, Document Type, Datum filtern
- Fortgeschrittene Suche: Regex-Pattern und boolean Operatoren
Suchbeispiele:
# Alle Rechnungen von 2023
correspondent:("Deutsche Telekom") year:2023
# Versicherungsdokumente mit "Police"
tag:versicherungen text:policy
# Dokumente mit bestimmtem Pattern
is:untagged # Alle unverschlagworteten Dokumente
Retention Policies
Konfigurieren Sie automatische Löschung oder Archivierung alter Dokumente:
- Gehen Sie zu Settings → Retention
- Definieren Sie Aufbewahrungsrichtlinien:
- Rechnungen: 7 Jahre
- Tempverlauf: 1 Monat
- Archiviert: 10 Jahre
Backup-Strategie
Export konfigurieren
# /usr/local/bin/paperless-backup.sh
BACKUP_DIR="/backup/paperless"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Datenbank Dump
docker exec paperless-db pg_dump -U paperless paperless | \
gzip > $BACKUP_DIR/paperless-db-$DATE.sql.gz
# Medien-Dateien sichern (optional, größer)
tar -czf $BACKUP_DIR/paperless-media-$DATE.tar.gz /opt/paperless/media
# Keep only last 30 days
find $BACKUP_DIR -name "*.gz" -mtime +30 -delete
echo "Backup completed: $BACKUP_DIR"
Automatisches Backup mit Cron
# Täglich um 2 Uhr 0 2 * * * /usr/local/bin/paperless-backup.sh
Reverse Proxy mit Nginx
server {
listen 80;
server_name documents.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name documents.example.com;
ssl_certificate /etc/letsencrypt/live/documents.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/documents.example.com/privkey.pem;
client_max_body_size 100M;
location / {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection "";
}
location /static/ {
alias /opt/paperless/data/static/;
}
}
Speicherverwaltung
| Ordner | Funktion | Größe |
|---|---|---|
| /data | Datenbank, Index, Konfiguration | Wenige GB |
| /media | Gescannte Dokumente und Miniaturen | Größte - abhängig von Dokumentanzahl |
| /consume | Eingangsordner für neue Dokumente | Wird geleert nach Import |
| /export | Exportierte Dokumente (optional) | Nach Bedarf |
Update Prozedur
cd /opt/paperless # Images updaten docker-compose pull # Container neu starten docker-compose up -d # Migrationen werden automatisch durchgeführt docker-compose logs -f paperless-webserver
Verwandte Artikel
- 📖 Docker Compose Grundlagen Anleitung
- 📖 Nextcloud Installation Anleitung
- 📖 MinIO S3 Objektspeicher Self-Hosted
- 🔧 Sichere Server bei Enjyn mieten