Backup & Ripristino

Protezione dati, salvataggio periodico, ripristino e migrazione tra workspace

v 2.2 Manuale Utente

Riferimenti normativi

1Panoramica

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
Accessibile da: Impostazioni → Backup & Ripristino. Richiede il ruolo Amministratore.
2Interfaccia Utente

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)”.

ColonnaContenuto
Nome fileNome del backup, modificabile con doppio clic o icona matita
DataData e ora di creazione (formato DD/MM/YYYY HH:mm)
DimensionePeso del file (B, KB, MB, GB)
TipoBadge: AUTOMATICO (programmato) o MANUALE (su richiesta)
StatoBadge colorato: COMPLETATO (verde), IN CORSO (blu), ERRORE (rosso)
WorkspaceNome del workspace di appartenenza
AzioniPulsanti: Scarica, Ripristina, Elimina (visibili solo per backup completati)
Quando un backup è in corso, la lista si aggiorna automaticamente ogni 30 secondi fino al completamento.
3Backup Manuale — Passo per Passo
  1. Verificare di essere nel workspace corretto: il nome è visibile nel titolo dell'archivio e nella topbar.
  2. Premere il pulsante “Backup Manuale” (blu) nella barra strumenti.
  3. Il pulsante si disabilita e mostra “Backup in corso...” con un'icona di caricamento.
  4. Il sistema genera un dump SQL completo del database corrente (con pg_dump --no-owner --no-privileges --clean --if-exists).
  5. Il file viene compresso in formato .sql.gz e salvato nell'archivio del server.
  6. Al completamento, appare il messaggio “Backup completato con successo” in verde.
  7. Il nuovo backup appare in cima alla lista con stato COMPLETATO e tipo MANUALE.
Non è possibile avviare un secondo backup mentre uno è già in corso. Attendere il completamento.
4Scaricare un Backup

Per salvare una copia del backup sul proprio computer:

  1. Nella lista archivio, individuare il backup desiderato (stato COMPLETATO).
  2. Premere l'icona Scarica (freccia verso il basso) nella colonna Azioni.
  3. Il browser avvia il download del file con il nome originale (es. backup_20260413_020000.sql.gz).
  4. Conservare il file scaricato in un luogo sicuro (disco esterno, cloud, NAS).
Scaricare periodicamente i backup su un supporto esterno garantisce la protezione anche in caso di guasto del server. È una buona pratica mantenere almeno una copia off-site.
5Ripristinare un Backup

Il ripristino riporta il database del workspace corrente allo stato in cui era al momento del backup selezionato.

  1. Nella lista archivio, individuare il backup da ripristinare.
  2. Premere l'icona Ripristina (icona orologio/freccia) nella colonna Azioni.
  3. 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”
  4. Premere “Conferma Ripristino” per procedere, oppure “Annulla” per tornare indietro.
  5. Il sistema esegue: DROP SCHEMA CASCADE → ripristino dal file → ricostruzione indici.
  6. Al completamento, appare il messaggio: “Ripristino completato. Ricaricare la pagina.”
  7. Ricaricare la pagina (F5) per vedere i dati ripristinati.
ATTENZIONE: il ripristino sovrascrive completamente il database del workspace corrente. Tutti i dati inseriti dopo la data del backup verranno persi. Eseguire sempre un backup manuale prima di ripristinare, così da poter tornare allo stato attuale se necessario.
6Importare un Backup Esterno

L'importazione consente di caricare un file di backup proveniente da un altro workspace, un altro server o un altro sistema gestionale.

  1. Premere il pulsante “Importa Backup” (arancione) nella barra strumenti.
  2. Si apre il selettore file del sistema operativo. Selezionare un file nei formati supportati: .sql, .gz, .sql.gz, .dump.
  3. 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”
  4. Premere “Conferma Importazione” per caricare il file.
  5. Il pulsante mostra “Importazione...” durante il caricamento e l'elaborazione.
  6. Il sistema carica il file, cancella lo schema corrente e ripristina dal file importato.
  7. Al completamento: “Backup importato e ripristinato con successo. Ricaricare la pagina.”
  8. Ricaricare la pagina (F5) per vedere i dati importati.
