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: ogni notte per tutte le aziende del server; frequenza e giorni di conservazione li imposta solo il SUPERADMIN, perché valgono per tutti
- Notifiche email: dopo il giro notturno, un’email all’indirizzo della configurazione se qualche archivio non è stato salvato (e, se lo si chiede, anche quando va tutto bene). Parte dalla casella di sistema del programma; l’indirizzo lo imposta e lo vede solo il SUPERADMIN
- Multi-azienda: ogni azienda ha backup indipendenti; l'archivio mostra l'azienda in cui si è
- Scelta dell'azienda (solo SUPERADMIN): la tendina Azienda in cima alla pagina fa backup, ripristino, importazione e download di qualunque azienda senza entrarci.
La schermata è divisa in tre aree principali:
1. Barra strumenti (in alto)
- Importa Backup (pulsante arancione, solo per il Super Amministratore): 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 (solo Super Amministratore)
Card con i parametri di programmazione: frequenza, orario, conservazione, notifiche. Valgono per tutte le aziende del server. Pulsante Salva che si attiva solo quando ci sono modifiche non salvate. Sotto c'è la card del backup automatico locale all'avvio (sez. 14).
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 (per i backup completati), Elimina. Li vede solo il Super Amministratore |
- 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. La vede e la salva solo il Super Amministratore: la configurazione è una sola per tutto il server, e il giro notturno salva tutte le aziende.
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) |
| Conservazione (giorni) | 1–3650 | 30 | I backup notturni più vecchi vengono eliminati automaticamente. Zero non è ammesso (cancellerebbe le copie appena fatte). Le copie manuali e quelle fatte prima di un’importazione si cancellano dopo 30 giorni, o dopo questi giorni se sono di più (sez. 13) |
| Email notifiche | — | Un indirizzo solo. Vuoto = nessuna email | |
| 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 è una sola per tutto il server: il giro notturno salva ogni azienda, ciascuna nel suo file
- Il nome del workspace è sempre visibile nel titolo dell'archivio e nelle modali di conferma
Migrare dati tra workspace
Operazione del Super Amministratore: scaricare e importare una copia sono riservati a lui.
- 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
A fine giro notturno, dopo il dump, il sistema elimina le copie vecchie:
| Copia | Si cancella dopo |
|---|---|
| Notturna (automatica) | i giorni del campo Conservazione (giorni) |
| Manuale e prima di un’importazione | 30 giorni, oppure i giorni di conservazione se sono di più |
| File importato | 7 giorni (la copia di com’era prima resta quella «prima di un’importazione») |
| Locale | non a giorni: ne restano le ultime 5 |
Se il valore della conservazione salvato non è valido, notturne e manuali non si cancellano. Una copia da tenere più a lungo va scaricata e conservata fuori dal server.
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 * * |
Il backup automatico locale all'avvio salva una copia del database della propria azienda direttamente in una cartella del computer, oltre che sul server.
Come funziona
- Vai in Backup & Ripristino, card «Backup automatico locale all'avvio»
- Attiva la casella «Attiva backup automatico locale all'avvio»
- Scegli la cartella — il browser apre il suo selettore di cartelle
- 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
- Il backup parte all'avvio del programma, al massimo una volta ogni 24 ore: NOX genera la copia sul server e la scarica nella cartella scelta. Sul server ne restano le ultime 5
- I file hanno nel nome data e ora, così non si sovrascrivono
- Se la cartella locale non è più raggiungibile (disco esterno scollegato, permessi revocati), la card mostra l'errore
- La scelta della cartella funziona con Chrome ed Edge sul computer. Con Firefox, Safari o dal telefono la card lo dice e il file finisce nella cartella Download del browser
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)
• il pacchetto
BASE è compreso nella licenza dell’azienda
• il modulo è acceso nella Aziende & Licenze, per l’azienda e per l’utente
Spento vuol dire bloccato, non solo nascosto. Dettagli in Licenza e Aziende & Licenze.
Ogni backup (manuale, locale o notturno) è registrato nella tabella log_backup_esecuzioni, anche quando non riesce. Ognuno vede solo le righe della propria azienda; il SUPERADMIN le vede tutte (o quelle dell’azienda scelta in alto).
Dati registrati
| Campo | Contenuto |
|---|---|
| tipo | MANUALE / AUTO_LOCAL (backup locale all’avvio) / AUTO (notturno) |
| 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 |
| durata_secondi | Tempo di esecuzione |
| eseguito_da | Utente (MANUALE, AUTO_LOCAL) o “notturno” (AUTO) |
| 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(serve il permesso di eseguire i backup, e solo sulle copie della propria azienda) - 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_MISMATCH,FILE_MANCANTE(cancellato dalla pulizia o a mano) oSENZA_IMPRONTA(righe vecchie registrate senza SHA-256)
Il campo tipo del log permette di distinguere chiaramente backup on-demand e backup automatici.
- MANUALE e AUTO_LOCAL:
eseguito_da = utente(username / id) - AUTO (notturno):
eseguito_da = "notturno", una riga per ogni archivio
Lo scheduler interno avvia il backup all’ora impostata nella configurazione, in ora italiana (oggi le 02:15). Anche l’ora nel nome dei file è italiana.
Strategia di conservazione a più livelli per bilanciare costo e compliance.
| Livello | Retention | Scopo |
|---|---|---|
| On-site | i giorni della configurazione (notturni); 30 giorni o più le manuali, 7 i file importati | 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