Hi zusammen.
Bin neu hier auf der Suche nach Hilfe ![]()
Ich habe ein UGREEN DH4300 Plus mit Firmware Version 1.10.0.0109 im Einsatz.
Darauf möchte ich jetzt paperless-ngx zum Fliegen bekommen und habe mir schon unterschiedlichste Tutorials und Anleitungen durchgelesen und auch ausprobiert - leider mit keinerlei Erfolg.
Die einzelnen Versuche spar ich euch, sondern bleibe einfach beim aktuellsten Versuch.
Ich benutze die Anleitung von Tommes:
Docker-Compose: Paperless-ngx inklusive Redis 8, Tika, Gotenberg und PostgreSQL 18
Benutze für das ganze einen Admin-User, ohne persönlichen Ordner.
Nach dem Anlegen der Ordnerstruktur habe ich lediglich UID und GID auf die Werte geändert die mir Docker anzeigt (und die ich auch per CLI angezeigt bekomme)
# Paperless-ngx inklusive Redis, Tika, Gotenberg und PostgreSQL
# YAML-Dateiversion: 1.00 vom 01.11.2025
# Erstelle einen Ordner namens "paperless-nxg" im Docker-Verzeichnis.
# Wechsel in diesen Ordner und erstelle die folgenden Unterordner:
# data, media, export, consume, pgdata und redisdata.
#
# Die endgültige Verzeichnisstruktur sollte wie folgt aussehen:
# /volume1
# /docker
# /paperless-ngx
# /data
# /media
# /export
# /consume
# /pgdata
# /redisdata
services:
# Redis Container
broker:
image: docker.io/library/redis:8
# Containername (nach Bedarf anpassen)
container_name: Paperless-ngx-Redis
restart: unless-stopped
# Sicherheitsoptionen
security_opt:
- no-new-privileges:true
# Gesundheitscheck
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 5
# Speicherort persistenter Daten (Pfad vor dem Doppelpunkt nach Bedarf anpassen)
volumes:
- /volume1/docker/paperless-ngx/redisdata:/data:rw
# PostgreSQL Container
db:
image: docker.io/library/postgres:18
# Containername (nach Bedarf anpassen)
container_name: Paperless-ngx-PostgreSQL
# Hostname des PostgreSQL-Containers (nach Bedarf anpassen)
hostname: paperless-postgres-db
restart: unless-stopped
# Sicherheitsoptionen
security_opt:
- no-new-privileges:true
# Gesundheitscheck
healthcheck:
# Datenbankname Datenbankbenutzer
test: ["CMD", "pg_isready", "-q", "-d", "paperless", "-U", "paperless"]
interval: 30s
timeout: 10s
retries: 5
# Speicherort persistenter Daten (Pfad vor dem Doppelpunkt nach Bedarf anpassen)
volumes:
- /volume1/docker/paperless-ngx/pgdata:/var/lib/postgresql/18/docker:rw
# Umgebungsvariablen
environment:
# Datenbankname (nach Bedarf anpassen)
POSTGRES_DB: paperless
# Datenbankbenutzer (nach Bedarf anpassen)
POSTGRES_USER: paperless
# Datenbankpasswort (nach Bedarf anpassen)
POSTGRES_PASSWORD: paperless
# Gotenberg Container
gotenberg:
image: docker.io/gotenberg/gotenberg:latest
# Containername (nach Bedarf anpassen)
container_name: Paperless-ngx-Gotenberg
restart: unless-stopped
# Sicherheitsoptionen
security_opt:
- no-new-privileges:true
# Die Goteborg-Chromium-Route wird zur Konvertierung von .eml-Dateien verwendet.
# Wir möchten keine externen Inhalte wie Tracking-Pixel oder sogar Javascript zulassen.
command:
- "gotenberg"
- "--chromium-disable-javascript=true"
- "--chromium-allow-list=file:///tmp/.*"
# Tika Container
tika:
image: docker.io/apache/tika:latest
# Containername (nach Bedarf anpassen)
container_name: Paperless-ngx-Tika
restart: unless-stopped
# Sicherheitsoptionen
security_opt:
- no-new-privileges:true
# Paperless-ngx Container
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
# Containername (nach Bedarf anpassen)
container_name: Paperless-ngx
restart: unless-stopped
# Sicherheitsoptionen
security_opt:
- no-new-privileges:true
# Festlegung der Reihenfolge und Ausführung weiterer Dienste-Abhängigkeiten
depends_on:
- db
- broker
# Weiterleitungsport
ports:
- "8180:8000"
# Gesundheitscheck
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
# Speicherorte persistenter Daten (Pfade vor dem Doppelpunkt nach Bedarf anpassen)
volumes:
- /volume1/docker/paperless-ngx/data:/usr/src/paperless/data:rw
- /volume1/docker/paperless-ngx/media:/usr/src/paperless/media:rw
- /volume1/docker/paperless-ngx/export:/usr/src/paperless/export:rw
- /volume1/docker/paperless-ngx/consume:/usr/src/paperless/consume:rw
# Umgebungsvariablen
environment:
# Umgebungsvariablen für den Redis-Container festlegen
PAPERLESS_REDIS: redis://broker:6379
# Umgebungsvariablen für den PostgreSQL-Container festlegen
# Hostname des PostgreSQL-Containers (entspricht der Variablen "hostname" im Abschnitt services: -> db: )
PAPERLESS_DBHOST: paperless-postgres-db
# Datenbankname (entspricht der Variablen "POSTGRES_DB" im Abschnitt services: -> db: )
PAPERLESS_DBNAME: paperless
# Benutzername (entspricht der Variablen "POSTGRES_USER" im Abschnitt services: -> db: )
PAPERLESS_DBUSER: paperless
# Benutzername (entspricht der Variablen "POSTGRES_PASSWORD" im Abschnitt services: -> db: )
PAPERLESS_DBPASS: paperless
# Umgebungsvariablen für den Tika-Container festlegen
# Aktivieren (oder deaktivieren) des Tika-Parser
PAPERLESS_TIKA_ENABLED: 1
# Legt die URL fest, über die Paperless den Gotenberg-Server erreichen kann
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
# Legt die URL fest, über die Paperless den Tika-Server erreichen kann
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
# Umgebungsvariablen für den Paperless-ngx-Container festlegen
# Benutzer-ID des berechtigten Docker-Systembenutzers (nach Bedarf anpassen)
USERMAP_UID: 1003
# Gruppen-ID des berechtigten Docker-Systembenutzers (nach Bedarf anpassen)
USERMAP_GID: 10
# Name des Paperless-ngx Benutzers (nach Bedarf anpassen)
PAPERLESS_ADMIN_USER: admin-user
# Passwort des Paperless-ngx Benutzers (nach Bedarf anpassen)
PAPERLESS_ADMIN_PASSWORD: admin-password
# Zeitzone (nach Bedarf anpassen)
PAPERLESS_TIME_ZONE: Europe/Berlin
# OCR-Sprache (nach Bedarf anpassen)
PAPERLESS_OCR_LANGUAGE: deu+eng
# Standard-OCR-Dateinamenformat (nach Bedarf anpassen)
PAPERLESS_FILENAME_FORMAT: '{{ correspondent }}/{{ document_type }}/{{ created_year }}-{{ created_month }}-{{ created_day }}_{{ title }}'
# Entferne alle Platzhalter, die als "none" aufgelöst wurden.
PAPERLESS_FILENAME_FORMAT_REMOVE_NONE: true
# Überprüfen, ob der Dateiname ein gültiges Datum (YYYY-MM-DD) enthält. Ist dies der Fall, wird dieses anstelle des Datums im Dokument verwendet.
PAPERLESS_FILENAME_DATE_ORDER: YMD
# Entferne alle doppelten Dateien aus dem Ordner "Consume"
PAPERLESS_CONSUMER_DELETE_DUPLICATES: true
# Dateien in Unterordnern des Consumeordners erfassen
PAPERLESS_CONSUMER_RECURSIVE: true
# Ignoriere ein oder mehrere durch Kommas getrennte Datumsangaben in den Dokumenten (nach Bedarf anpassen)
PAPERLESS_IGNORE_DATES: "1970-01-01, 1970-12-31"
# Die digitale Signatur von PDF-Dokumenten ungültig machen, um die OCR-Verarbeitung zu ermöglichen
PAPERLESS_OCR_USER_ARGS: '{"invalidate_digital_signatures": true}'
Display More
Wenn ich das ganze dann "Bereitstelle" werden die Images gezogen, Container angelegt und ein Default_network angelegt.
Sieht dann erstmal aus als würde alles passen, allerdings gibts nach kurzer Zeit Fehlermeldungen im Paperless-ngx Container:
[init-start] paperless-ngx docker container starting...
[init-start] paperless-ngx docker container starting init as root
[env-init] Checking for environment from files
[env-init] No *_FILE environment found
[init-tesseract-langs] Checking if additional teseract languages needed
[init-tesseract-langs] No additional installs requested
[init-redis-wait] Waiting for Redis to report ready
[init-db-wait] Waiting for postgresql to report ready
[init-db-wait] Waiting for PostgreSQL to start...
[init-user] Mapping UID for paperless to 1003
Waiting for Redis...
Connected to PostgreSQL
[init-db-wait] Database is ready
[init-user] Mapping GID for paperless to 10
[init-folders] Running with root privileges, adjusting directories and permissions
mkdir: created directory '/tmp/paperless'
mkdir: created directory '/usr/src/paperless/data/index'
mkdir: created directory '/usr/src/paperless/media/documents'
mkdir: created directory '/usr/src/paperless/media/documents/originals'
mkdir: created directory '/usr/src/paperless/media/documents/thumbnails'
changed ownership of '/usr/src/paperless/data/index' from root:root to paperless:paperless
changed ownership of '/usr/src/paperless/media/documents' from root:root to paperless:paperless
changed ownership of '/usr/src/paperless/media/documents/originals' from root:root to paperless:paperless
changed ownership of '/usr/src/paperless/media/documents/thumbnails' from root:root to paperless:paperless
changed ownership of '/tmp/paperless' from root:root to paperless:paperless
[init-migrations] Apply database migrations...
Redis ping #0 failed.
Error: Timeout connecting to server.
Waiting 5s
Traceback (most recent call last):
File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 279, in ensure_connection
self.connect()
File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 256, in connect
self.connection = self.get_new_connection(conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/backends/postgresql/base.py", line 332, in get_new_connection
connection = self.Database.connect(**conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/psycopg/connection.py", line 118, in connect
raise last_ex.with_traceback(None)
psycopg.errors.ConnectionTimeout: connection timeout expired
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/paperless/src/manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.12/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.12/site-packages/django/core/management/__init__.py", line 436, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 416, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 460, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 107, in wrapper
res = handle_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/core/management/commands/migrate.py", line 114, in handle
executor = MigrationExecutor(connection, self.migration_progress_callback)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/migrations/executor.py", line 18, in __init__
self.loader = MigrationLoader(self.connection)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/migrations/loader.py", line 58, in __init__
self.build_graph()
File "/usr/local/lib/python3.12/site-packages/django/db/migrations/loader.py", line 235, in build_graph
self.applied_migrations = recorder.applied_migrations()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/migrations/recorder.py", line 89, in applied_migrations
if self.has_table():
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/migrations/recorder.py", line 63, in has_table
with self.connection.cursor() as cursor:
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 320, in cursor
return self._cursor()
^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 296, in _cursor
self.ensure_connection()
File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 278, in ensure_connection
with self.wrap_database_errors:
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/utils.py", line 91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 279, in ensure_connection
self.connect()
File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/base.py", line 256, in connect
self.connection = self.get_new_connection(conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/django/db/backends/postgresql/base.py", line 332, in get_new_connection
connection = self.Database.connect(**conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/psycopg/connection.py", line 118, in connect
raise last_ex.with_traceback(None)
django.db.utils.OperationalError: connection timeout expired
s6-rc: warning: unable to start service init-migrations: command exited 1
Redis ping #1 failed.
Error: Timeout connecting to server.
Waiting 5s
Redis ping #2 failed.
Error: Timeout connecting to server.
Waiting 5s
Redis ping #3 failed.
Error: Timeout connecting to server.
Waiting 5s
Redis ping #4 failed.
Error: Timeout connecting to server.
Waiting 5s
Failed to connect to redis using environment variable PAPERLESS_REDIS.
s6-rc: warning: unable to start service init-wait-for-redis: command exited 1
/run/s6/basedir/scripts/rc.init: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information.
/run/s6/basedir/scripts/rc.init: fatal: stopping the container.
Display More
Aus dem Log lese ich erstmal 2 Fehler raus:
- paperless-ngx erreicht redis nicht
- paperless-ngx's init migrations scheitert
Das Problem mit der Erreichbarkeit von Redis hatte ich in vorherigen Versuchen auch schon. Das Network sieht aber auch Standard aus...
Redis an sich läuft, konnte auch per redis-cli darauf zugreifen (per ip und dann Dinge hingeschickt)
Hat jemand nen Tipp was ich probieren kann oder auch direkt was ich falsch mache?
Kann auch noch die Logs der anderen Container beisteuern wenn es hilft. Die sahen bisher nur i.O. aus.
Danke für die Hilfe im Voraus ![]()