Server Linux

Paperless-ngx: eliminare la carta e digitalizzare l'ufficio a costo zero

Nell'era della transizione digitale, professionisti e Piccole e Medie Imprese si trovano ad affrontare una sfida comune: la gestione sommersa di fatture, scontrini, contratti e moduli cartacei. Spesso questi documenti finiscono scansionati in cartelle disorganizzate sul computer, diventando di fatto impossibili da ritrovare nel momento del bisogno. Se desideri riprendere il controllo totale dei tuoi dati senza dipendere da costosi servizi cloud di terze parti, la soluzione definitiva si chiama Paperless-ngx. In questa guida completa vedremo cos'è questo straordinario software di gestione documentale (DMS) open source e come installarlo in modalità self-hosted su un server Ubuntu 24.04 LTS utilizzando Docker Compose.

Cos'è Paperless-ngx e perché sta rivoluzionando l'ufficio digitale

Paperless-ngx è un sistema di gestione documentale self-hosted progettato per trasformare i tuoi documenti fisici in un archivio digitale protetto, centralizzato e interamente ricercabile. A differenza dei tradizionali sistemi di archiviazione basati su cartelle, Paperless-ngx ragiona come un motore di ricerca privato per i tuoi documenti.

Le sue funzionalità di punta includono:

  • OCR Automatico di Livello Professionale: Grazie all'integrazione con il motore Tesseract, ogni documento (anche una foto storta o una scansione di scarsa qualità) viene analizzato. Il testo viene estratto e indicizzato, rendendo il file ricercabile a tutto testo.
  • Classificazione Intelligente: Il sistema integra algoritmi di Machine Learning. Man mano che inserisci e categorizzi i documenti, l'applicazione impara a riconoscere automaticamente il mittente, i tag pertinenti e la tipologia di documento (es. "Fatture", "Contratti").
  • Interfaccia Web Moderna ed Efficiente: Un pannello di controllo pulito, veloce, ottimizzato per dispositivi mobili e dotato di filtri avanzati per trovare qualsiasi foglio in pochi millisecondi.
  • Integrazione con l'Intelligenza Artificiale: Nelle versioni più recenti è possibile connettere modelli di IA (LLM locali o tramite API) per analizzare, riassumere o "chattare" direttamente con il proprio archivio documentale.

Architettura e Prerequisiti del Sistema

Per garantire la massima stabilità e scalabilità, Paperless-ngx si basa su un'architettura robusta suddivisa in container:

  1. Webserver e Worker: Il nucleo dell'applicazione (scritto in Python/Django) che gestisce l'interfaccia e l'elaborazione dei file.
  2. Redis: Utilizzato come broker di messaggi per gestire la coda delle attività in background (come i processi OCR più pesanti).
  3. Database (PostgreSQL o SQLite): Dove vengono salvati i metadati, i tag e le relazioni tra i documenti.

Requisiti Minimi

Per seguire questa guida avrai bisogno di:

  • Una VPS o un server locale con Ubuntu 24.04 LTS configurato.
  • Docker e Docker Compose installati sul sistema.
  • Un utente con privilegi sudo.

Guida Pratica all'Installazione con Docker Compose

Il metodo più pulito e sicuro per distribuire Paperless-ngx è utilizzare Docker Compose. Questo approccio isola l'applicazione e rende gli aggiornamenti futuri estremamente semplici.

1. Preparazione dell'ambiente

Accedi al tuo server tramite SSH e crea una cartella dedicata al progetto nella directory /opt:

sudo mkdir -p /opt/paperless-ngx sudo chown -R $USER:$USER /opt/paperless-ngx cd /opt/paperless-ngx

2. Creazione del file docker-compose.yml

Crea un nuovo file di configurazione utilizzando il tuo editor di testo preferito (ad esempio, Nano):

nano docker-compose.yml

Incolla al suo interno la seguente configurazione ottimizzata, che include il webserver, il database PostgreSQL e Redis:

version: "3.8"

services:

broker: image: docker.io/library/redis:7 restart: unless-stopped volumes: - redisdata:/data db: image: docker.io/library/postgres:16 restart: unless-stopped volumes: - pgdata:/var/lib/postgresql/data environment: POSTGRES_DB: paperless POSTGRES_USER: paperless POSTGRES_PASSWORD: IlTuoPasswordSicuroQui webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest restart: unless-stopped depends_on: - db - broker ports: - "8000:8000" volumes: - ./data:/usr/src/paperless/data - ./media:/usr/src/paperless/media - ./export:/usr/src/paperless/export - ./consume:/usr/src/paperless/consume environment: PAPERLESS_REDIS: redis://broker:6376 PAPERLESS_DBHOST: db PAPERLESS_DBNAME: paperless PAPERLESS_DBUSER: paperless PAPERLESS_DBPASS: IlTuoPasswordSicuroQui PAPERLESS_OCR_LANGUAGE: ita+eng PAPERLESS_TIME_ZONE: Europe/Rome PAPERLESS_URL: http://tuo-ip-server:8000 volumes: pgdata: redisdata:

 

