Foarte frumos, îmi place supa. Dar în momentul în care am văzut "Backups" stând în spatele unui plan plătit, creierul meu a făcut ceea ce face creierul fiecărui fondator rupt: “I can build that.” Și da, poți. Pe planul gratuit. Cu automatizare reală. Fără un server. Fără să te trezești la 2 dimineața pentru a vă aminti "oh da, ar trebui să-mi arunc baza de date". Acest articol ne arată cum am construit Utilizarea , plus toate greșelile mici enervante pe care le veți lovi probabil (deci nu trebuie să). automatic Supabase Postgres backups every 12 hours GitHub Actions Ce construim noi O singură ediție care: Rulează la fiecare 12 ore Conectează-te la baza de date Supabase Postgres Creează un fișier de rezervă .dump (comprimat, format corespunzător) Stochează-l într-un repo privat GitHub ca fișiere de versiune Nici un plan Supabase plătit. nici servicii terțe părți. nici un VPS. Doar GitHub face munca plictisitoare. Singurul lucru pe care trebuie sa-l intelegi Un backup de baze de date este ca un umbrelă. Dacă aștepți până începe să plouă, ești deja umed. De asemenea, „Voi recrea” este o minciună pe care ți-o spui când nu ai recreat-o niciodată, planul gratuit Supabase este, în esență, o gaură neagră, dacă ești hacked, nu există istorie la care să te întorci. Pasul 0: Creați un repo privat Creează a Repozitorul GitHub a numit ceva de genul: private Myapp-db copie de rezervă Backup-uri de bază notpayingforshiii-db-backups (dacă ești eu) Acest repo va stoca fișierele de rezervă. GitHub dedicat backup-urilor Pasul 1: Obțineți șirul corect de conexiune Supabase (această parte contează) Du-te la proiectul tău de bază: să Settings → Database → Connection string Iată acum capcana: Utilizați Session Pooler (nu Direct) Dacă sunteți pe planul gratuit, Supabase afișează adesea: Conexiune directă: Nu este compatibilă cu IPv4 Sesiune: compatibilă cu IPv4 Runner-urile GitHub sunt de obicei IPv4.Dacă folosiți Direct, fluxul de lucru va eșua și veți crede că universul vă urăște. Setul : Etichetă: session pooler Etichetă: URI Veți obține un șir de conexiuni cum ar fi: postgresql://postgres.<your-project-ref>:YOUR_PASSWORD@aws-1-<region>.pooler.supabase.com:5432/postgres Importantă : Înlocuiți localizatorul [YOUR-PASSWORD] cu parola Supabase, dacă nu vă amintiți, există un link de resetare a parolei db pe pop-up-ul conexiunii respective. Pasul 2: Adăugați șirul de conexiuni ca secret GitHub În GitHub repo: Settings → Secrets and variables → Actions → New repository secret Creează un secret: Cuvânt cheie: SUPABASE_DB_URL Valoare: atașați întregul șir de conexiuni Session Pooler Nu adăugați spații suplimentare. Nu adăugați o newline. Nu deveniți drăguț. Adaugă secretul tău Pasul 3: Adăugați fișierul GitHub Actions Workflow În repo-ul dvs., creați acest fișier: .github/workflows/backup.yml Da, inclusiv punctele. GitHub va crea automat folderele. Acum introduceți acest flux de lucru complet: 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: Detectează versiunea Supabase DB Postgres Instalează potrivirea pg_dump Crearea unui fișier .dump Încorporează-l în repo Această versiune este Dacă Supabase actualizează Postgres mai târziu, fluxul de lucru se adaptează. future-proof Pasul 4: Acordați GitHub Actions permisiunea de a împinge Fă asta , deoarece backup-ul va eșua atunci când încearcă să Înapoi la repo. before you run the workflow save (commit + push) the database dump Iată cum îl poți permite: Repo → Setări → Acțiuni → General → Permisiuni de flux de lucru Selectaţi: ✅ Permisiuni de citire şi scriere Click pe . Save Pasul 5: Rulați-l manual o dată Acum, testați-l pentru a vă asigura că funcționează înainte de a vă odihni ușor. Mergeți la repo: Actions → Supabase Backup → Run workflow Dacă reușește: Veți vedea un folder nou: backups/ Un fișier ca: supabase_2026-01-24_00-15.dump Ce se întâmplă cu buchetele de depozitare? Acest backup este pentru dvs. . Postgres database Aceasta nu include: Fișiere de stocare Supabase (imagini, videoclipuri, încărcări) Codul de funcționare Edge înregistrări Dacă aveți nevoie de backup-uri de stocare, veți dori un proces separat (sincronizarea compatibilă cu S3 sau un script - aș putea extinde acest lucru pentru a face toate acestea, dar am avut nevoie doar de baza de date în cazul meu). Bonus: Păstrați repo-ul să crească pentru totdeauna (opțional) Dacă nu doriți ca backup-urile infinite să se acumuleze, puteți șterge automat fișierele mai vechi (păstrați ultimele 30, de exemplu). Gânduri finale Nu aveți nevoie de un plan plătit pentru a avea copii de rezervă pentru adulți. Ai nevoie doar de: GitHub repo Unul dintre secrete Un flux de lucru O permisiune de trecere Și acum baza de date are backup-uri la fiecare 12 ore în timp ce dormiți, expediați și pretindeți că nu sunteți responsabil pentru producție. Dacă ați găsit acest lucru util, simțiți-vă liber să-l furați.