QNAP-NAS: Installation von Paperless-ngx

Einleitung

Zur Organisation meiner Dokumente habe ich mir nach einigen Recherchen die Open-Source-Software Paperless-ngx als Dokumentenmanagementsystem ausgesucht.

Laufen soll das ganze auf meinem QNAP TS-873A unter QuTS hero als Docker Container über die QNAP Container Station.

Wichtig: Die Nutzung dieser Anleitung erfolgt auf eigenes Risiko.

Vorbereitung

Container Station

Zunächst wird die Container Station benötigt, ist diese bisher nicht installiert, kann dies einfach über das App-Center innerhalb der Administrationsoberfläche des NAS erfolgen.

Anlegen von Ordnern

Die für Paperless benötigten Ordner können in jedem beliebigen Ordnerpfad auf dem NAS gespeichert werden. Ich habe mich aus den nachfolgenden Gründen entschieden, einige Ordner im Containerverzeichnis und andere in meiner regulären Ordnerstruktur auf dem NAS abzulegen.

Paperless benötigt einige „technische“ Ordner für die Datenbank, die Programmkomponenten und Ordner in welchem weitere Dateien gespeichert werden. Diese „technischen“ Ordner möchte ich daher innerhalb des Containerverzeichnisses (in meinem Fall: /share/ZFSxx_DATA/Container/paperless-ngx) speichern, da ein direkter Benutzerzugriff darauf im Normalfall nicht erforderlich ist:

  • redis
  • db
  • data

Die nun folgenden Ordner beinhalten die PDF-Dateien oder dienen als Im- bzw. Export-Verzeichnis. Diese Ordner möchte ich innerhalb meiner regulären Ordnerstruktur haben, um einen direkten Zugriff zu erhalten und ein Backup der Daten zu vereinfachen (in meinem Fall: /share/ZFSxx_DATA/Freigabename/Ordnername/paperless-ngx):

  • media
  • export
  • import (Standardname: consume)

Paperless benötigt einige zusätzliche Softwarekomponenten. Diese werden über das unten stehende Docker-Skript automatisch heruntergeladen und installiert:

  • Postgres (Datenbank)
  • Redis (Wartungs- und Optimierungsaufgaben bspw. für die automatische Dokumentenzuordnung)
  • Paperless (Hauptprogramm)
  • Tika (zur Konvertierung von Office-Dateien und E-Mails)
  • Gotenberg (zur Konvertierung von Office-Dateien und E-Mails)

Installation

Für die Installation via Docker wird ein Installationsskript, auch bekannt als Docker-Compose-Datei, benötigt. Sofern ihr dieses nutzen möchtet, müsst ihr die farbig markierten Stellen an eure NAS-Umgebung anpassen. Dies sind zum einen die numerischen ZFS-Ordner-Bezeichnungen (xx), die Freigabe (Freigabename), der Name des Ordners (Ordnername) und zum anderen das Passwort der Postgres-Datenbank (xxx). Dieses wird nur innerhalb der Compose-Datei verwendet und dient ausschließlich der Verbindung zwischen Paperless und der Datenbank. Das Kennwort erlaubt nicht die Anmeldung an der Paperless-Oberfläche!

Öffnet die Container-Station in der Weboberfläche des NAS, klickt auf Anwendungen (Applications) und dann auf Erstellen (create). Gebt nun als Namen paperless-ngx ein und fügt die folgende angepasste Docker Compose Datei aus dem QNAP-Club-Forum  ein:

version: '3.6'

networks:
paperless-net:
external: false

services:
broker:
container_name: paperless-redis
image: redis:7
networks:
- paperless-net
volumes:
- /share/ZFSxx_DATA/Container/paperless-ngx/redis:/redis
restart: unless-stopped

db:
container_name: paperless-db
image: postgres:16
networks:
- paperless-net
restart: unless-stopped
volumes:
- /share/ZFSxx_DATA/Container/paperless-ngx/db:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: xxx

webserver:
container_name: paperless
image: ghcr.io/paperless-ngx/paperless-ngx:latest
networks:
- paperless-net
restart: unless-stopped
depends_on:
- db
- broker
- gotenberg
- tika
ports:
- 8000:8000 #Webport von Paperless
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- /share/ZFSxx_DATA/Container/paperless-ngx/data:/usr/src/paperless/data
- /share/ZFSxx_DATA/Freigabename/Ordnername/paperless-ngx/media:/usr/src/paperless/media
- /share/ZFSxx_DATA/Freigabename/Ordnername/paperless-ngx/export:/usr/src/paperless/export #den Ordner "export" von Paperless auf den Ordner export mappen
- /share/ZFSxx_DATA/Freigabename/Ordnername/paperless-ngx/import:/usr/src/paperless/consume #den Ordner "consume" von Paperless auf den Ordner import mappen
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
PAPERLESS_DBPASS: xxx
USERMAP_UID: 1000 
USERMAP_GID: 100
PAPERLESS_OCR_LANGUAGES: eng deu
PAPERLESS_TIME_ZONE: Europe/Berlin
PAPERLESS_OCR_LANGUAGE: deu
PAPERLESS_FILENAME_FORMAT: "{created_year}/{document_type}/{title}"
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998

gotenberg:
container_name: paperless-gotenberg
image: gotenberg/gotenberg:latest
restart: unless-stopped
environment:
CHROMIUM_DISABLE_ROUTES: 1
networks:
- paperless-net

tika:
container_name: paperless-tika
image: apache/tika:latest
restart: unless-stopped
networks:
- paperless-net

Zugriff auf Paperless

Wenn der Paperless-Container erfolgreich gestartet wurde, könnt ihr Paperless über die IP des NAS und unter Angabe des Ports 8000 öffnen, sofern ihr den Port in der Compose-Datei nicht geändert habt. Also beispielsweise: 192.168.0.200:8000

Um euch einloggen zu können, muss zunächst noch ein Paperless-Benutzer angelegt werden. Hierzu verwendet ihr am besten SSH via Terminal (unter macOS) oder via Putty (unter Windows), meldet euch mit eurem NAS-Admin-Benutzer an. Wechselt dann in das Programmverzeichnis von Paperless, entsprechend der oben angegebenen Installation: /share/ZFSxx_DATA/Container/container-station-data/application/paperless-ngx

Gebt nun die folgenden Befehle ein und bestätigt diese jeweils mit Enter:

docker exec -it paperless /bin/bash

python3 manage.py createsuperuser

Gebt nun einen Benutzernamen, die E-Mail-Adresse (optional) und ein Passwort ein.

Nun könnt ihr euch mit dem gerade erstellten Benutzer an der Paperless-Oberfläche anmelden.

Updates

Updates lassen sich am einfachsten via SSH durchführen. Hierzu verbindet man sich via Terminal (unter macOS) oder via Putty (unter Windows) mit dem NAS (als NAS-Admin-Benutzer) und wechselt in den Ordner /share/ZFSxx_DATA/Container/container-station-data/application/paperless-ngx und gibt nacheinander die folgenden Befehle ein:

Container stoppen mit:

docker compose down

Container updaten mit:

docker compose pull

Und alles wieder starten mit:

docker compose up -d