Nota: Ricordati di sostituire IlTuoPasswordSicuroQui con una password robusta e personalizzata.

3. Avvio dei container

Salva il file (Ctrl+O e poi Invio in Nano) ed esci (Ctrl+X). Avvia l'infrastruttura in background digitando:

docker compose up -d

Docker scaricherà le immagini necessarie e avvierà i servizi. Puoi verificare che tutto sia attivo con il comando docker compose ps.

4. Creazione dell'utente Amministratore

Prima di accedere all'interfaccia web, devi creare il tuo account superuser. Esegui il comando seguente all'interno del container del webserver:

bash

docker compose run --rm webserver createsuperuser

Usa il codice con cautela.

Inserisci il nome utente, l'indirizzo email e la password richiesta seguendo le istruzioni a schermo.

Gestione Avanzata: Integrare i Documenti Office (Word, Excel, PowerPoint) con Apache Tika

Di base, Paperless-ngx gestisce nativamente file PDF e formati immagine standard (PNG, JPEG, WebP). Tuttavia, in un contesto aziendale o professionale, è fondamentale poter archiviare e rendere ricercabili anche i classici documenti d'ufficio come file Word (.docx), fogli di calcolo Excel (.xlsx) o presentazioni PowerPoint (.pptx), oltre ai formati open source di LibreOffice (.odt, .ods).

Per fare questo, Paperless-ngx si appoggia ad Apache Tika, un motore esterno specializzato nell'estrazione di metadati e testo da oltre un migliaio di tipi di file diversi.

1. Modificare il file docker-compose.yml

Per attivare questa funzionalità, dobbiamo aggiungere un nuovo servizio (un container dedicato a Tika) e configurare le variabili d'ambiente nel container del webserver.

Apri nuovamente il tuo file di configurazione:

nano docker-compose.yml

Modifica il file inserendo il container di Tika e aggiornando le variabili del webserver in questo modo:

version: "3.8" services: broker: image: docker.io/library/redis:7 restart: unless-stopped volumes: - redisdata:/data db: image: docker.io/library/postgres:16 restart: unless-stopped volumes: - pgdata:/var/lib/postgresql/data environment: POSTGRES_DB: paperless POSTGRES_USER: paperless POSTGRES_PASSWORD: IlTuoPasswordSicuroQui # --- NUOVO SERVIZIO APACHE TIKA --- tika: image: ghcr.io/paperless-ngx/tika:latest restart: unless-stopped webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest restart: unless-stopped depends_on: - db - broker - tika # Aggiunto come dipendenza ports: - "8000:8000" volumes: - ./data:/usr/src/paperless/data - ./media:/usr/src/paperless/media - ./export:/usr/src/paperless/export - ./consume:/usr/src/paperless/consume environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBNAME: paperless PAPERLESS_DBUSER: paperless PAPERLESS_DBPASS: IlTuoPasswordSicuroQui PAPERLESS_OCR_LANGUAGE: ita+eng PAPERLESS_TIME_ZONE: Europe/Rome PAPERLESS_URL: http://tuo-ip-server:8000 # --- VARIABILI PER L'INTEGRAZIONE TIKA --- PAPERLESS_TIKA_ENABLED: 1 PAPERLESS_TIKA_ENDPOINT: http://tika:9998 volumes: pgdata: redisdata:

2. Applicare le modifiche ed eseguire l'aggiornamento

Salva il file ed esci da Nano (Ctrl+O, Invio, Ctrl+X). Per applicare la nuova configurazione e avviare il container di Apache Tika in background, esegui semplicemente:

docker compose up -d

Docker si occuperà di scaricare l'immagine di Tika, avviarla e ricreare il container del webserver applicando le nuove variabili d'ambiente, il tutto senza perdere alcun dato precedentemente salvato.

Come funziona all'atto pratico?

Una volta attivata questa integrazione, potrai trascinare un file .docx o .xlsx nella dashboard (o inserirlo nella cartella di consumo).

  1. Il webserver intercetta il file Office e lo invia temporaneamente al container Apache Tika.
  2. Tika estrae in chiaro tutto il testo contenuto nel documento.
  3. Paperless-ngx riceve il testo estratto, lo indicizza nel motore di ricerca globale e lo rende pronto per essere catalogato tramite i tag intelligenti, esattamente come se fosse un normale PDF sottoposto a OCR.

Configurazione dei Flussi di Lavoro (Workflow)

Ora che il sistema è attivo, apri il browser e collegati all'indirizzo http://IP-DEL-TUO-SERVER:8000. Inserisci le credenziali create al punto precedente per accedere alla dashboard.

