Grosse PDF's - bearbeiten - System freeze

Evtl ist da noch mehr drin, kannst dem Webserver auch mehr CPU und RAM einstellen.
Beispiel:

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    container_name: Paperless-NGX
    hostname: paperless-ngx
    mem_limit: 3g
    cpu_shares: 1024

Deine Docker compose schaut sehr wild aus, kann leider nicht beurteilen ob dich irgendwelche Einträge bremsen, was ich sehr vermute.

1 „Gefällt mir“

Hi Jake,
gerne kann ich meine finale yml teilen ist eigentlich nicht wild :slight_smile:

version: '3.9'

networks:
  paperless_frontend:
    name: paperless_frontend # erzwingt den Netzwerknamen
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.240.0/24

  paperless_backend:
    name: paperless_backend # erzwingt den Netzwerknamen
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.241.0/24

services:
  # schneller, quelloffener In-Memory-Datenspeicher
  redis:
    container_name: pl-redis
    hostname: pl-redis
    image: redis:8
    restart: unless-stopped
    networks: 
      paperless_backend:
        ipv4_address: 192.168.241.2
    command:
      - "/bin/sh"
      - "-c"
      - "redis-server --requirepass redispass"
    security_opt:
      - no-new-privileges:true
    # read_only: true
    volumes:
      - /srv/stacks/redis:/data:rw # Lokal
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    environment:
      TZ: "Europe/Berlin"
      
  # PostgreSQL is a powerful, open source object-relational database 
  postgres:
    container_name: pl-postgres
    hostname: pl-postgres
    image: postgres:18
    restart: unless-stopped
    networks: 
      paperless_backend:
        ipv4_address: 192.168.241.3
    security_opt:
      - no-new-privileges:true
     volumes:
      - /srv/stacks/postgres:/var/lib/postgresql:rw # Lokal
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U paperless_archiv || exit 1"]
      interval: 1s
      timeout: 5s
      retries: 10

  # The Apache Tika™ toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). 
  tika:
    container_name: pl-tika
    image: apache/tika:2.9.2.1-full
    restart: unless-stopped
    networks: 
      paperless_backend:
        ipv4_address: 192.168.241.4
    security_opt:
      - no-new-privileges:true
    environment:
      TZ: "Europe/Berlin"

  # Gotenberg provides a developer-friendly API to interact with powerful tools like Chromium and LibreOffice for converting numerous document formats (HTML, Markdown, Word, Excel, etc.) into PDF files, and more!
  gotenberg:
    container_name: pl-gotenberg
    image: gotenberg/gotenberg:8
    restart: unless-stopped
    command: ["gotenberg", "--chromium-disable-javascript=true", "--chromium-allow-list=file:///tmp/.*"]
    networks: 
      paperless_backend:
        ipv4_address: 192.168.241.5
    security_opt:
      - no-new-privileges:true
    environment:
      TZ: "Europe/Berlin"

  # Paperless-ngx is a community-supported open-source document management system that transforms your physical documents into a searchable online archive.
  pl_archiv_app:
    container_name: pl-archiv-app
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    restart: unless-stopped
    ports:
      - "8080:8000"
    networks: 
      paperless_frontend:
        ipv4_address: 192.168.240.40
      paperless_backend:
        ipv4_address: 192.168.241.40
    depends_on: 
      postgres: 
        condition: service_healthy 
      redis: 
        condition: service_healthy
    security_opt:
      - no-new-privileges:true
    volumes:
      - /mnt/stacks/paperless/archiv/media:/usr/src/paperless/media:rw # NFS - Mount
      - /mnt/stacks/paperless/archiv/export:/usr/src/paperless/export:rw # NFS - Mount
      - /mnt/stacks/paperless/archiv/trash:/usr/src/paperless/trash:rw # NFS - Mount
      - /mnt/stacks/paperless/archiv/xml:/usr/src/paperless/xml:rw # NFS - Mount
      - /mnt/stacks/paperless/archiv/consume:/usr/src/paperless/consume:rw # NFS - Mount
      - /srv/stacks/paperless/archiv/data:/usr/src/paperless/data:rw # Lokal
      - /srv/stacks/paperless/archiv/tmp:/usr/src/paperless/tmp:rw # Lokal
      # - /srv/portainer_stacks/system/scripts:/usr/src/paperless/scripts # NFS - Mount
      # - /srv/portainer_stacks/system/addons:/usr/src/paperless/addons # NFS - Mount
    environment:
      PAPERLESS_DBHOST: postgres
      PAPERLESS_DBPORT: "5432"
      PAPERLESS_DBNAME: "xxxxxxx"
      PAPERLESS_DBUSER: "xxxxxxx"
      PAPERLESS_DBPASS: "xxxxxxx"
      PAPERLESS_DBENGINE: postgresql

      PAPERLESS_SECRET_KEY: "xxxxxxx"
      # The Celery monitoring tool Flower will be started by the container.
      PAPERLESS_ENABLE_FLOWER: "true"

      # Redis
      PAPERLESS_REDIS: redis://:redispass@pl-redis:6379/0
      PAPERLESS_REDIS_PREFIX: "archiv:"
      PAPERLESS_REDIS_CACHE_TTL: "600"

      # Locale
      PAPERLESS_TIME_ZONE: "Europe/Berlin"

      PAPERLESS_COOKIE_PREFIX: "pl_archiv_"
      PAPERLESS_URL: http://10.11.8.5:8080
      PAPERLESS_ALLOWED_HOSTS: "localhost,127.0.0.1,10.11.8.5"
      PAPERLESS_CSRF_TRUSTED_ORIGINS: "http://10.11.8.5:8080,http://localhost:8080"

      # Worker/Threads
      PAPERLESS_WEBSERVER_WORKERS: "6"
      # PAPERLESS_THREADS_PER_WORKER: "2"
      # PAPERLESS_TASK_WORKERS: "6"
      # PAPERLESS_WORKER_TIMEOUT: "3600"
      
      # Filename und Ort der Datei
      PAPERLESS_FILENAME_FORMAT: "inbox/{{ created_year }}/{{ title|slugify }}"

      # gleiche UID/GID wie auf deiner Syno
      USERMAP_UID: "xxxx"
      USERMAP_GID: "xxx"

      # Pfade ändern im Container
      PAPERLESS_EMPTY_TRASH_DIR: /usr/src/paperless/trash
      PAPERLESS_CONVERT_TMPDIR: /usr/src/paperless/tmp
      XML_ARCHIV_DIR: /usr/src/paperless/xml

      PAPERLESS_EMPTY_TRASH_DELAY: "3650"

      # Tika/Gotenberg Endpoints
      PAPERLESS_TIKA_ENABLED: "true"
      PAPERLESS_TIKA_ENDPOINT: "http://tika:9998"
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: "http://gotenberg:3000"
      
      # Audit LOG
      PAPERLESS_AUDIT_LOG_ENABLED: "true"

      # Integritätsprüfung Dokumente
      PAPERLESS_SANITY_TASK_CRON: "30 0 * * SUN"

      PAPERLESS_CONSUMER_POLLING: "10"   # alle 10s nach neuen Dateien suchen

      # optional:
      PAPERLESS_CONSUMER_IGNORE_PATTERNS: "[\"@eaDir/*\", \"*.DS_Store\", \"\\\\.xml$\"]"
      PAPERLESS_CONSUMER_DELETE_DUPLICATES: "true"
      PAPERLESS_CONSUMER_RECURSIVE: "true"  # falls du Unterordner im consume nutzt
      # zum Debuggen:
      # PAPERLESS_LOGLEVEL: "DEBUG"
      # PAPERLESS_DEBUG: "true"

  und dann habe ich noch eine 2 Paperless Instanz laufen 

