Backup & Ripristino
Protezione dati, salvataggio periodico, ripristino e migrazione tra workspace
Riferimenti normativi
- Art. 2220 Codice Civile — Conservazione delle scritture contabili: Le scritture contabili devono essere conservate per dieci anni dalla data dell'ultima registrazione. I backup del database garantiscono la disponibilità dei dati in caso di guasto o perdita.
- DM 17 giugno 2014 — Conservazione sostitutiva: I documenti informatici rilevanti ai fini fiscali devono essere conservati in modo da garantirne autenticità, integrità, affidabilità, leggibilità e reperibilità. Il backup è complementare alla conservazione sostitutiva.
- GDPR (Reg. UE 2016/679) art. 32 — Sicurezza del trattamento: Il titolare del trattamento deve mettere in atto misure tecniche e organizzative adeguate, tra cui “la capacità di ripristinare tempestivamente la disponibilità e l'accesso dei dati personali in caso di incidente fisico o tecnico”.
- GDPR art. 5 c.1 lett. f — Integrità e riservatezza: I dati personali devono essere trattati in maniera da garantire un'adeguata sicurezza, compresa la protezione dalla perdita mediante misure tecniche appropriate (backup).
- D.Lgs. 196/2003 (Codice Privacy) art. 33-34 — Misure minime di sicurezza: Obbligo di adottare procedure per la custodia di copie di sicurezza e per il ripristino della disponibilità dei dati e dei sistemi (All. B, regola 18: backup almeno settimanale).
- D.Lgs. 82/2005 (CAD) art. 50-bis — Continuità operativa: Le pubbliche amministrazioni e le imprese che trattano dati pubblici devono predisporre piani di continuità operativa e disaster recovery, includendo procedure di backup e ripristino.
- Art. 22 DPR 600/73 — Tenuta e conservazione delle scritture: Le scritture contabili obbligatorie devono essere conservate fino a quando non siano definiti gli accertamenti relativi al corrispondente periodo d'imposta (minimo 5 anni dall'ultimo esercizio, estensibili a 7 in caso di accertamento).
- Provv. Garante Privacy 27/11/2008 — Amministratori di sistema: I titolari devono adottare sistemi idonei alla registrazione degli accessi logici ai sistemi e alla protezione dei dati, inclusa la gestione dei backup e dei relativi log.
Il modulo Backup & Ripristino consente di proteggere i dati aziendali creando copie di sicurezza del database e di ripristinarli in caso di necessità.
Ogni workspace ha il proprio archivio backup separato. Il sistema supporta sia backup manuali (su richiesta) che automatici (programmati).
Funzionalità principali
- Backup manuale: genera un dump SQL compresso del database del workspace corrente
- Ripristino: riporta il database a un punto nel tempo selezionando un backup dall'archivio
- Importazione: carica un file di backup esterno (da altro workspace o altro sistema)
- Download: scarica un backup sul proprio computer per conservazione esterna
- Rinomina: assegna nomi descrittivi ai backup per facilitarne l'identificazione
- Backup automatico: programmazione giornaliera, settimanale o mensile con retention configurabile
- Notifiche email: avvisi automatici in caso di successo o errore
- Multi-workspace: ogni ambiente ha backup indipendenti; l'archivio mostra il workspace attivo
La schermata è divisa in tre aree principali:
1. Barra strumenti (in alto)
- Importa Backup (pulsante arancione): apre il selettore file per caricare un backup esterno
- Backup Manuale (pulsante blu): avvia la creazione di un nuovo backup
- Durante l'esecuzione, i pulsanti si disabilitano e mostrano “in corso...”
2. Configurazione Backup Automatico
Card con i parametri di programmazione: frequenza, orario, retention, notifiche. Pulsante Salva che si attiva solo quando ci sono modifiche non salvate.
3. Archivio Backup
Tabella con l'elenco di tutti i backup del workspace corrente. Il titolo mostra: “Archivio Backup — {nome workspace} (N)”.
| Colonna | Contenuto |
|---|---|
| Nome file | Nome del backup, modificabile con doppio clic o icona matita |
| Data | Data e ora di creazione (formato DD/MM/YYYY HH:mm) |
| Dimensione | Peso del file (B, KB, MB, GB) |
| Tipo | Badge: AUTOMATICO (programmato) o MANUALE (su richiesta) |
| Stato | Badge colorato: COMPLETATO (verde), IN CORSO (blu), ERRORE (rosso) |
| Workspace | Nome del workspace di appartenenza |
| Azioni | Pulsanti: Scarica, Ripristina, Elimina (visibili solo per backup completati) |
- Verificare di essere nel workspace corretto: il nome è visibile nel titolo dell'archivio e nella topbar.
- Premere il pulsante “Backup Manuale” (blu) nella barra strumenti.
- Il pulsante si disabilita e mostra “Backup in corso...” con un'icona di caricamento.
- Il sistema genera un dump SQL completo del database corrente (con
pg_dump --no-owner --no-privileges --clean --if-exists). - Il file viene compresso in formato
.sql.gze salvato nell'archivio del server. - Al completamento, appare il messaggio “Backup completato con successo” in verde.
- Il nuovo backup appare in cima alla lista con stato COMPLETATO e tipo MANUALE.
Per salvare una copia del backup sul proprio computer:
- Nella lista archivio, individuare il backup desiderato (stato COMPLETATO).
- Premere l'icona Scarica (freccia verso il basso) nella colonna Azioni.
- Il browser avvia il download del file con il nome originale (es.
backup_20260413_020000.sql.gz). - Conservare il file scaricato in un luogo sicuro (disco esterno, cloud, NAS).
Il ripristino riporta il database del workspace corrente allo stato in cui era al momento del backup selezionato.
- Nella lista archivio, individuare il backup da ripristinare.
- Premere l'icona Ripristina (icona orologio/freccia) nella colonna Azioni.
- Si apre una modale di conferma che mostra:
- Nome del file backup in font monospace
- Nome del workspace di destinazione evidenziato in rosso e in grande
- Avviso: “Il database attuale verrà completamente sovrascritto”
- Premere “Conferma Ripristino” per procedere, oppure “Annulla” per tornare indietro.
- Il sistema esegue: DROP SCHEMA CASCADE → ripristino dal file → ricostruzione indici.
- Al completamento, appare il messaggio: “Ripristino completato. Ricaricare la pagina.”
- Ricaricare la pagina (F5) per vedere i dati ripristinati.
L'importazione consente di caricare un file di backup proveniente da un altro workspace, un altro server o un altro sistema gestionale.
- Premere il pulsante “Importa Backup” (arancione) nella barra strumenti.
- Si apre il selettore file del sistema operativo. Selezionare un file nei formati supportati:
.sql,.gz,.sql.gz,.dump. - Si apre una modale di conferma che mostra:
- Nome del file selezionato in font monospace
- Nome del workspace di destinazione evidenziato in rosso
- Avviso: “Il database attuale verrà completamente sovrascritto”
- Premere “Conferma Importazione” per caricare il file.
- Il pulsante mostra “Importazione...” durante il caricamento e l'elaborazione.
- Il sistema carica il file, cancella lo schema corrente e ripristina dal file importato.
- Al completamento: “Backup importato e ripristinato con successo. Ricaricare la pagina.”
- Ricaricare la pagina (F5) per vedere i dati importati.
Casi d'uso dell'importazione
- Migrazione tra workspace: scaricare un backup dal workspace sorgente, importarlo nel workspace di destinazione
- Migrazione da altro server: portare un database da un'installazione NOX a un'altra
- Ripristino da copia locale: reimportare un backup precedentemente scaricato sul proprio PC
- Test: importare dati di produzione in un workspace di test (nascosto) per verifiche
I backup generati automaticamente hanno nomi tecnici (es. backup_20260413_020000.sql.gz). È possibile rinominarli con nomi descrittivi per facilitarne l'identificazione.
- Nella lista archivio, fare doppio clic sul nome del file, oppure premere l'icona matita (visibile al passaggio del mouse).
- Il nome diventa un campo di input modificabile in font monospace.
- Digitare il nuovo nome descrittivo (es.
Pre-aggiornamento_v2.1,Chiusura_trimestre_Q1). - Premere il segno di spunta verde per confermare, oppure la X rossa per annullare.
- In alternativa:
Enterper confermare,Escper annullare.
- Nella lista archivio, premere l'icona Elimina (cestino) sulla riga del backup.
- Appare una finestra di conferma con il nome del file.
- Premere “OK” per eliminare definitivamente, oppure “Annulla”.
- Il backup viene rimosso dall'archivio e dal server.
La card “Configurazione Backup Automatico” permette di programmare i backup senza intervento manuale.
Parametri configurabili
| Parametro | Opzioni | Default | Descrizione |
|---|---|---|---|
| Abilitato | Sì / No | Sì | Attiva/disattiva i backup programmati |
| Frequenza | Giornaliero, Settimanale, Mensile | Giornaliero | Ogni quanto eseguire il backup |
| Ora esecuzione | HH:MM | 02:00 | Orario di avvio (si consiglia orario notturno) |
| Giorno settimana | Domenica–Sabato | — | Solo per frequenza settimanale |
| Giorno mese | 1–28 | — | Solo per frequenza mensile (max 28 per evitare mesi corti) |
| Retention (giorni) | 1–365 | 30 | I backup più vecchi della retention vengono eliminati automaticamente |
| Email notifiche | — | Indirizzo per le notifiche | |
| Notifica errori | Sì / No | Sì | Invia email se il backup fallisce |
| Notifica successo | Sì / No | No | Invia email anche quando il backup riesce |
Come configurare
- Attivare la checkbox “Backup automatico abilitato”.
- Selezionare la frequenza desiderata.
- Impostare l'ora di esecuzione (consigliato: tra le 01:00 e le 05:00 quando il sistema è meno utilizzato).
- Se frequenza settimanale: scegliere il giorno della settimana.
- Se frequenza mensile: scegliere il giorno del mese (1–28).
- Impostare i giorni di retention (quanti giorni conservare i backup prima dell'eliminazione automatica).
- Inserire l'email per le notifiche e scegliere quali notifiche ricevere.
- Premere “Salva Configurazione” (il pulsante si attiva solo quando ci sono modifiche).
NOX supporta ambienti multipli (workspace), ciascuno con il proprio database indipendente. Il modulo Backup rispetta questa separazione:
- L'archivio mostra solo i backup del workspace attualmente selezionato
- Il backup manuale genera un dump del database del workspace corrente
- Il ripristino e l'importazione operano sul database del workspace corrente
- La configurazione automatica è indipendente per workspace
- Il nome del workspace è sempre visibile nel titolo dell'archivio e nelle modali di conferma
Migrare dati tra workspace
- Selezionare il workspace sorgente dalla topbar.
- Eseguire un Backup Manuale o individuare un backup esistente.
- Premere Scarica per salvare il file sul PC.
- Selezionare il workspace di destinazione dalla topbar.
- Premere Importa Backup e caricare il file scaricato.
- Confermare nella modale (verificare che il nome workspace sia quello corretto).
Formati accettati per l'importazione
| Estensione | Formato | Descrizione |
|---|---|---|
.sql | SQL plain text | Dump SQL non compresso. Può essere aperto e letto con un editor di testo. |
.sql.gz | SQL compresso Gzip | Dump SQL compresso. Formato standard generato dal sistema. Occupa meno spazio. |
.gz | Gzip generico | File compresso Gzip. Il sistema assume che contenga un dump SQL. |
.dump | PostgreSQL dump | Formato nativo pg_dump. Compatibile con ripristino diretto. |
Formato generato dal sistema
I backup creati da NOX (manuali e automatici) sono in formato .sql.gz generati con:
pg_dumpcon flag--no-owner --no-privileges --clean --if-exists- Compressione Gzip per ridurre lo spazio occupato
- Contiene l'intero schema del database (tabelle, dati, indici, vincoli)
Strategia 3-2-1
La strategia di backup raccomandata è la regola 3-2-1:
- 3 copie dei dati (originale + 2 backup)
- 2 supporti diversi (server + disco esterno o cloud)
- 1 copia off-site (fuori dalla sede, per protezione da incendi, furti, calamità)
Prima di operazioni critiche
Eseguire sempre un backup manuale prima di:
- Aggiornamenti del software (frontend o backend)
- Migrazioni di database (Prisma push/migrate)
- Importazioni massive (Import/Export)
- Operazioni di pulizia dati (cancellazione soggetti, documenti)
- Cambio workspace o riassegnazione utenti
Verifica periodica dei backup
- Scaricare periodicamente un backup e verificare che il file non sia corrotto (aprire con un editor di testo o provare a importare in un workspace di test)
- Controllare che i backup automatici vengano effettivamente generati (verificare date e dimensioni nell'archivio)
- Attivare le notifiche email per errori
Retention consigliata
| Scenario | Frequenza | Retention | Motivazione |
|---|---|---|---|
| Micro-impresa / Studio | Giornaliero | 30 giorni | Copre un mese di lavoro |
| PMI / Commercio | Giornaliero | 90 giorni | Copre un trimestre fiscale |
| Azienda strutturata | Giornaliero | 365 giorni | Copre un esercizio completo |
| Dati sensibili / GDPR | Giornaliero | 365 giorni | Conformità art. 32 GDPR + conservazione scritture |
Il modulo Backup è stato esteso con uno scheduler automatico server-side e supporto multi-workspace nativo.
Scheduler automatico (node-cron)
Il backup automatico è ora gestito da un job node-cron lato server che gira 24/7. L'orario è configurabile dalla UI (campo Orario esecuzione, default 02:00). La pianificazione sopravvive ai riavvii del server.
Multi-workspace automatico
Ad ogni esecuzione il sistema esegue pg_dump:
- sul database principale (utenti, workspace, log)
- su ogni workspace attivo (pazienti, documenti, catalogo, ecc.)
I file sono salvati in directory dedicate per workspace, con il timestamp nel nome.
Retention automatica
Il sistema elimina automaticamente i backup più vecchi del periodo configurato (campo Giorni di conservazione). La retention viene applicata a fine job, dopo il dump.
Frequenze supportate
| Frequenza | Configurazione | Cron equivalente |
|---|---|---|
| GIORNALIERO | Orario HH:MM | MM HH * * * |
| SETTIMANALE | Giorno settimana + orario | MM HH * * G |
| MENSILE | Giorno mese + orario | MM HH D * * |
backend/routes/backup.routes.js. La configurazione è salvata su Parametri e ricaricata ad ogni modifica senza riavvio del server.
Da Maggio 2026 NOX supporta un nuovo flusso di backup automatico locale che salva i file direttamente su una cartella del computer dell'utente, oltre che sul server. Combina robustezza centralizzata e disponibilità offline.
Come funziona
- Vai in Backup & Ripristino → Configurazione Backup Automatico
- Attiva il checkbox «Salva anche su cartella locale»
- Click su «Scegli cartella...» — il browser apre il selettore nativo (File System Access API)
- Seleziona la cartella di destinazione (es.
~/Documents/NOX-Backup/o un disco esterno NAS sincronizzato) - Concedi i permessi di scrittura quando richiesto dal browser
- NOX memorizza il handle della cartella in IndexedDB per riutilizzarlo nei backup successivi senza richiedere di nuovo i permessi
Comportamento
- Ad ogni backup automatico server-side, NOX scarica una copia in parallelo sulla cartella locale scelta
- I file sono nominati con timestamp per evitare sovrascritture:
nox-backup-{workspace}-{YYYYMMDD-HHMMSS}.dump - Se la cartella locale non è più raggiungibile (disco esterno scollegato, permessi revocati), il backup server prosegue normalmente e l'errore locale viene loggato
- Compatibilità: Chrome / Edge / Brave / Opera (Chromium-based con File System Access API). Non supportato su Firefox e Safari iOS — in questi browser il checkbox è disabilitato con tooltip esplicativo
Vantaggi
- Disponibilità offline: anche se il server NOX è irraggiungibile, hai una copia recente in locale
- Backup ridondante: in caso di perdita totale del server (ransomware, disastro fisico), il PC dell'utente conserva i dump
- Sincronizzazione cloud: scegliendo una cartella sincronizzata con Dropbox/OneDrive/Google Drive, ottieni automaticamente backup off-site
- Velocità di restore: il ripristino da file locale è più veloce del download dal server (se la connessione è lenta)
• Pacchetto
BASE attivo sul workspace (configurabile da SUPERADMIN in /admin/pacchetti)
• Profilo attività compatibile: Tutti i profili
• Permesso utente abilitato in Modifica Utente → Moduli
I tre livelli si applicano in intersezione. Dettagli completi in Gerarchia Pacchetti+Profilo+Utente.
Ogni backup (manuale o schedulato) è registrato nella tabella log_backup_esecuzioni.
Dati registrati
| Campo | Contenuto |
|---|---|
| tipo | MANUALE / SCHEDULATO |
| nome_file | Nome del file generato |
| path_storage | Percorso completo |
| dimensione_bytes | Taglia file (BigInt, supporta > 2 GB) |
| hash_contenuto | SHA-256 del file completo |
| stato | OK / ERRORE / PARZIALE |
| durata_secondi | Tempo di esecuzione |
| eseguito_da | Utente (MANUALE) o "system" (SCHEDULATO) |
| tabelle_incluse | Database o lista tabelle |
Endpoint: GET /api/backup/log/esecuzioni con filtri per stato e limit.
L'hash SHA-256 registrato alla creazione permette di verificare in qualsiasi momento se il file è stato alterato o corrotto (bitrot).
Come funziona
- Endpoint:
GET /api/backup/log/verifica/:id - Il sistema legge il file dal path registrato
- Calcola SHA-256 in streaming (compatibile con file grandi)
- Confronta con l'hash storico
- Ritorna:
OK,HASH_MISMATCHoFILE_MANCANTE
Il campo tipo del log permette di distinguere chiaramente backup on-demand e backup automatici.
- MANUALE:
eseguito_da = utente(username / id) - SCHEDULATO:
eseguito_da = "system"
Lo scheduler interno avvia backup giornaliero alle 02:00 UTC (configurabile in .env).
Strategia di conservazione a più livelli per bilanciare costo e compliance.
| Livello | Retention | Scopo |
|---|---|---|
| On-site | 30 giorni | Recovery rapido (ultimi giorni) |
| Offsite settimanale | 6 mesi (raccomandato) | Disaster recovery |
| Cold storage | 10+ anni (pianificato) | Conservazione fiscale art. 2220 c.c. |
Procedura di ripristino del database da backup esistente.
- Identificare il backup da ripristinare (lista + filtro data)
- Eseguire
POST /api/backup/:id/ripristinacon conferma esplicita - Il sistema scarica il file, esegue
psqldi ripristino - Ricaricare il PrismaClient per ogni workspace coinvolto