---
okf: "0.1"
type: decision
visibility: private
status: active
updated: 2026-07-09
links:
  - ../services/paperless.md
  - ../runbooks/paperless-cutover.md
---

# Paperless — decyzja: split OCR serwis@PIHA + worker@SOLARIA

## Split OCR: serwis@PIHA + worker@SOLARIA (wynik badania)

Rozproszony worker **nie jest oficjalnie wspierany** przez Paperless-ngx, ale
jest wykonalny i potwierdzony przez maintainerów (GH discussion #3900): drugi
host odpala ten sam obraz z `command: celery --app paperless worker` i musi
widzieć **ten sam Redis, tego samego Postgresa i te same pliki**. Stąd:

- storage dokumentów leży na PIHA (bind mounty `/opt/homelab/data/paperless/*`)
  i jest eksportowany przez **NFS po LAN** (nie Tailscale) do SOLARII;
- ścieżki w kontenerze (`/usr/src/paperless/{data,media,consume}`) muszą być
  **identyczne** po obu stronach — payloady zadań i DB niosą ścieżki absolutne;
- pliki mają właściciela **numerycznego UID 1000** (`USERMAP_UID/GID=1000`
  po obu stronach) — NFS przenosi numeryczne ID, nie nazwy;
- wbudowany worker na PIHA (nie da się go wyłączyć w stockowym obrazie) działa
  jako wolny fallback, gdy SOLARIA śpi; zadania czekają w Redis (AOF włączone,
  restart brokera nie gubi kolejki).

Szczegóły NFS (export na PIHA, mount na SOLARIA, ryzyko indeksu Whoosh) —
`services/paperless-worker/README.md`.

