Sari la conținut
servervps.roPanou client

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
  1. 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.

  2. 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.

  3. 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:
  4. 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
  5. 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
  6. 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
  7. 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.