Inhaltsübersicht
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