Paperless-ngx per Docker auf Synology NAS installieren

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


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

Ein Kommentar

  1. Besten Dank an Michael für einen essentiellen Hinweis bezüglich der Upload-Ordner-Erstellung. Ich habe diesen Beitrag entsprechend überarbeitet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.