Orafila Documentazione Prenota una demo

Documento 9 di 13

Gestione e manutenzione

Controlli, aggiornamenti, backup e ripristino, incidenti, supporto agli utenti.

Per chi: IT, operatore

Questo documento riguarda chi gestisce un'installazione di Orafila: controlli, aggiornamenti, backup e ripristino, incidenti, e le attività di supporto agli utenti. I comandi deploy/... si scrivono sul server, dalla cartella nova-psa.

Chi fa cosa

Attività Servizio gestito Installazione dedicata
Server, sistema operativo, Docker, certificati HTTPS Fornitore Chi gestisce il server
Aggiornamenti di Orafila Fornitore Chi gestisce il server (deploy/nova.sh update)
Backup, prova di ripristino, custodia delle chiavi Fornitore Chi gestisce il server
Controllo esterno del sito e dei backup Fornitore Chi gestisce il server
Attivazione di nuove aziende, indirizzi delle code per il gateway Fornitore (operatore della piattaforma) Chi gestisce il server
Chiavi dei fornitori AI Secondo il contratto Chi gestisce il server, con le chiavi dell'azienda
Utenti, ruoli, impostazioni, caselle di posta, Fatture in Cloud, budget AI Amministratori dell'azienda, dall'applicazione Amministratori dell'azienda, dall'applicazione
Sblocco degli accessi, azzeramento della verifica in due passaggi, nuovi inviti Amministratori dell'azienda Amministratori dell'azienda

Controlli

Cosa Come
Stato generale deploy/nova.sh status: servizi, database esterno, spazio su disco, memoria, ultimo backup, email in uscita (porte SMTP raggiungibili o bloccate)
Messaggi dei servizi deploy/nova.sh logs app, logs worker (posta), logs caddy (HTTPS), logs db, logs migrate; con -f in tempo reale
Disponibilità dall'esterno Controllo HTTPS su /api/health ogni 5 minuti da un servizio di uptime: risponde {"status":"ok"} se app e database funzionano
Backup notturni Healthchecks.io (o simile) con BACKUP_PING_URL; storico con journalctl -u nova-backup -n 50
Dentro l'applicazione Assistente › Controllo dello stato e numeri nel menu: caselle che non leggono o non inviano, processo della posta fermo, email non partite, AI che non risponde o a budget finito

Docker riavvia da solo un servizio che si ferma; i controlli di salute di app (ogni 30 secondi) e processo della posta (segnale ogni 15 secondi) lo segnalano come "unhealthy" se non risponde.

Aggiornamenti

Orafila:

deploy/nova.sh update

Il comando controlla la memoria, fa un backup di sicurezza, scarica la nuova versione con git, ricostruisce l'immagine e riavvia; le migrazioni del database si applicano da sole all'avvio. Si rifiuta di partire se qualcuno ha modificato a mano i file del repository sul server (li elenca). L'interruzione del servizio è di pochi istanti al riavvio dei contenitori.

Sistema operativo e Docker: gli aggiornamenti di sicurezza si installano da soli ogni giorno. Se al login compare *** System restart required ***, riavviate (sudo reboot): dopo un paio di minuti tutto riparte da solo; controllate con deploy/nova.sh status.

Una volta al mese, le immagini di base (database, Caddy, Node.js), che contengono correzioni di sicurezza:

cd deploy && docker compose pull db caddy && docker compose build --pull && cd ..
deploy/nova.sh up

Spazio su disco: up (e quindi update) cancella ogni volta la versione precedente dell'immagine, e la cache di costruzione quando restano meno di 4 GB liberi. Per liberare spazio prima: docker builder prune -af.

Mai usare docker compose down -v, docker volume rm o docker system prune --volumes: cancellano il database.

Backup

  • Automatico ogni notte alle 02:30 (ora italiana, più al massimo 15 minuti casuali), dopo deploy/nova.sh install-timer; se il server era spento, parte alla riaccensione.
  • A mano in qualunque momento: deploy/nova.sh backup. Elenco: deploy/nova.sh backups.
  • Ogni backup è il database completo (tutte le aziende), cifrato con age, verificato e poi copiato nel bucket se configurato. Restano gli ultimi 7 sul server e 30 giorni nel bucket (valori modificabili).
  • I nomi sono data e ora UTC: nova-20261020T013000Z.dump.age.
  • I backup contengono i dati; gli utenti del database no: dopo un ripristino su un server nuovo le password del database possono essere nuove.

Custodia delle chiavi (nel gestore di password, fuori dal server):

  1. la chiave privata dei backup (deploy/secrets/backup.agekey);
  2. APP_ENCRYPTION_KEY;
  3. consigliato: tutto deploy/.env, aggiornato a ogni modifica.

Ripristino

Sullo stesso server (per esempio per tornare a uno stato precedente):

deploy/nova.sh restore nova-AAAAMMGGTHHMMSSZ.dump.age --yes [--key ~/chiave-salvata.txt]

Il ripristino fa prima un backup di sicurezza dello stato attuale, ferma app e processo della posta, carica il backup in un database temporaneo che sostituisce quello attuale solo se il caricamento riesce (con un database esterno, in una sola transazione), applica le migrazioni più recenti del backup, riavvia e aspetta che i servizi siano in salute. Se la chiave non apre il backup si ferma prima di cambiare qualunque cosa. Tutte le aziende dell'installazione tornano allo stato del backup.