Dies ist nun meine erstmal meine jetzige Endlösung
ob ich noch was raus kitzeln kann mit

mem_limit
cpu_shares

wird sich zeigen :slight_smile:

CPU / RAM ne ich brauche ja auch noch Power für andere Sachen aber das Beast hat noch ne Menge Reserve.

Ich sage erstmal Dank an alle die Ideen - (die ich natürlich ausprobiert habe) mit eingeworfen haben.

„Nach Schweiß, Flüchen und Kaffee – läuft!“

Die yml ist aber ganz schön komplex und mir fallen einige Dinge auf, die zumindest in meinen Augen keinen Sinn ergeben. Kann es sein, dass die Config (zumindest in Teilen) KI-generiert ist?

Warum erzeugst du z.B. ein eigenes Backend-Netzwerk für paperless-ngx und mappst redis, DB, etc. darauf?
Würdest du bei diesen Containern gar kein Netzwerk angeben, würde Docker automatisch eines erzeugen, das nur von den anderen Containern aus der YML erreicht werden kann. Also im Grunde genau das, was du auch machst.

Oder sowas wie:

XML_ARCHIV_DIR

Was ist das? In der offiziellen Dokumentation von paperless-ngx gibt es die Umgebungsvariable nicht.

Hi Stefan,

klar wurde es am Anfang in Kombination mit KI ausprobiert - bis man wieder feststellen musste das lesen (Doku, andere Beispiele) mehr bringt. KI ist ich sage was und revidiere meine Aussage :frowning:

Das mit den direkten festlegen der IP-Adressen habe ich aus einer anderen Dokumentation
Du hast recht brauchen tut man dies nicht aber:
Ich wollte die Trennung mit Web/Worker Anwendungen und Service-Stack (Postgres, Redis…)
Klar würde das auch ohne feste IP gehen :: ich bin aber für solche Strukturen zu haben :slight_smile:

Ansonsten ist es klein gehalten -

PAPERLESS_ENABLE_FLOWER
Ich wolle den Celery Monitor benutzen - gerade wegen den Anfangs Problemen