L'importazione sovrascrive completamente il database come il ripristino. Eseguire sempre un backup del workspace corrente prima di importare.

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
7Rinominare un Backup

I backup generati automaticamente hanno nomi tecnici (es. backup_20260413_020000.sql.gz). È possibile rinominarli con nomi descrittivi per facilitarne l'identificazione.

  1. Nella lista archivio, fare doppio clic sul nome del file, oppure premere l'icona matita (visibile al passaggio del mouse).
  2. Il nome diventa un campo di input modificabile in font monospace.
  3. Digitare il nuovo nome descrittivo (es. Pre-aggiornamento_v2.1, Chiusura_trimestre_Q1).
  4. Premere il segno di spunta verde per confermare, oppure la X rossa per annullare.
  5. In alternativa: Enter per confermare, Esc per annullare.
Suggerimenti per i nomi: includere la data, lo scopo e il workspace. Es. “2026-04-13 Pre-migrazione Studio” o “Backup pulito post-pulizia anagrafica”.
8Eliminare un Backup
  1. Nella lista archivio, premere l'icona Elimina (cestino) sulla riga del backup.
  2. Appare una finestra di conferma con il nome del file.
  3. Premere “OK” per eliminare definitivamente, oppure “Annulla”.
  4. Il backup viene rimosso dall'archivio e dal server.
L'eliminazione è irreversibile. Se il backup è stato scaricato sul PC, la copia locale non viene toccata. Si consiglia di scaricare i backup importanti prima di eliminarli dal server.
9Backup Automatico — Configurazione

La card “Configurazione Backup Automatico” permette di programmare i backup senza intervento manuale.

Parametri configurabili

ParametroOpzioniDefaultDescrizione
AbilitatoSì / NoAttiva/disattiva i backup programmati
FrequenzaGiornaliero, Settimanale, MensileGiornalieroOgni quanto eseguire il backup
Ora esecuzioneHH:MM02:00Orario di avvio (si consiglia orario notturno)
Giorno settimanaDomenica–SabatoSolo per frequenza settimanale
Giorno mese1–28Solo per frequenza mensile (max 28 per evitare mesi corti)
Retention (giorni)1–36530I backup più vecchi della retention vengono eliminati automaticamente
Email notificheemailIndirizzo per le notifiche
Notifica erroriSì / NoInvia email se il backup fallisce
Notifica successoSì / NoNoInvia email anche quando il backup riesce

Come configurare

  1. Attivare la checkbox “Backup automatico abilitato”.
  2. Selezionare la frequenza desiderata.
  3. Impostare l'ora di esecuzione (consigliato: tra le 01:00 e le 05:00 quando il sistema è meno utilizzato).
  4. Se frequenza settimanale: scegliere il giorno della settimana.
  5. Se frequenza mensile: scegliere il giorno del mese (1–28).
  6. Impostare i giorni di retention (quanti giorni conservare i backup prima dell'eliminazione automatica).
  7. Inserire l'email per le notifiche e scegliere quali notifiche ricevere.
  8. Premere “Salva Configurazione” (il pulsante si attiva solo quando ci sono modifiche).
Consiglio: per la maggior parte delle aziende, un backup giornaliero alle 02:00 con 30 giorni di retention e notifica errori attiva è la configurazione ottimale. Per aziende con elevato volume di transazioni, considerare backup più frequenti.
10Multi-Workspace

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

  1. Selezionare il workspace sorgente dalla topbar.
  2. Eseguire un Backup Manuale o individuare un backup esistente.
  3. Premere Scarica per salvare il file sul PC.
  4. Selezionare il workspace di destinazione dalla topbar.
  5. Premere Importa Backup e caricare il file scaricato.
  6. Confermare nella modale (verificare che il nome workspace sia quello corretto).
Nella modale di conferma (ripristino e importazione), il nome del workspace di destinazione è mostrato in rosso e in grande per prevenire errori. Verificare sempre prima di confermare.
11Formati Supportati

Formati accettati per l'importazione

EstensioneFormatoDescrizione
.sqlSQL plain textDump SQL non compresso. Può essere aperto e letto con un editor di testo.
.sql.gzSQL compresso GzipDump SQL compresso. Formato standard generato dal sistema. Occupa meno spazio.
.gzGzip genericoFile compresso Gzip. Il sistema assume che contenga un dump SQL.
.dumpPostgreSQL dumpFormato 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_dump con 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)
12Buone Pratiche

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

