Backup
Backup e restore
Strategia backup automatica, dump e prossimi step
Comando
Backup automatico (Rust):
/opt/obelica/infra/bin/obelica-backupViene eseguito ogni giorno alle 04:00 da crontab.
Per dettagli tecnici: obelica-backup.
Cosa salva
Database applicativi:
- tutti i DB letti dagli env in
/opt/obelica/secrets/apps/; - dump con
pg_dumpvia containerpostgres:18-alpine; - file cifrati in
/opt/obelica/backups/auto/<timestamp>/databases/*.sql.gz.enc.
Database Forgejo:
forgejo.sql.gz.enc;- dump da
docker exec forgejo-db pg_dump.
App-data Forgejo:
forgejo-app-data.tar.zst.enc;- tarball letto da container root per superare permessi ristretti.
Repository Git:
git bundle --alldi ogni repo in/opt/obelica/repos/;- archivio
repos.tar.zst.enccifrato dal 2026-07-03 (prima era in chiaro: i bundle contengono codice cliente).
Database esterni al VPS:
obelica_db(progetto Obelica su Vercel) incluso dal 2026-07-03 tramite/opt/obelica/secrets/apps/obelica.env— prima non aveva alcun backup.
Configurazione:
/opt/obelica/infra;/opt/obelica/apps;- archivio
config.tar.zst.enccifrato.
Secret:
- tarball
/opt/obelica/secretscifrato insecrets.tar.zst.enc; - esclusa la passphrase stessa (
/opt/obelica/secrets/.backup-passphrase).
Dove salva
/opt/obelica/backups/auto/YYYYMMDD-HHMMSS/Permessi:
- directory backup:
700; - file dump/snapshot:
600; - passphrase:
600.
Verifica eseguita
Ultimo backup verificato:
/opt/obelica/backups/auto/20260626-040002Output:
databases/
forgejo-app-data.tar.zst.enc
repos.tar.zst
config.tar.zst.enc
secrets.tar.zst.enc
offsite-manifest.txtTest eseguiti:
- decifratura di tutti gli archivi;
gzip -tsui dump SQL;zstd -tsui tarball;- restore dei dump in container Postgres locale;
- verifica Git bundle;
- restore test completo su droplet temporaneo il 2026-06-26.
Vedi Restore per la procedura completa.
Quando eseguire
Il backup e' automatico, ma va eseguito manualmente prima di:
- aggiornare immagini Docker;
- cambiare compose di servizi stateful;
- modificare Forgejo;
- cambiare networking o Traefik;
- migrare DNS;
- pubblicare nuovi servizi critici.
Gap produzione
- ✅ Backup automatico locale (retention effettiva: 1 snapshot, prune dopo verifica offsite).
- ✅ Cifratura ChaCha20Poly1305 di tutti gli artifact (incluso
repos.tar.zst.encdal 2026-07-03). - ✅ Sync offsite cifrato su DigitalOcean Spaces.
- ✅ Retention remota: lifecycle 90 giorni sul prefisso
auto/+ abort multipart 7 giorni (applicata il 2026-07-03 conobelica backup lifecycle --days 90). - ✅ Alert automatico su fallimento backup via Telegram.
- ✅ Restore test completo su droplet temporaneo (2026-06-26) + verifica decifratura del formato nuovo (2026-07-03).
- ✅ Escrow passphrase e clone del sorgente decryptor sulla workstation (2026-07-03): lo scenario "droplet morto" e' coperto senza dipendenze dal droplet stesso.
Priorita' residua:
- Rendere ricorrente il restore drill (trimestrale, partendo solo da escrow + Spaces).
- Definire RTO/RPO formali per classe cliente.
- Copiare la passphrase di escrow anche in un password manager. ✅ fatto dal titolare.