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.
![Ansicht Erstellungsassistent Freigegebener Ordner](https://www.holger.naether.consulting/wp-content/uploads/2024/04/screenshot_dsm_paperless_upload_folder.png)
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
Besten Dank an Michael für einen essentiellen Hinweis bezüglich der Upload-Ordner-Erstellung. Ich habe diesen Beitrag entsprechend überarbeitet.