ScenarioFrequenzaRetentionMotivazione
Micro-impresa / StudioGiornaliero30 giorniCopre un mese di lavoro
PMI / CommercioGiornaliero90 giorniCopre un trimestre fiscale
Azienda strutturataGiornaliero365 giorniCopre un esercizio completo
Dati sensibili / GDPRGiornaliero365 giorniConformità art. 32 GDPR + conservazione scritture
Ai sensi dell'art. 2220 c.c. e dell'art. 22 DPR 600/73, le scritture contabili devono essere conservate per almeno 10 anni. I backup non sostituiscono la conservazione sostitutiva a norma, ma garantiscono la disponibilità operativa dei dati.
13Novità Aprile 2026 (v2.1)

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

FrequenzaConfigurazioneCron equivalente
GIORNALIEROOrario HH:MMMM HH * * *
SETTIMANALEGiorno settimana + orarioMM HH * * G
MENSILEGiorno mese + orarioMM HH D * *
Il file sorgente del scheduler è backend/routes/backup.routes.js. La configurazione è salvata su Parametri e ricaricata ad ogni modifica senza riavvio del server.
14Backup auto-locale su filesystem

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

  1. Vai in Backup & Ripristino → Configurazione Backup Automatico
  2. Attiva il checkbox «Salva anche su cartella locale»
  3. Click su «Scegli cartella...» — il browser apre il selettore nativo (File System Access API)
  4. Seleziona la cartella di destinazione (es. ~/Documents/NOX-Backup/ o un disco esterno NAS sincronizzato)
  5. Concedi i permessi di scrittura quando richiesto dal browser
  6. 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)
