Paperless-ngx ist eine Weiterentwicklung von Paperless-ng, welches wiederum ein Fork des ursprünglichen Projektes Paperless ist. Paperless-ngx ist eine Dokumentenverwaltung, mit OCR Funktionalität und unter anderem der Möglichkeit der Verschlagwortung.
Wer Lust und Laune hat, sich Paperless-ngx per Docker auf seiner Synology NAS zu installieren, der lese jetzt bitte weiter:
Als Erstes muss per DSM, unter Systemsteuerung -> Freigegebene Ordner -> Erstellen -> Freigegebenen Ordner erstellen, ein Ordner namens „Paperless-ngx Upload“ erstellt werden. Der Papierkorb kann für diesen Ordner deaktiviert werden, da sich Dateien an dieser Stelle nur übergangsweise befinden.
Der Ordnername für den Upload-Ordner kann natürlich nach Belieben gewählt werden. Hier müsst ihr allerdings darauf achten, den anders gewählten Namen entsprechend in den Dateien „docker-compose.sh“ (Zeile 8) und „docker-compose.yml“ (Zeile 60) anzupassen.
Nun meldet euch auf eurer Synology NAS per SSH an:
ssh 'benutzername'@'synology_nas'
Dann wechselt ihr in den Benutzer ‚root‘:
sudo -i
Erstellt nun die Datei docker-compose.sh:
vim docker-compose.sh
Wechselt in den Einfügemodus durch drücken der Taste i und fügt folgenden Inhalt ein (Hinweis: Ihr müsst die Werte für USERMAP_GID und USERMAP_UID entsprechend eures Standard-Benutzers anpassen):
#!/bin/bash
# Titel: 'setting_paths.sh'
# Autor: 'Holger Näther'
# Version: '1.2'
# Zu erstellende Ordner festlegen (siehe 'volumes' in docker-compose.yml)
export BROKER_DATA_ORDNER='/volume1/docker/paperlessngx/broker/data'
export WEBSERVER_CONSUME_ORDNER='/volume1/Paperless-ngx Upload'
export WEBSERVER_DATA_ORDNER='/volume1/docker/paperlessngx/webserver/data'
export WEBSERVER_EXPORT_ORDNER='/volume1/docker/paperlessngx/webserver/export'
export WEBSERVER_MEDIA_ORDNER='/volume1/docker/paperlessngx/webserver/media'
# Benutzer- und Gruppen-ID festlegen (siehe 'GID' und 'UID' in .env)
export USERMAP_GID=1000
export USERMAP_UID=1000
# Ziel für den Broker-Container-Ordner /data erstellen
if [ ! -d "$BROKER_DATA_ORDNER" ]; then
mkdir -p "$BROKER_DATA_ORDNER"
echo "Verzeichnis '$BROKER_DATA_ORDNER' wurde erstellt."
chown 999:users "$BROKER_DATA_ORDNER"
chmod 0755 "$BROKER_DATA_ORDNER"
echo "Berechtigungen für '$BROKER_DATA_ORDNER' wurden gesetzt."
else
echo "Verzeichnis '$BROKER_DATA_ORDNER' existiert bereits!"
fi
# Berechtigung des Webserver-Container-Ordner /usr/src/paperless/consume anpassen
if [ -d "$WEBSERVER_CONSUME_ORDNER" ]; then
chown $USERMAP_UID:$USERMAP_GID "$WEBSERVER_CONSUME_ORDNER"
chmod 0755 "$WEBSERVER_CONSUME_ORDNER"
echo "Berechtigungen für '$WEBSERVER_CONSUME_ORDNER' wurden gesetzt."
else
echo "Freigegebener Ordner '$WEBSERVER_CONSUME_ORDNER' muss per DSM erstellt werden!"
fi
# Ziel für den Webserver-Container-Ordner /usr/src/paperless/data erstellen
if [ ! -d "$WEBSERVER_DATA_ORDNER" ]; then
mkdir -p "$WEBSERVER_DATA_ORDNER"
echo "Verzeichnis '$WEBSERVER_DATA_ORDNER' wurde erstellt."
chown $USERMAP_UID:$USERMAP_GID "$WEBSERVER_DATA_ORDNER"
chmod 0755 "$WEBSERVER_DATA_ORDNER"
echo "Berechtigungen für '$WEBSERVER_DATA_ORDNER' wurden gesetzt."
else
echo "Verzeichnis '$WEBSERVER_DATA_ORDNER' existiert bereits!"
fi
# Ziel für den Webserver-Container-Ordner /usr/src/paperless/export erstellen
if [ ! -d "$WEBSERVER_EXPORT_ORDNER" ]; then
mkdir -p "$WEBSERVER_EXPORT_ORDNER"
echo "Verzeichnis '$WEBSERVER_EXPORT_ORDNER' wurde erstellt."
chown $USERMAP_UID:$USERMAP_GID "$WEBSERVER_EXPORT_ORDNER"
chmod 0755 "$WEBSERVER_EXPORT_ORDNER"
echo "Berechtigungen für '$WEBSERVER_EXPORT_ORDNER' wurden gesetzt."
else
echo "Verzeichnis '$WEBSERVER_EXPORT_ORDNER' existiert bereits!"
fi
# Ziel für den Webserver-Container-Ordner /usr/src/paperless/media erstellen
if [ ! -d "$WEBSERVER_MEDIA_ORDNER" ]; then
mkdir -p "$WEBSERVER_MEDIA_ORDNER"
echo "Verzeichnis '$WEBSERVER_MEDIA_ORDNER' wurde erstellt."
chown $USERMAP_UID:$USERMAP_GID "$WEBSERVER_MEDIA_ORDNER"
chmod 0755 "$WEBSERVER_MEDIA_ORDNER"
echo "Berechtigungen für '$WEBSERVER_MEDIA_ORDNER' wurden gesetzt."
else
echo "Verzeichnis '$WEBSERVER_MEDIA_ORDNER' existiert bereits!"
fi
Nun die Taste Esc drücken um den Einfügemodus zu verlassen. Gebt ein : ein, gefolgt von einem w und einem q, dann Enter drücken. Somit habt ihr die Datei gespeichert und geschlossen.
Jetzt nur noch die soeben erstellte Datei ausführbar machen:
chmod 0700 ~/docker-compose.sh
Startet den erstellten Ablauf mit folgendem Befehl:
~/docker-compose.sh
Wechselt nun in das neu erstellte Docker-Basisverzeichnis für Paperless-ngx:
cd /volume1/docker/paperlessngx
Erstellt die Datei docker-compose.env:
vim docker-compose.env
Fügt, wie zuvor beschrieben, durch drücken der Taste i in den Einfügemodus wechselnd, den folgenden Inhalt ein (Hinweis: Ihr müsst die Werte für PAPERLESS_SECRET_KEY, PAPERLESS_URL, USERMAP_GID und USERMAP_UID entsprechend eures Setups und eures Standard-Benutzers anpassen):
# docker-compose environment file
# Titel: 'docker-compose.env'
# Autor: 'Holger Näther'
# Version: '1.1'
# Primäre OCR Sprache festlegen
PAPERLESS_OCR_LANGUAGE=deu
# Sekundäre OCR Sprachen festlegen
PAPERLESS_OCR_LANGUAGES=eng
# Geheimen Schlüssel für externen Zugriff festlegen
PAPERLESS_SECRET_KEY=cE2ZhGetXK9iXiGNCw%vu2KiZMmY@gti@R@sVUYYeBxC9M9d62FQ%T54 # ist nur ein Beispiel
# Zeitzone des Server festelegen
PAPERLESS_TIME_ZONE=Europe/Berlin
# Öffentliche Adresse (FQDN) des Server festelgen
PAPERLESS_URL=https://paperless.eigenedomain.net
# Benutzer-ID festlegen
USERMAP_GID=1000
# Gruppen-ID festlegen
USERMAP_UID=1000
Wie zuvor beschrieben, die Taste Esc drücken um den Einfügemodus zu verlassen. Einen : eingeben, gefolgt von einem w und einem q, dann Enter drücken.
Erstellt nun die Datei docker-compose.yml:
vim docker-compose.yml
Fügt, wie zuvor beschrieben, durch drücken der Taste i in den Einfügemodus wechselnd, den folgenden Inhalt ein (Hinweis: Solltet ihr einen anderen Port als 8888 für Paperless-ngx verwenden wollen, dann muss dies im Bereich ‚ports‘ eingestellt werden. Vor dem Doppelpunkt steht der extern zu verwendende Port, der angepasst werden kann; nach dem Doppelpunkt steht der Container interne Port, der zwingend 8000 bleiben muss):
# docker-compose manifest file
# Titel: 'paperless-ngx/docker-compose.yml'
# Autor: 'Holger Näther'
# Version: '1.5'
---
version: "3.4"
networks:
paperlessngx:
external: false
name: paperlessngx
services:
paperlessngx-broker:
container_name: paperlessngx-broker
image: docker.io/library/redis:7
networks:
- paperlessngx
restart: unless-stopped
volumes:
- /volume1/docker/paperlessngx/broker/data:/data
paperlessngx-gotenberg:
command:
- "gotenberg"
- "--chromium-disable-javascript=true"
- "--chromium-allow-list=file:///tmp/.*"
container_name: paperlessngx-gotenberg
image: docker.io/gotenberg/gotenberg:7.8
networks:
- paperlessngx
restart: unless-stopped
paperlessngx-tika:
container_name: paperlessngx-tika
image: ghcr.io/paperless-ngx/tika:latest
networks:
- paperlessngx
restart: unless-stopped
paperlessngx-webserver:
container_name: paperlessngx-webserver
depends_on:
- paperlessngx-broker
- paperlessngx-gotenberg
- paperlessngx-tika
env_file: docker-compose.env
environment:
- PAPERLESS_REDIS=redis://paperlessngx-broker:6379
- PAPERLESS_TIKA_ENABLED=1
- PAPERLESS_TIKA_ENDPOINT=http://paperlessngx-tika:9998
- PAPERLESS_TIKA_GOTENBERG_ENDPOINT=http://paperlessngx-gotenberg:3000
healthcheck:
interval: 30s
test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
timeout: 10s
retries: 5
image: ghcr.io/paperless-ngx/paperless-ngx:latest
networks:
- paperlessngx
ports:
- 8888:8000
restart: unless-stopped
volumes:
- /volume1/Paperless-ngx Upload:/usr/src/paperless/consume
- /volume1/docker/paperlessngx/webserver/data:/usr/src/paperless/data
- /volume1/docker/paperlessngx/webserver/export:/usr/src/paperless/export
- /volume1/docker/paperlessngx/webserver/media:/usr/src/paperless/media
Auch hier die Taste Esc drücken um den Einfügemodus zu verlassen. Einen : eingeben, gefolgt von einem w und einem q, dann Enter drücken.
An dieser Stelle können nun die Images für die Docker-Container geladen werden:
docker-compose pull
Und mit folgendem Befehl werden die Docker-Container gebaut und gestartet:
docker-compose up -d
Um den benötigten Admin-Benutzer zu erstellen, muss folgender Befehl aufgerufen werden, gefolgt von der Eingabe des gewünschten Benutzernamen, einer E-Mail-Adresse (optionale Eingabe) und dem entsprechenden Passwort (mindestens 8 Zeichen):
docker-compose run --rm paperlessngx-webserver createsuperuser
Meldet euch zum Schluss vom ‚root‘ Benutzer ab:
exit
Und loggt euch von der SSH Sitzung an eurer Synology NAS aus:
exit
Vielen Dank für die tolle Anleitung. Ich habe schon mehrere Versuche mit anderen Anleitungen versucht, die aber alle gescheitert sind. Diese Anleitung hat sofort funktioniert.
Besten Dank an Michael für einen essentiellen Hinweis bezüglich der Upload-Ordner-Erstellung. Ich habe diesen Beitrag entsprechend überarbeitet.