Su un server nuovo (server perso o guasto):

  1. nuovo server, record DNS aggiornato al nuovo IP, pacchetto scaricato, sudo deploy/setup-host.sh;
  2. chiave privata dei backup rimessa in deploy/secrets/backup.agekey e deploy/.env ricreato dal gestore di password (almeno APP_ENCRYPTION_KEY e i dati del bucket);
  3. deploy/nova.sh init --domain ... --email ... per completare i valori mancanti, poi deploy/nova.sh up;
  4. deploy/nova.sh backups e deploy/nova.sh restore <ultimo file del bucket> --yes: il file viene scaricato dal bucket, controllato e ripristinato;
  5. deploy/nova.sh install-timer.

Gli utenti entrano con la loro password e il loro codice di verifica, come prima. Se nessuno riesce a completare la verifica in due passaggi, APP_ENCRYPTION_KEY non è quella del server di origine. I passi dettagliati sono nelle guide Oracle e DigitalOcean.

Provate il ripristino all'avvio del servizio, con la copia della chiave custodita nel gestore di password: un backup mai ripristinato non dà garanzie.

Se si sospetta un'intrusione nel server

Considerate compromesso tutto ciò che era sul server: deploy/.env (password del database, chiavi del bucket e dell'AI, APP_ENCRYPTION_KEY) e la chiave dei backup.

  1. Fermate il server dalla console del fornitore, senza cancellarlo.
  2. Revocate la deploy key del repository, la chiave di accesso al bucket e le chiavi dei fornitori AI; createne di nuove.
  3. Ricostruite su un server nuovo con password del database, segreto del gateway e chiave dei backup nuovi (tenendo APP_ENCRYPTION_KEY, che serve a leggere i dati) e ripristinate l'ultimo backup precedente all'intrusione, aperto con la vecchia chiave dei backup.
  4. Nell'applicazione: cambiate le password delle caselle di posta (prima presso il fornitore di posta, poi in Code e posta) e fate azzerare la verifica in due passaggi a tutti gli utenti (Impostazioni › Utenti), eventualmente anche l'accesso.
  5. Valutate con il consulente privacy la notifica della violazione (art. 33-34 GDPR).

Attività dell'operatore della piattaforma

Cosa Comando
Attivare un'azienda deploy/nova.sh tenant-create --name "..." --slug codice --admin-email ... --admin-name "..." [--lingua en]
Nuovo invito per il primo amministratore deploy/nova.sh tenant-create --reinvite --slug codice [--admin-email ...]
Indirizzo di una coda per il gateway di inoltro deploy/nova.sh queue-address --company codice --queue Assistenza --address [email protected] (--clear per toglierlo)
Dati di esempio deploy/nova.sh sample-data --slug codice / --remove

Queste operazioni compaiono nel registro attività dell'azienda con l'autore «Sistema».

Supporto agli utenti (amministratori dell'azienda)

Situazione Cosa fa l'amministratore in Impostazioni › Utenti
Bloccato dopo 5 tentativi «Sblocca l'accesso» (oppure si sblocca da solo dopo 15 minuti)
Telefono cambiato o perso «Azzera la verifica in due passaggi»: al prossimo accesso la riconfigura
Password dimenticata «Azzera l'accesso», poi «Crea un nuovo link di invito»
Invito scaduto o perso «Crea un nuovo link di invito» (il precedente smette di funzionare)
Persona che lascia l'azienda «Sospendi l'utente» (le sue sessioni si chiudono), poi riassegnare i suoi ticket
Unico amministratore non raggiungibile tenant-create --reinvite dell'operatore funziona solo finché l'azienda non ha un amministratore attivo; dopo, gli inviti si creano dall'applicazione. Per questo conviene avere almeno due amministratori; altrimenti serve un intervento tecnico dell'operatore

Problemi frequenti

Sintomo Causa probabile Cosa fare
Il sito non si apre o il certificato non è valido DNS non propagato, porte 80/443 chiuse Controllare DNS e firewall, deploy/nova.sh logs caddy, poi deploy/nova.sh up
"502" o "Bad Gateway" L'app non è partita o si sta riavviando deploy/nova.sh status, deploy/nova.sh logs app migrate
app o worker "unhealthy" Database fermo, errore nelle migrazioni o configurazione sbagliata deploy/nova.sh logs app worker db migrate; corretto l'errore, deploy/nova.sh up
up dice che manca un valore in deploy/.env Configurazione incompleta Prima installazione: deploy/nova.sh init; server avviato: rimettere il valore dal gestore di password (APP_ENCRYPTION_KEY mai rigenerata)
Le email dei clienti non diventano ticket Casella non collegata, password sbagliata, fornitore che richiede OAuth, mittente non riconosciuto Code e posta › «Prova la connessione»; Posta in arrivo; deploy/nova.sh logs worker
Le risposte non partono Dati SMTP, porte bloccate dal fornitore del server Code e posta › email non inviate; deploy/nova.sh status (sezione email in uscita); porta 2525 con un servizio di invio
Il backup non arriva nel bucket Dati del bucket sbagliati in deploy/.env Ricontrollare endpoint, regione, chiavi e nome; deploy/nova.sh backup
Dopo un ripristino la verifica in due passaggi non funziona APP_ENCRYPTION_KEY diversa Rimettere la chiave salvata, deploy/nova.sh up
update si rifiuta di partire File del repository modificati a mano git status, annullare le modifiche, riprovare
Disco quasi pieno Cache di costruzione, immagini vecchie, troppi backup locali docker builder prune -af, docker image prune -f, ridurre BACKUP_KEEP_LOCAL
La costruzione si interrompe per memoria Server con poca RAM sudo deploy/setup-host.sh --swap-only, oppure un server più grande