I backup contengono dati sensibili (anagrafiche, fatture, IBAN, ecc.): la cartella locale deve essere protetta — meglio se cifrata con BitLocker (Windows), FileVault (Mac) o LUKS (Linux). Non condividere la cartella di backup con altri utenti del PC o con servizi cloud non cifrati end-to-end.
?Domande Frequenti (FAQ)
Il backup include anche gli allegati e i file caricati?
Il backup include tutto il contenuto del database (anagrafiche, documenti, righe, scadenze, parametri, ecc.). I file fisici esterni al database (immagini caricate, PDF generati) non sono inclusi nel dump SQL e devono essere salvati separatamente.
Posso ripristinare un backup di un workspace su un altro workspace?
Sì. Scaricare il backup dal workspace sorgente, poi importarlo nel workspace di destinazione. Il contenuto del workspace di destinazione verrà completamente sostituito.
Quanto tempo richiede un backup?
Dipende dalla dimensione del database. Per la maggior parte delle installazioni (fino a 500 MB di dati), il backup si completa in pochi secondi. Database più grandi (1-5 GB) possono richiedere 1-3 minuti.
Cosa succede se il ripristino fallisce a metà?
Il database potrebbe trovarsi in uno stato inconsistente. Per questo è fondamentale eseguire sempre un backup prima del ripristino. In caso di errore, importare il backup eseguito prima del tentativo di ripristino.
Posso importare un backup da PostgreSQL di un'altra applicazione?
Solo se lo schema delle tabelle è compatibile con NOX (Prisma). Un dump SQL di un database con schema diverso causerà errori. L'importazione è pensata per backup generati da NOX o da database con schema identico.
Come verifico che il backup automatico funziona?
Controllare periodicamente l'archivio backup: devono apparire nuovi backup con tipo AUTOMATICO e stato COMPLETATO nelle date previste. Attivare la notifica errori via email per essere avvisati in caso di problemi.
Posso avere frequenze diverse per workspace diversi?
Sì. La configurazione del backup automatico è indipendente per ogni workspace. Ad esempio, il workspace di produzione può avere backup giornalieri, mentre il workspace di test può avere backup settimanali.
La retention elimina i backup scaricati sul mio PC?
No. La retention elimina automaticamente solo i backup sul server. Le copie scaricate sul PC o su supporti esterni non vengono toccate.
Posso rinominare un backup durante l'esecuzione?
No. Le azioni (rinomina, scarica, ripristina) sono disponibili solo per backup con stato COMPLETATO. I backup in corso o con errore non sono modificabili.
Il backup è sufficiente per la conformità GDPR?
Il backup soddisfa il requisito dell'art. 32 GDPR sulla capacità di ripristino. Tuttavia, la conformità GDPR completa richiede anche altre misure: cifratura, controllo accessi, registro trattamenti, DPO, valutazione d'impatto. Il backup è una delle misure tecniche, non l'unica.
Devo fare il backup anche se ho la conservazione sostitutiva?
Sì. La conservazione sostitutiva (DM 17/06/2014) riguarda la conservazione a norma dei documenti fiscali (fatture, registri). Il backup riguarda la protezione operativa dell'intero database (anagrafiche, parametri, scadenze, listini, ecc.). Sono complementari, non sostitutivi l'uno dell'altro.
Perché devo ricaricare la pagina dopo un ripristino?
Il ripristino sostituisce l'intero database sul server. L'applicazione nel browser ha ancora in memoria i dati vecchi (cache, stato dei componenti). Ricaricare la pagina forza il caricamento dei dati aggiornati dal database ripristinato.
16Log esecuzioni con hash SHA-256
🔑 Visibilità condizionata (certificazione v 2.2) — Questo modulo è accessibile solo se:
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

CampoContenuto
tipoMANUALE / SCHEDULATO
nome_fileNome del file generato
path_storagePercorso completo
dimensione_bytesTaglia file (BigInt, supporta > 2 GB)
hash_contenutoSHA-256 del file completo
statoOK / ERRORE / PARZIALE
durata_secondiTempo di esecuzione
eseguito_daUtente (MANUALE) o "system" (SCHEDULATO)
tabelle_incluseDatabase o lista tabelle

Endpoint: GET /api/backup/log/esecuzioni con filtri per stato e limit.

17Verifica integrità a posteriori

L'hash SHA-256 registrato alla creazione permette di verificare in qualsiasi momento se il file è stato alterato o corrotto (bitrot).

Come funziona

  1. Endpoint: GET /api/backup/log/verifica/:id
  2. Il sistema legge il file dal path registrato
  3. Calcola SHA-256 in streaming (compatibile con file grandi)
  4. Confronta con l'hash storico
  5. Ritorna: OK, HASH_MISMATCH o FILE_MANCANTE
Eseguire verifica periodica (es. mensile) per rilevare tempestivamente corruzione storage.
18Distinzione manuale vs schedulato

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

19Retention e conservazione

Strategia di conservazione a più livelli per bilanciare costo e compliance.

LivelloRetentionScopo
On-site30 giorniRecovery rapido (ultimi giorni)
Offsite settimanale6 mesi (raccomandato)Disaster recovery
Cold storage10+ anni (pianificato)Conservazione fiscale art. 2220 c.c.
Il cold storage per conservazione 10 anni NON è ancora attivato automaticamente: implementazione pianificata nel prossimo sprint infrastruttura.
20Disaster recovery

Procedura di ripristino del database da backup esistente.

  1. Identificare il backup da ripristinare (lista + filtro data)
  2. Eseguire POST /api/backup/:id/ripristina con conferma esplicita
  3. Il sistema scarica il file, esegue psql di ripristino
  4. Ricaricare il PrismaClient per ogni workspace coinvolto
L'operazione è DISTRUTTIVA: sovrascrive i dati correnti. Testare prima su ambiente staging.