Ghid · 35 de minute · Debian · Ubuntu
Arhivă de documente cu Paperless-ngx
Paperless-ngx ia un PDF scanat, îi citește textul cu OCR, îl clasifică și îl face căutabil. Odată pornit, fluxul e simplu: arunci fișierul într-un director, iar peste un minut îl găsești după orice cuvânt din el.
Ai nevoie de
- Un VPS securizat, cu Docker și Docker Compose
- Un domeniu, dacă vrei acces din afara rețelei tale
- Disc: documentele originale plus versiunile cu text, deci socotește dublu
- 01
Înțelege unde se duce puterea de calcul
Interfața și căutarea sunt ieftine. OCR-ul e scump: la fiecare document nou, Tesseract parcurge fiecare pagină și extrage textul. Un teanc de o sută de pagini scanate ține procesorul ocupat câteva minute bune.
Consecința practică: dimensionezi după cât de des adaugi documente, nu după câte ai deja. O arhivă de zece mii de documente deja procesate consumă mai puțin decât una de o sută în care torni zilnic scanuri noi.
- 02
Scrie configurația, cu limba potrivită
PAPERLESS_OCR_LANGUAGE decide calitatea recunoașterii. Pentru documente românești, ron. Dacă ai și documente în engleză, ron+eng: Tesseract încearcă ambele.
PAPERLESS_URL trebuie să fie adresa reală, altfel interfața respinge cererile ca provenind de la o origine necunoscută.
PAPERLESS_SECRET_KEY se generează o dată. Schimbarea lui invalidează sesiunile existente.
.env DOMENIU=documente.domeniul-tau.ro PAPERLESS_URL=https://documente.domeniul-tau.ro PAPERLESS_SECRET_KEY=$(openssl rand -base64 48) PAPERLESS_OCR_LANGUAGE=ron+eng PAPERLESS_TIME_ZONE=Europe/Bucharest POSTGRES_PASSWORD=$(openssl rand -base64 24)AtențiePachetul de limbă română trebuie să existe în imagine. Dacă OCR-ul întoarce text fără diacritice sau cu litere sărite, prima verificare e PAPERLESS_OCR_LANGUAGE, nu calitatea scanului.
- 03
Compune serviciile
Cinci servicii: aplicația, Postgres, Redis pentru coada de sarcini, plus Gotenberg și Tika dacă vrei să indexezi și documente Office, nu doar PDF-uri.
Dacă nu ai documente Word sau Excel de arhivat, scoate ultimele două și economisești câteva sute de MB de memorie.
docker-compose.yml services: broker: image: redis:alpine restart: unless-stopped db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: paperless POSTGRES_USER: paperless POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: [pgdata:/var/lib/postgresql/data] webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest restart: unless-stopped depends_on: [db, broker, gotenberg, tika] environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBPASS: ${POSTGRES_PASSWORD} PAPERLESS_URL: ${PAPERLESS_URL} PAPERLESS_SECRET_KEY: ${PAPERLESS_SECRET_KEY} PAPERLESS_OCR_LANGUAGE: ${PAPERLESS_OCR_LANGUAGE} PAPERLESS_TIME_ZONE: ${PAPERLESS_TIME_ZONE} PAPERLESS_TIKA_ENABLED: 1 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000 volumes: - data:/usr/src/paperless/data - media:/usr/src/paperless/media - ./consum:/usr/src/paperless/consume - ./export:/usr/src/paperless/export gotenberg: image: gotenberg/gotenberg:8 restart: unless-stopped command: ["gotenberg", "--chromium-disable-javascript=true"] tika: image: docker.io/apache/tika:latest restart: unless-stopped caddy: image: caddy:alpine restart: unless-stopped ports: ["80:80", "443:443"] volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy:/data depends_on: [webserver] volumes: pgdata: data: media: caddy: - 04
Pornește și creează utilizatorul
Prima pornire durează: se descarcă imaginile și se rulează migrările. Utilizatorul de administrare se creează dintr-o comandă, nu din interfață.
mkdir -p consum export cat > Caddyfile <<'EOF' {$DOMENIU} { reverse_proxy webserver:8000 } EOF docker compose up -d docker compose logs -f webserver docker compose exec webserver createsuperuser - 05
Aruncă primul document în directorul de consum
Tot ce pui în directorul consum e preluat automat, procesat și mutat în arhivă. Nu trebuie să încarci nimic din interfață.
De aici încolo poți lega directorul la orice: un scaner de rețea care scrie prin SMB, un rsync de pe alt calculator, un flux de mail.
cp factura.pdf consum/ docker compose logs -f webserver | grep -i consum - 06
Lasă-l să învețe clasificarea
Paperless are două mecanisme. Regulile de potrivire sunt explicite: dacă textul conține „Enel", corespondentul e Enel. Clasificarea automată învață din documentele pe care le-ai etichetat deja.
Tiparul care merge: etichetezi manual primele douăzeci de documente dintr-o categorie, apoi lași clasificatorul să preia. Sub acest prag, ghicește prost și te enervează.
Corespondenți cine a emis documentul (furnizor, bancă, instituție) Tipuri factură, contract, chitanță, decizie Etichete orice altceva: an fiscal, proiect, „de plătit" Setări → Regule de potrivire: Tip potrivire : „conține unul dintre" pentru cuvinte-cheie „automat" după ce ai destule exemple - 07
Testează exportul, ca să știi că poți pleca
document_exporter scoate toate documentele, cu metadatele lor, într-o structură pe care o poți citi fără Paperless. E și backup, și asigurare împotriva blocării într-un singur produs.
Rulează-l acum, cu trei documente înăuntru, ca să vezi ce produce.
docker compose exec webserver document_exporter ../export ls -la export/ # în cron, zilnic, apoi arhiva pleacă de pe server 0 4 * * * cd /srv/paperless && docker compose exec -T webserver document_exporter ../export
Întrebări frecvente
+Ce VPS îmi trebuie pentru Paperless-ngx?
Cu Gotenberg și Tika pornite, 4 GB de memorie e un punct de pornire rezonabil. Fără ele, 2 GB ajung. Procesorul contează la OCR: cu 2 vCPU procesezi un teanc de scanuri lent dar sigur, cu 4 vCPU se termină de câteva ori mai repede.
+OCR-ul greșește diacriticele.
Verifică întâi PAPERLESS_OCR_LANGUAGE: trebuie să conțină ron. Apoi calitatea scanului: sub 300 dpi, Tesseract confundă sistematic literele cu semne diacritice. Rescanarea la 300 dpi rezolvă mai mult decât orice setare.
+Documentele originale se păstrează?
Da. Paperless păstrează fișierul original și creează separat o versiune cu stratul de text adăugat. De asta socotești discul dublu față de dimensiunea arhivei tale.
+Pot să plec cu datele mele?
Da, și merită testat înainte să ai nevoie. document_exporter produce documentele plus metadatele într-o formă citibilă fără Paperless. Rulează-l o dată acum, ca să știi ce obții.