Supabase er fantastisk.Jeg elsker Supabase. Men det øjeblik jeg så "Backups" sidder bag en betalt plan, gjorde min hjerne, hvad hver brudt grundlæggerens hjerne gør: “I can build that.” Og ja, du kan. På den gratis plan. Med reel automatisering. Uden en server. Uden at vågne op klokken 2 at huske "oh ja, jeg skal dump min database." Denne artikel viser, hvordan jeg oprettede Brug af , plus alle de irriterende små fejl, du sandsynligvis vil ramme (så du behøver ikke). automatic Supabase Postgres backups every 12 hours GitHub Actions Hvad vi bygger Et engangssæt, der: Løber hver 12. time Opret forbindelse til din Supabase Postgres-database Opret en .dump backup-fil (komprimeret, korrekt format) Gemmer det i en privat GitHub repo som versionerede filer Ingen betalt Supabase-plan. ingen tredjepartstjenester. ingen VPS. Bare GitHub gør det kedelige arbejde. Det eneste du skal forstå En database backup er som et paraply. Hvis du venter på, at det begynder at regne, er du allerede våd. Også, "Jeg vil bare genskabe det" er en løgn, du fortæller dig selv, når du aldrig har genskabt det, Supabase gratis plan er grundlæggende et sort hul, hvis du bliver hacket, er der ingen historie at falde tilbage til. Trin 0: Opret en privat repo Oprette a GitHub repository kaldte noget som: private af myapp-db-backups Bæredygtige backups notpayingforshiii-db-backups (hvis du er mig) Denne repo vil gemme dine backup filer. GitHub repo dedikeret til backups Trin 1: Få den korrekte Supabase-forbindelsesstreng (denne del betyder noget) Gå til dit Supabase-projekt: af Settings → Database → Connection string Her er fælden: Brug Session Pooler (ikke direkte) Hvis du er på den gratis plan, viser Supabase ofte: Direkte forbindelse: Ikke IPv4-kompatibel Session pooler: IPv4-kompatibel GitHub-kørere er typisk IPv4.Hvis du bruger Direct, vil din arbejdsproces mislykkes, og du vil tro, at universet hader dig. Set af: Metode: Session pooler Type: URI Du får en linkstreng som: postgresql://postgres.<your-project-ref>:YOUR_PASSWORD@aws-1-<region>.pooler.supabase.com:5432/postgres Det vigtige: Udskift pladsholderen [YOUR-PASSWORD] med din Supabase-adgangskode, hvis du ikke kan huske det, er der et link til reset af db-adgangskode på den forbindelse popup. Trin 2: Tilføj forbindelsesstrengen som en GitHub hemmelighed I din GitHub repo: Settings → Secrets and variables → Actions → New repository secret Skab en hemmelighed: Navn: SUPABASE_DB_URL Værdi: Indsæt den fulde Session Pooler-forbindelsesstreng Lad være med at tilføje ekstra rum. Lad være med at tilføje en newline. Lad være med at blive sød. Giv din hemmelighed Trin 3: Tilføj GitHub Actions workflow-filen I din repo skal du oprette denne fil: .github/workflows/backup.yml GitHub opretter mapperne automatisk. Indsæt nu denne fulde arbejdsproces: 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: Opdager Supabase DB Postgres version Sådan installeres matchende pg_dump Opret en .dump fil Indsæt det i din repo Denne version er Hvis Supabase opgraderer Postgres senere, tilpasser arbejdsprocessen sig. future-proof Trin 4: Giv GitHub Actions tilladelse til at trykke Gør dette , fordi backup vil mislykkes, når det forsøger at Tilbage til din repo. before you run the workflow save (commit + push) the database dump Her er hvordan man gør det muligt: Repo → Settings → Actions → General → Workflow tilladelser Vælg: ✅ Læs og skriv tilladelser Klik på . Save Trin 5: Kør det manuelt én gang Prøv det nu for at sikre, at det virker, før du hviler let. Gå til din repo: Actions → Supabase Backup → Run workflow Hvis det lykkes: Du vil se en ny mappe: Backups/ En fil som: supabase_2026-01-24_00-15.dump Hvad med opbevaringsbuckets? Denne backup er til din . Postgres database Det omfatter ikke: Supabase Storage filer (billeder, videoer, uploads) Edge funktionskode Logs Hvis du også har brug for lagringsbackups, vil du have en separat proces (S3-kompatibel synkronisering eller et script - kunne udvide dette til at gøre alt dette, men jeg havde kun brug for databasen i mit tilfælde). Bonus: Hold din repo fra at vokse for evigt (valgfrit) Hvis du ikke vil have uendelige sikkerhedskopier stablet op, kan du slette ældre filer automatisk (hold sidste 30, for eksempel). Afsluttende tanker Du behøver ikke en betalt plan for at have voksen backups. Du behøver kun: En GitHub repo En hemmelighed En arbejdsgang En tilladelse toggle Og nu har din database backups hver 12. time, mens du sover, skib, og foregiver, at du ikke er ansvarlig for produktion. Hvis du fandt dette nyttigt, så føl dig fri til at stjæle det.