Ansonsten
PAPERLESS_COOKIE_PREFIX
Ist für 2 Instanzen wenn du gleichen Admin(Login) - Session-Cookies würden sich sonst gegenseitig überschreiben

# Sicherheitsmechanismus
PAPERLESS_ALLOWED_HOSTS
PAPERLESS_CSRF_TRUSTED_ORIGINS

# War der ausgebende Punkt mehrere Web-Worker zu starten was sich nun auszahlt
PAPERLESS_WEBSERVER_WORKERS

# Meine Separaten Watcher habe ich nicht gepostet / ich übergebe einen XML Ordner der mir XML Files in PDF umwandelt (XMl-Rechnung zbsp.) funktioniert habe ich hier nur vergessen rauszunehmen - da keine Info drüber geschrieben.
XML_ARCHIV_DIR
Ist eigentlich eine Variable die zuviel ist das hast du recht da ich nicht mit einen pre Script mehr arbeite sondern mit einem separaten Worker

# Audit - hast du recht müsste vom Build her schon true sein
PAPERLESS_AUDIT_LOG_ENABLED

# Wenn mnt auf Syno sollten die Syno generierten Files ignoriert werden
PAPERLESS_CONSUMER_IGNORE_PATTERNS

Also ich glaube ansonsten ist nichts drin was nicht reingehören „könnte“
Wie gesagt klar mit KI kann man starten - das ende ist aber doch lesen - Doku, andere Beispiele und ebbend dieses Forum.

LG Qeib

Ich hab auch irgendwann mal in Frontend und Backend getrennt und es hat keinen Einfluss auf den Betrieb mit deiner Docker-compose aus der Masterclass.

Aber ja ich finde die Config passend zu den Problemen sehr seltsam.

Meine alte Möhre hat das Problem nicht… und Paperless-ngx läuft aber auch nicht in ner VM oder so.

Vmtl. Beißt sich da das eine oder andere, mich würde interessieren wie es nativ unter docker läuft ohne VM.

Wenn da alles läuft kanns ja nur wirklich mehr an welchen Parameter die mit der Vm zusammen hängen.

Hi @IhDuepfe,

ja dies dachte ich ja auch - Syno 4 Kern usw. reicht aus.
Was ich einfach bemerkt habe das bei bis zu 32 Seiten „unterschiedliche“ das Frontend suckt - ich rede nicht vom backend.
Das Anfangs-Problem war einfach nur
Öffnung zur Bearbeitung File lädt gefühlt 5 Min - gleichzeitig hing die Web-Instanz
Dies hatte mich so genervt das ich weiter getestet habe, es gibt ja Beispiele im Netz zuhauf

  • mit nfs
  • direkt ssd
    usw.

Was die Probleme bei mir verursachen könnte - was andere vielleicht schon haben
Scanner => OCR => consume => paperless verarbeitung => erleichterung ocr

Ich habe im moment
Scanner => consume => paperless OCR verarbeitung

Wie gesagt ist mein Problem die
Klick zbsp. => /documents/5564/details => Preview laden - daran scheiterte es oft bei grossen PDF’s
wenn ich es manuell nach Klassifizieren möchte/wollte

natürlich hat er im Hintergrund gerödelt aber gleichzeitig mir auch den WEB-Worker abgeschossen

Also dachte ich es liegt am NFS oder anderem

Ich glaube die Lösung war einfach nur die WEB-Worker zu erhöhen

LG Qeib

Jetzt hats glaub ich klick gemacht.

Weswegen bearbeitest du die PDFs im Paperless-ngx ?… Was machst Du da aus welchem Grund ?

Hast du die Alternativen StirlingPDF oder BentoPdf unter docker mal angeguckt ?

Paperless ist halt nicht primär gedacht zum Bearbeiten/Trennen/Rotieren von Dokumente.

Hi @IhDuepfe ,
na wenn die Klassifizierung nicht richtig hingehauen hat - kann ich doch den Eintrag nacharbeiten.
Tags, Korrespondent, CustomFields usw.

Wenn ich diese Detailseite öffnen - rödelt er ja bei einer PDF mit 30 Seiten und dann ging früher auch kein anderer Webservice mehr.

Dann hab ichs aufgrund der Bilder falsch verstanden.

Dachte du willst Leerseiten entfernen usw.

Die Klassifizierung sollte ohne Probleme bei allen Dokumenten gehen selbst mit OCR.

Ich hatte das Problem noch nie, weder auf der ds918+ unter Debian oder auf meinen Raspberrys.

Muss also tatsächlich an der Config liegen die mit der vm nicht zurecht kommt.

Ich kenn die Config aus der Masterclass aber nicht aus Stefans neuem Ugreen Projekt.

@Stefan gibts in der Config n Unterschied zu der in der Masterclass?

Es gibt noch keine neue Config :wink: Die aus der Masterclass ist bis auf die Pfade 1:1 übertragbar.