Obelica Docs
Backup

Backup e restore

Strategia backup automatica, dump e prossimi step

Comando

Backup automatico (Rust):

/opt/obelica/infra/bin/obelica-backup

Viene 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_dump via container postgres: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 --all di ogni repo in /opt/obelica/repos/;
  • archivio repos.tar.zst.enc cifrato 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.enc cifrato.

Secret:

  • tarball /opt/obelica/secrets cifrato in secrets.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-040002

Output:

databases/
forgejo-app-data.tar.zst.enc
repos.tar.zst
config.tar.zst.enc
secrets.tar.zst.enc
offsite-manifest.txt

Test eseguiti:

  • decifratura di tutti gli archivi;
  • gzip -t sui dump SQL;
  • zstd -t sui 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.enc dal 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 con obelica 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:

  1. Rendere ricorrente il restore drill (trimestrale, partendo solo da escrow + Spaces).
  2. Definire RTO/RPO formali per classe cliente.
  3. Copiare la passphrase di escrow anche in un password manager. ✅ fatto dal titolare.

On this page