Paperless-NGX auf QNAP NAS

Tutorials
Logo von Paperless-NGX

Aufmerksame Leser meines Blogs wissen, dass ich für meine Dokumentenverwaltung Paperless-NGX als DMS einsetze.

Bisher lief meine Instanz auf einem kleinen Hetzner Cloud Server (natürlich nur via VPN erreichbar), aus dem einfachen Grund, dass ich weder Zeit noch große Lust hatte, mich mit der Container Station meines QNAP NAS genauer zu beschäftigen. Vergangenes Wochenende habe ich es dann doch geschafft und möchte meine Lösung mit meinen Lesern teilen.

Natürlich muss die Container Station bereits auf dem QNAP NAS installiert sein, darauf möchte ich in diesem Beitrag nicht eingehen. Nachdem ihr die Container Station installiert und konfiguriert habt, beginnen wir mit dem Anlegen der notwendigen Ordner. Insgesamt müssen wir sechs Ordner anlegen, die später dem Container zur Verfügung gestellt werden.

Ich nenne hier den Zweck und einen Beispielnamen für die Ordner – bitte passt diese an eure Gegebenheiten an:

  • Redis-Datenbank: redis
  • PostgreSQL-Datenbank: db
  • Paperless-Data-Ordner: data
  • Paperless-Media-Ordner: media
  • Paperless-Export-Ordner: export
  • Paperless-Consume-Ordner: import

Diese Ordner können auf jeder Freigabe des NAS erstellt werden. Ich persönlich verwende zwei RAID-Arrays: eines auf Festplatten und eines auf NVME-SSDs. Die Ordner ‚redis‘, ‚db‘, ‚data‘ und ‚media‘ habe ich auf den NVME-SSDs platziert, die restlichen auf den Festplatten. Natürlich können die Ordner aber auch völlig anders benannt werden oder auch an völlig unterschiedlichen Pfaden auf dem NAS liegen.

Für die Einfachheit dieses Beitrags nehmen wir an, dass alle Ordner im selben Unterverzeichnis erstellt wurden, nämlich /share/CACHEDEV1_DATA/Container/paperless-ngx.

Nachdem das nun erledigt ist, wechseln wir in die Container Station und dort in den Menüpunkt Anwendungen. Hier klicken wir oben rechts auf Erstellen – uns begrüßt ein Fenster, in das wir eine YAML-Datei zur Konfiguration der Anwendung importieren können.

Das hier ist die von mir genutzte YAML-Datei:

version: '3.6'

networks:
  paperless-net:
    external: false

services:
  broker:
    container_name: paperless-redis
    image: docker.io/library/redis:7
    networks:
      - paperless-net
    volumes:
      - /share/CACHEDEV1_DATA/Container/paperless-ngx/redis:/redis
    restart: unless-stopped

  db:
    container_name: paperless-db
    image: docker.io/library/postgres:15
    networks:
      - paperless-net
    restart: unless-stopped
    volumes:
      - /share/CACHEDEV1_DATA/Container/paperless-ngx/db:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: $RANDOMPASSWORD$
  
  webserver:
    container_name: paperless
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    networks:
      - paperless-net
    restart: unless-stopped
    depends_on:
      - db
      - broker
    ports:
      - 8000:8000
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - /share/CACHEDEV1_DATA/Container/paperless-ngx/data:/usr/src/paperless/data
      - /share/CACHEDEV1_DATA/Container/paperless-ngx/media:/usr/src/paperless/media
      - /share/CACHEDEV1_DATA/Container/paperless-ngx/Export:/usr/src/paperless/export
      - /share/CACHEDEV1_DATA/Container/paperless-ngx/Import:/usr/src/paperless/consume
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBPASS: $RANDOMPASSWORD$
      USERMAP_UID: 1000
      USERMAP_GID: 100
      PAPERLESS_OCR_LANGUAGES: deu eng
      PAPERLESS_TIME_ZONE: Europe/Berlin
      PAPERLESS_OCR_LANGUAGE: deu
      PAPERLESS_FILENAME_FORMAT: "{correspondent}/{created} {title}"
      PAPERLESS_TIKA_ENABLED: 1
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
 
  gotenberg:
    container_name: paperless-gotenberg
    image: docker.io/gotenberg/gotenberg:7.8
    restart: unless-stopped
    environment:
      CHROMIUM_DISABLE_ROUTES: 1
    networks:
      - paperless-net

  tika:
    container_name: paperless-tika
    image: ghcr.io/paperless-ngx/tika:latest
    restart: unless-stopped
    networks:
      - paperless-net

Einige Zeilen bedürfen eurer Aufmerksamkeit – ich habe die relevanten Zeilen farbig markiert.

Die Pfadangaben ersetzt ihr bitte vor dem Doppelpunkt mit den Pfaden aus eurer Umgebung. Das Passwort für die PostgreSQL-Datenbank setzt ihr bitte zufällig auf ein starkes Passwort, nehmt aber in allen Zeilen das gleiche Passwort, damit die Dienste miteinander kommunizieren können.

Wir können den YAML-Code mit einem Klick auf „Validieren“ validieren und vergeben dann einen Anwendungsnamen (frei wählbar, beispielsweise paperless-ngx) – nun klicken wir auf Erstellen und lassen die Container Station ihre Arbeit erledigen. Nach kurzer Zeit sollten wir unsere neue Paperless-NGX-Instanz unter http://IP-DES-NAS:8000 erreichen – nur einloggen wird noch schwierig werden.

Zurück zur Container Station und dort in den Tab Container. Hier klicken wir auf das Zahnrad des Containers mit dem Namen paperless und wählen den Punkt Ausführen. Im sich nun öffnenden Fenster wählen wir /bin/bash und klicken wieder auf Ausführen.

Es öffnet sich die Konsole des Containers in der wir dann den Befehl zum Anlegen eines neuen Superusers eingeben: python3 manage.py createsuperuser

Wir folgen den Abfragen und schließen das Fenster wieder. Mit dem gerade angelegten Benutzer können wir uns nun an unserer Paperless-NGX-Instanz anmelden.

Das war’s! Wir haben eine lauffähige Paperless-NGX-Instanz auf unserem QNAP NAS erstellt und können mit der Nutzung des Open Source DMS beginnen!

Wenn ihr Fragen oder Anmerkungen habt: ab in die Kommentare!

Viel Spaß und Erfolg!

2 Gedanken zu „Paperless-NGX auf QNAP NAS“

  1. Hallo Dominic,

    vielen Dank für diese Anleitung. Hatte auf Anhieb Erfolg damit, jedoch erhalte ich eine Fehlermeldung nachdem ich einen PDF in den Import Ordner hinzufüge. Und zwar

    [ERROR] [paperless.consumer] The following error occurred while storing document 02122023_002.pdf after parsing: [Errno 2] No such file or directory: ‚/usr/src/paperless/consume/02122023_002.pdf‘

    Ich bin mir nicht sicher womit das zu tun hat oder wie man das korrigiert, wäre über einen Hinweis dankbar!

    Gruß, Viktor

    Antworten
    • Hallo Viktor,

      ich vermute, dass hier deine Pfade nicht stimmen bzw. die Ordner nicht existieren. Bitte kontrolliere nochmal akribisch, ob du alle Ordner auf dem QNAP angelegt hast und ob die Pfade stimmen.

      Grüße und viel Erfolg,
      Dominic

      Antworten

Schreibe einen Kommentar