homelab-codex-ws/docs/sessions/2026-07-12-deploy2-ocr-worker.md

2.9 KiB

Sesja 2026-07-12 — Deploy 2: split-host OCR-worker (DZIALA) + decyzja kierunku KB

Deploy 2 — OCR-worker na SOLARIA przez NFS: DZIALA end-to-end

Najtrudniejsza technicznie czesc KB (wzorzec nieoficjalnie wspierany, GH #3900) — przeszla.

NFS

  • nfs-kernel-server JUZ byl na PIHA (aktywny, export /media/pimain istnial).
  • Dodany export: /opt/homelab/data/paperless 192.168.31.70(rw,sync,no_subtree_check,no_root_squash) — tylko SOLARIA (nie *), UID przechodza 1:1.
  • UID: oskar=1004 na PIHA, 1000 na SOLARII (znany tech-debt floty), ALE pliki Paperlessa sa 1000:1000 (kontener nadpisal nasz chown 1004) — wiec zgodnosc naturalna, bez squash.
  • nfs-common na SOLARII byl. Docker-managed NFS volumes (driver local, type nfs) — zero fstab.

Dwa bugi w configu (znalezione, naprawione, zweryfikowane)

  1. command nie odpalal celery. Entrypoint obrazu: if [[ "$1" != "/"* ]]; then exec gosu paperless python3 manage.py "$@"; else exec "$@"; fi — argument bez "/" idzie do manage.py -> "Unknown command: 'celery'". FIX: sciezka absolutna + jawny gosu: command: /usr/sbin/gosu paperless /usr/local/bin/celery --app paperless worker ...
  2. Brak wspoldzielonego SCRATCH. Paperless@PIHA stage'uje upload w /tmp/paperless/tmpXXX i niesie ABSOLUTNA sciezke w payloadzie celery. Worker@SOLARIA mial swoj lokalny /tmp -> "Cannot consume ...: File not found" (czesc dokumentow padala — te ktore wzial SOLARIA). FIX: /opt/homelab/data/paperless/scratch przez NFS, mount /tmp/paperless po OBU stronach. Ta sama zasada co data/media/consume (identyczne sciezki kontenerowe) — scratch zostal pominiety.

Dowod (test na zywo, CC)

3 PDF do consume/ na PIHA. split-host-test-2.pdf odebrany przez worker@SOLARIA: "pdftotext exited 0 -> ocrmypdf -> Output file is a PDF/A-2B; ConsumeTaskPlugin completed: Success. New document id 7 created". Zero "File not found". Wlasnosc pi:pi (1000) na NFS. Dokumenty testowe posprzatane, produkcyjne 6 nietkniete.

DECYZJA KIERUNKU (wazna)

Nie lancuch importow, tylko pionowy plaster: jeden import probki -> warstwa uzytkowa. Kolejnosc: (1) import probki zalacznikow z maili -> Paperless (jego OCR+correspondent-detection, NIE osobny pipeline), (2) MODUL 5: koperta w kb-postgres (Paperless=REFERENCJA doc-id, Nextcloud=KOPIA) + embeddingi bge-m3 -> pgvector + cross-source link (correspondent <-> nadawca maila = ta sama encja, DOWOD zasady kb-00 #7), (3) interfejs pytan (RAG) — pierwszy moment realnej uzytecznosci. Dopiero POTEM dopelniac importy (reszta Takeout, zdjecia, transakcje).

TODO nastepne

  • MODUL 5 (koperta + ingest + embeddingi + cross-source) — docs/kb/modules/05-documents-ingest.md
  • Import probki zalacznikow z maili (kilkaset, nie 70k) — do zbudowania RAG
  • Interfejs pytan / RAG — warstwa uzytkowa
  • Deploy 3 (Nextcloud), Deploy 4 (Gokapi) — configi gotowe, czekaja
  • Google Takeout — zamowic selektywnie, PO zbudowaniu warstwy uzytkowej