Paperless-ngx – Self-Hosted Dokumentenverwaltung installieren | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

303 Dokumentationen verfügbar

Wissensdatenbank

Paperless Ngx Dokumentenverwaltung Self Hosted

Zuletzt aktualisiert: 05.04.2026 um 19:42 Uhr

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
💡 Tipp: Verwenden Sie starke Passwörter für Admin und Datenbank. Ändern Sie alle Standardwerte in der .env Datei.

Erste Dokumente hochladen

Drag-and-Drop Upload

  1. Melden Sie sich an: http://localhost:8000
  2. Gehen Sie zur Startseite
  3. Ziehen Sie PDF/Bilder auf die Seite oder klicken Sie zum Dateiauswähler
  4. 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)
⚠️ Wichtig: Stellen Sie sicher, dass Sie richtige Berechtigungen für den consume-Ordner setzen, damit der Scanner Dateien schreiben kann.

Email-Integration (IMAP)

Email-Ingestion konfigurieren

  1. Gehen Sie zu Settings → Email
  2. 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
  3. 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:

  1. Gehen Sie zu Administration → Matching Rules
  2. Erstellen Sie eine neue Rule:
    • Name: "Rechnungen Deutsche Telekom"
    • Matching Type: Regex oder Text
    • Matching Pattern: Deutsche Telekom|Telefonica
    • Actions: Correspondent → "Deutsche Telekom"
  3. 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:

  1. Gehen Sie zu Settings → Retention
  2. 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
✅ Gut zu wissen: OCR in Deutsch (deu) ist sehr genau. Für beste Ergebnisse verwenden Sie hochwertige Scans mit mindestens 300 DPI.

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

Weitere Ressourcen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120