16. April 2024

Paperless mit Docker

Vorwort:

Die Digitalisierung hat unser tägliches Leben revolutioniert, insbesondere wenn es um die Verwaltung von Dokumenten geht. Mit dem zunehmenden Bedarf an Effizienz und Nachhaltigkeit suchen Unternehmen und Privatpersonen nach Lösungen, um Papierdokumente zu reduzieren und gleichzeitig die Sicherheit und Zugänglichkeit ihrer Daten zu verbessern.

In diesem Zusammenhang erweist sich Paperless als eine äußerst nützliche und innovative Lösung. Paperless ist eine Open-Source-Anwendung, die es Benutzern ermöglicht, ihre Papierdokumente zu scannen, zu organisieren und zu archivieren. Durch die Kombination von OCR (Optical Character Recognition) und fortschrittlichen Suchfunktionen ermöglicht es Paperless den Benutzern, ihre Dokumente schnell und effizient zu durchsuchen und auf sie zuzugreifen, ohne auf physische Kopien angewiesen zu sein.

Um die Implementierung von Paperless zu vereinfachen und die Flexibilität zu erhöhen, hat sich Docker als äußerst wertvolles Werkzeug erwiesen. Docker ermöglicht es, Anwendungen in Containern zu isolieren und zu verpacken, was eine einfache Bereitstellung und Skalierung ermöglicht, unabhängig von der zugrunde liegenden Infrastruktur.

In diesem Papier werden wir einen Überblick über die Vorteile von Paperless geben und eine Schritt-für-Schritt-Anleitung zur Einrichtung und Nutzung von Paperless mit Docker bereitstellen. Von der Installation bis zur Konfiguration werden wir Ihnen zeigen, wie Sie Paperless in Ihrer Umgebung implementieren können, um von den Vorteilen einer papierlosen Büroorganisation zu profitieren.

Vorraussetzung ist hierfür ein Ubuntu 24.04 Server mit Docker.
Für eine einfachere Installation für eine Docker-Umgebung habe ich HIER mit freundlicher Genehmigung von meinem besten Freund scriptOS ein Script, das eine voll Funktionsfähige Docker-Umgebung Einrichtet:
https://git.techniverse.net/scriptos/linux-docker-installer


1. Zuerst benötigt man ein Enviromentfile mit folgendem Inhalt:

# The UID and GID of the user used to run paperless in the container. Set this
# to your UID and GID on the host so that you have write access to the
# consumption directory.
USERMAP_UID=1000
USERMAP_GID=1000

# Additional languages to install for text recognition, separated by a
# whitespace. Note that this is
# different from PAPERLESS_OCR_LANGUAGE (default=eng), which defines the
# language used for OCR.
# The container installs English, German, Italian, Spanish and French by
# default.
# See https://packages.debian.org/search?keywords=tesseract-ocr-&searchon=names&suite=buster
# for available languages.
#PAPERLESS_OCR_LANGUAGES=tur ces

###############################################################################
# Paperless-specific settings                                                 #
###############################################################################

# All settings defined in the paperless.conf.example can be used here. The
# Docker setup does not use the configuration file.
# A few commonly adjusted settings are provided below.

# This is required if you will be exposing Paperless-ngx on a public domain
# (if doing so please consider security measures such as reverse proxy)
PAPERLESS_URL=https://paperless.example.com

# Adjust this key if you plan to make paperless available publicly. It should
# be a very long sequence of random characters. You don't need to remember it.
PAPERLESS_SECRET_KEY=change me

# Use this variable to set a timezone for the Paperless Docker containers. If not specified, defaults to UTC.
PAPERLESS_TIME_ZONE=Europe/Vienna

# The default language to use for OCR. Set this to the language most of your
# documents are written in.
#PAPERLESS_OCR_LANGUAGE=eng

# Set if accessing paperless via a domain subpath e.g. https://domain.com/PATHPREFIX and using a reverse-proxy like traefik or nginx
#PAPERLESS_FORCE_SCRIPT_NAME=/PATHPREFIX
#PAPERLESS_STATIC_URL=/PATHPREFIX/static/ # trailing slash required

2. Nun benötigt man noch die docker-compose.yml:

# Docker Compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
#   as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# In addition to that, this Docker Compose file adds the following optional
# configurations:
#
# - Instead of SQLite (default), PostgreSQL is used as the database server.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
#   and '.env' into a folder.
# - Run 'docker compose pull'.
# - Run 'docker compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.
services:
  broker:
    image: docker.io/library/redis:7
    container_name: paperless-broker
    restart: always
    volumes:
      - /docker/paperless-ngx/redisdata:/data

  db:
    image: docker.io/library/postgres:15
    container_name: paperless-database
    restart: always
    volumes:
      - /docker/paperless-ngx/pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: paperless

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    container_name: paperless-webserver
    restart: always
    depends_on:
      - db
      - broker
    ports:
      - "8000:8000"
    volumes:
      - /docker/paperless-ngx/data:/usr/src/paperless/data
      - /docker/paperless-ngx/media:/usr/src/paperless/media
      - /docker/paperless-ngx/export:/usr/src/paperless/export
      - /docker/paperless-ngx/consume:/usr/src/paperless/consume
    env_file: /docker/paperless-ngx/docker-compose.env
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_TIKA_ENABLED: 1
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
      PAPERLESS_OCR_USER_ARGS: '{"invalidate_digital_signatures": true}'

  gotenberg:
    container_name: paperless-gotenberg
    restart: always
    image: gotenberg/gotenberg:8
    ports:
      - "3000:3000"
    # The gotenberg chromium route is used to convert .eml files. We do not
    # want to allow external content like tracking pixels or even javascript.
    command:
      - "gotenberg"
      - "--chromium-disable-javascript=true"
      - "--chromium-allow-list=file:///tmp/.*"

  tika:
    image: ghcr.io/paperless-ngx/tika:latest
    container_name: paperless-tika
    restart: always

volumes:
  data:
  media:
  pgdata:
  redisdata:

3. Als nächstes müssen noch folgende Schritte ausgeführt werden:

1. docker compose pull um die Images zu laden
2. docker compose run –rm webserver createsuperuser um einen Admin-Account zu erstellen
3. docker compose up -d um die Docker zu starten

docker compose pull
docker compose run --rm webserver createsuperuser

Nun kann der Docker komplett gestartet werden mit:

docker compose up -d

4. Zum Login kommt man nun mit der IP-Adresse oder der angegebenen Domain:

https://192.168.0.123:8080
https://paperless.domain.tld

Ergänzung

Da ich aktuell nun den „Fehler“ hatte, das Digital Signierte PDF nicht Importiert werden konnten und ich folgende Fehlermeldung erhalten habe:

Dies lässt sich zum Glück recht einfach lösen, indem man in dem Enviromentfile von paperless-ngx eine Codezeile hinzufügt und zwar:

PAPERLESS_OCR_USER_ARGS={"invalidate_digital_signatures": true}

Dies sieht dann in etwa so aus:

Nun muss die Änderung nur noch mit folgenden Befehl wirskam gemacht werden:

docker-compose up -d

Man kann es Alternativ noch in der docker-compose.yml einfügen:

services:
  # ...
  paperless:
    # ...
    environment:
      # ...
      PAPERLESS_OCR_USER_ARGS: '{"invalidate_digital_signatures": true}'
      # ...

Viel Spaß nun mit Paperless.

QUELLE: https://docs.paperless-ngx.com

Bei Paperless gibt es eine Demo unter:

https://demo.paperless-ngx.com/accounts/login/?next=/

Benutzername und Kennwort sind hierbei jeweils demo.