Per automatizzare davvero l'ufficio, sfrutteremo la Cartella di Consumo (Consumption Directory). Nella configurazione Docker sopra indicata, abbiamo mappato la cartella ./consume.

  • Ogni file PDF, PNG o JPEG che viene inserito all'interno di quella cartella sul server verrà automaticamente importato, elaborato tramite OCR, indicizzato ed eliminato dalla cartella di origine.
  • Suggerimento utile: Puoi collegare questa cartella a uno scanner di rete aziendale (tramite protocollo SMB/FTP) o a un servizio di sincronizzazione file locale. In questo modo, ti basterà fare una scansione dal dispositivo fisico per ritrovarti il documento già catalogato sul pannello web.

Sicurezza e Strategie di Backup

Dato che Paperless-ngx conterrà documenti sensibili (dati fiscali, contratti, informazioni personali), la sicurezza deve essere una priorità.

  1. Gestione dei file fisici: Paperless-ngx non nasconde i tuoi file in database proprietari. Tutti i documenti originali e i PDF convertiti dall'OCR rimangono accessibili in chiaro nelle cartelle ./media/documents/originals/ e ./media/documents/archive/. Questo significa che, anche in caso di guasto del software, i tuoi dati rimangono intatti e leggibili.
  2. Strategia di Backup: Per mettere al sicuro l'intero archivio, è fondamentale pianificare un backup regolare della cartella del progetto (/opt/paperless-ngx) che contenga sia i file multimediali che i volumi del database PostgreSQL. Un semplice script cron che genera un archivio compresso e lo sposta su un archivio esterno o NAS è la soluzione ideale.

Script di Backup Automatizzato (PostgreSQL + Documenti)

Per evitare qualsiasi perdita di dati in caso di guasto hardware, è fondamentale implementare una strategia di backup automatico. Non basta copiare i file: è necessario eseguire un dump corretto del database a caldo per evitare file corrotti.

Crea un file di script sul server, ad esempio in /opt/paperless-ngx/backup.sh:

nano /opt/paperless-ngx/backup.sh

Incolla il seguente script Bash professionale, personalizzando il percorso di destinazione (BACKUP_DIR):

#!/bin/bash # --- CONFIGURAZIONE --- TARGET_DIR="/opt/paperless-ngx" BACKUP_DIR="/var/backups/paperless" # Cambia con il tuo percorso (es. un disco esterno o mount NAS) DATE=$(date +%Y%m%d_%H%M%S) BACKUP_NAME="paperless_backup_$DATE" RETENTION_DAYS=7 # Creazione della cartella di backup se non esiste mkdir -p "$BACKUP_DIR" echo "=== Inizio Backup Paperless-ngx: $(date) ===" # 1. Dump del Database PostgreSQL a caldo echo "Esecuzione del dump del database..." docker compose -f "$TARGET_DIR/docker-compose.yml" exec -T db pg_dump -U paperless -d paperless > "$BACKUP_DIR/db_dump_$DATE.sql" # 2. Creazione dell'archivio compresso (.tar.gz) dei documenti e dei dati echo "Archiviazione dei file multimediali e delle configurazioni..." tar -czf "$BACKUP_DIR/$BACKUP_NAME.tar.gz" \ -C "$TARGET_DIR" media data docker-compose.yml \ -C "$BACKUP_DIR" "db_dump_$DATE.sql" # Rimozoine del file SQL temporaneo fuori dal tar rm "$BACKUP_DIR/db_dump_$DATE.sql" # 3. Rotazione dei backup vecchi (Mantenimento degli ultimi X giorni) echo "Pulizia dei vecchi backup (più vecchi di $RETENTION_DAYS giorni)..." find "$BACKUP_DIR" -type f -name "paperless_backup_*.tar.gz" -mtime +$RETENTION_DAYS -exec rm {} \; echo "=== Backup completato con successo: $(date) ==="

Rendi lo script eseguibile con il seguente comando:

chmod +x /opt/paperless-ngx/backup.sh

Automazione tramite Cron

Per eseguire questo script in modo completamente automatico ogni notte alle ore 02:00, apri il pianificatore di sistema (Crontab) di root:

sudo crontab -e

Aggiungi la seguente riga in fondo al file:

0 2 * * * /opt/paperless-ngx/backup.sh >> /var/log/paperless_backup.log 2>&1

In questo modo, ogni giorno il sistema genererà un singolo file compresso contenente tutto il tuo archivio e manterrà una cronologia degli ultimi 7 giorni, salvando eventuali errori nel file di log dedicato.

Conclusioni

Paperless-ngx non è solo uno strumento di archiviazione, ma un vero e proprio alleato per la produttività aziendale e personale. Con zero costi di licenza e il controllo totale dell'infrastruttura su un server Ubuntu proprietario, rappresenta la scelta perfetta per chiunque voglia eliminare il disordine della carta nel rispetto della massima privacy.



Related Articles