Paperless-NGX auf QNAP NAS

QNAP NAS: Paperless-NGX DMS einrichten, QNAP konfigurieren, Ordner erstellen inkl. Compose-File für Docker. Effiziente Dokumentenverwaltung!
     

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!