Superbissimo, mi piace la base. Ma il momento in cui ho visto “Backups” seduti dietro un piano pagato, il mio cervello ha fatto quello che fa ogni cervello del fondatore rotto: “I can build that.” E sì, si può. sul piano gratuito. Con la vera automazione. Senza un server. Senza svegliarsi alle 2 del mattino per ricordare "oh sì, dovrei buttare via il mio database". Questo articolo mostra come ho creato utilizzo , oltre a tutti i piccoli errori fastidiosi che probabilmente colpirai (quindi non devi). automatic Supabase Postgres backups every 12 hours GitHub Actions Cosa stiamo costruendo Un’installazione unilaterale che: Corre ogni 12 ore Connetti al tuo database Supabase Postgres Crea un file di backup .dump (formato compresso, corretto) Lo memorizza in un repo GitHub privato come file di versione Nessun piano pagato Supabase. nessun servizio di terze parti. nessun VPS. Solo GitHub fa il lavoro noioso. L'unica cosa che devi capire Un backup di database è come un ombrellone. Se aspettate che inizi a piovere, siete già bagnati. Inoltre, "Lo ricreerò" è una bugia che dici a te stesso quando non l'hai mai ricreato, il piano gratuito di Supabase è fondamentalmente un buco nero, se sei hackerato, non c'è storia da ricadere. Passo 0: Creare un repo privato Crea a Il repository di GitHub ha chiamato qualcosa come: private I backup di myapp-db Il backup notpayingforshiii-db-backup (se tu sei me) Questo repo memorizzerà i tuoi file di backup. GitHub Repo dedicato ai backup Passo 1: Ottieni la stringa di connessione di Supabase corretta (questa parte conta) Vai al tuo progetto Supabase: di Settings → Database → Connection string Ecco la trappola: Usare Session Pooler (non Direct) Se sei sul piano gratuito, Supabase mostra spesso: Connessione diretta: non compatibile con IPv4 Session pooler: compatibile con IPv4 I corridori di GitHub sono tipicamente IPv4.Se usi Direct, il tuo flusso di lavoro fallirà e penserai che l'universo ti odia. Set di: Modalità: Session Pooler Tipo di URI Otterrai una stringa di connessione come: postgresql://postgres.<your-project-ref>:YOUR_PASSWORD@aws-1-<region>.pooler.supabase.com:5432/postgres è importante: Sostituisci il localizzatore di [YOUR-PASSWORD] con la password di Supabase, se non ti ricordi, c'è un link di reset della password db su quella finestra popup di connessione. Passo 2: Aggiungi la stringa di connessione come segreto GitHub Nel tuo GitHub repo: Settings → Secrets and variables → Actions → New repository secret Crea un segreto: Nome del sito: SUPABASE_DB_URL Value: incollare la stringa di connessione completo Session Pooler Non aggiungere spazi extra. Non aggiungere una newline. Non diventare carino. Aggiungi il tuo segreto Passo 3: Aggiungi il file di workflow di GitHub Actions Nel tuo repo, crea questo file: .github/workflows/backup.yml GitHub creerà automaticamente le cartelle. Inserisci il flusso di lavoro completo: name: Supabase Backupon: schedule: - cron: "0 */12 * * *" workflow_dispatch:jobs: backup: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 - name: Install matching PostgreSQL client env: DATABASE_URL: ${{ secrets.SUPABASE_DB_URL }} run: | sudo apt-get update sudo apt-get install -y wget ca-certificates lsb-release postgresql-client SERVER_VERSION=$(psql "$DATABASE_URL" -tAc "SHOW server_version_num;" | cut -c1-2) echo "SERVER_VERSION=$SERVER_VERSION" >> $GITHUB_ENV wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list sudo apt-get update sudo apt-get install -y postgresql-client-$SERVER_VERSION - name: Run pg_dump env: DATABASE_URL: ${{ secrets.SUPABASE_DB_URL }} run: | mkdir -p backups /usr/lib/postgresql/$SERVER_VERSION/bin/pg_dump "$DATABASE_URL" \ --format=custom \ --file=backups/supabase_$(date +%F_%H-%M).dump - name: Commit backup run: | git config user.name "supabase-backup-bot" git config user.email "backup@github.com" git add backups git commit -m "Automated Supabase backup" || echo "No changes" git pushWhat this does: Rileva la versione di Supabase DB Postgres Installa il matching pg_dump Crea un file .dump Inserisci il tuo repo Questa versione è : se Supabase aggiorna Postgres in un secondo momento, il flusso di lavoro si adatta. future-proof Passo 4: Dare a GitHub Actions il permesso di spingere Fai questo , perché il backup fallirà quando cercherà di Torna al tuo repo. before you run the workflow save (commit + push) the database dump Ecco come permetterlo: Repo → Impostazioni → Azioni → Generali → Permessi di Workflow Selezionare: ✅ Permessi di lettura e scrittura clicca . Save Passo 5: eseguire manualmente una volta Ora, testarlo per assicurarsi che funzioni prima di riposare facilmente. Vai al tuo repo: Actions → Supabase Backup → Run workflow Se ci riesce: Verrà visualizzata una nuova cartella: backup/ Un file come: supabase_2026-01-24_00-15.dump E i buchi di stoccaggio? Questo backup è per te . Postgres database Non comprende: File di archiviazione Supabase (immagini, video, caricamenti) Codice di funzione Edge loghi Se hai bisogno anche di backup di Storage, vorrai un processo separato (sincronizzazione compatibile con S3 o uno script - potrei estendere questo per fare tutto questo, ma avevo solo bisogno del database nel mio caso). Bonus: mantenere il tuo repo da crescere per sempre (opzionale) Se non vuoi che si accumulino backup infiniti, puoi eliminare automaticamente i file più vecchi (mantenere gli ultimi 30, per esempio). I pensieri finali Non hai bisogno di un piano a pagamento per avere backup per adulti. Hai solo bisogno: Il GitHub repo Un segreto Un flusso di lavoro Un permesso toggle E ora il tuo database ha backup ogni 12 ore mentre dormi, spedisci e finisci di non essere responsabile della produzione. Se hai trovato questo utile, ti senti libero di rubarlo.