Scarica schema e dati del database (public e auth) e i file dei bucket storage, così si può ripartire se si perdono Supabase o Vercel. I dati generati restano fuori da git perché contengono dati personali reali. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Backup di disaster recovery
Script per scaricare su questo host un backup completo del progetto Supabase: schema DB, dati, utenti auth e file storage. Serve per poter ripartire in fretta se il progetto Supabase (o Vercel) venisse perso.
Preparazione, passo per passo
Da fare una volta sola per host (poi il backup si rilancia semplicemente con
./backups/backup.sh).
- Installa/aggiorna la CLI Supabase (via
npx, non serve installarla a parte):npx supabase --version - Accedi con il tuo account Supabase:
Si apre il browser per l'OAuth; il token resta salvato in locale.
npx supabase login - Collega il repo al progetto Supabase (il
project_idè già insupabase/config.toml, quindi in genere basta):Verifica che sia andato a buon fine connpx supabase link --project-ref <project_id>npx supabase projects list(il progetto deve comparire con"linked":true). - Crea/controlla il file
.envnella root del repo (accanto apackage.json, non dentrobackups/) con almeno queste due chiavi:Le trovi su supabase.com/dashboard → progetto → Project Settings → API. La service role key è quella con permessi pieni (bypassa le RLS): serve solo per scaricare i file dai bucket, non va mai esposta lato client né committata.VITE_SUPABASE_URL="https://<project_id>.supabase.co" SUPABASE_SERVICE_ROLE_KEY="<service role key>" - (Solo se userai
--encrypt) Verifica che gpg sia installato:Su Debian/Ubuntu:gpg --versionsudo apt install gnupgse manca.
A questo punto sei pronto per lanciare il backup vero e proprio (vedi sotto).
Uso
./backups/backup.sh # crea backups/YYYYMMDD_HHMM/ con tutto dentro
./backups/backup.sh --encrypt # come sopra, poi comprime e cifra in un unico
# backups/YYYYMMDD_HHMM.tar.gz.gpg (chiede una
# passphrase) e cancella la cartella in chiaro
Ogni esecuzione crea una cartella nuova con timestamp: non sovrascrive backup precedenti. Non c'è pulizia automatica dei vecchi backup — cancellali a mano quando non servono più.
Il backup contiene:
| File/cartella | Contenuto |
|---|---|
schema_public.sql |
schema delle tabelle applicative (tabelle, funzioni, RLS) |
data_public.sql |
dati delle tabelle applicative |
schema_auth.sql |
schema utenti Supabase Auth |
data_auth.sql |
utenti reali, incluso l'hash della password |
storage/ |
tutti i file dei bucket (avatar-giocatori, profili-giocatore: foto, documenti d'identità, certificati) |
Ripristino
- Nuovo progetto Supabase (o
supabase startin locale via Docker). - Importa nell'ordine:
schema_public.sql→schema_auth.sql→data_auth.sql→data_public.sql(gli utenti auth prima dei dati pubblici, perchégiocatori.auth_user_idreferenziaauth.users.id). - Ricrea i bucket
avatar-giocatorieprofili-giocatoree ricarica il contenuto distorage/. - Reimposta le variabili d'ambiente su Vercel/locale (non incluse in questo backup — vedi sotto).
- Redeploy dal repo git (il codice non serve backupparlo qui, è già su GitHub e Gitea).
Per un archivio cifrato: gpg -d backups/AAAAMMGG_hhmm.tar.gz.gpg | tar xz.
Cosa NON è incluso
- Variabili d'ambiente Vercel: richiede
vercel logininterattivo, non automatizzabile da questo script. Esportale a mano convercel env pull. - Codice applicativo: vive nel repo git, non nel database.
Sicurezza
Questi backup contengono password hash, documenti d'identità e altri dati personali reali. Per questo:
- la cartella
backups/è in.gitignore(tranne questo README e gli script: quelli sì restano in git) — non committare mai i dati generati; - se sposti un backup fuori da questo host, usa sempre
--encrypto cifra tu l'archivio a mano; - cancella i backup in chiaro quando non ti servono più.