Acho que é ótimo, adoro a base. Mas no momento em que vi “Backups” sentado por trás de um plano pago, meu cérebro fez o que faz o cérebro de cada fundador quebrado: “I can build that.” E sim, você pode. No plano livre. Com automação real. Sem um servidor. Sem acordar às 2 da manhã para lembrar "oh yeah, eu deveria jogar fora o meu banco de dados". Este post mostra como eu criei Usando , além de todos os pequenos erros irritantes que você provavelmente vai atingir (por isso você não tem que). automatic Supabase Postgres backups every 12 hours GitHub Actions O que estamos construindo Um time de uma vez que: Correr a cada 12 horas Conecte-se ao seu banco de dados Supabase Postgres Cria um arquivo de backup .dump (comprimido, no formato correto) Armazená-lo em um repo privado do GitHub como arquivos de versão Nenhum plano de Supabase pago. Nenhum serviço de terceiros. Nenhum VPS. Apenas o GitHub está fazendo o trabalho chato. A única coisa que você precisa entender Um backup de banco de dados é como um guarda-chuva. Se você esperar até começar a chover, você já está molhado. Além disso, “Eu só vou recriá-lo” é uma mentira que você diz a si mesmo quando você nunca o recriou, o plano grátis Supabase é basicamente um buraco negro, se você for hackeado, não há história para voltar atrás. Passo 0: Crie um repo privado Criando a O repositório do GitHub chamou algo como: private myapp-db backups de segurança Baixar Backups notpayingforshiii-db-backups (se você é eu) Este repo irá armazenar seus arquivos de backup. GitHub repo dedicado a backups Passo 1: Obtenha a cadeia de conexão de Supabase correta (esta parte importa) Acesse a sua base de dados: Não Settings → Database → Connection string Aqui está a armadilha: Use Session Pooler (não direto) Se você estiver no plano gratuito, o Supabase muitas vezes mostra: Conexão direta: Não compatível com IPv4 Sessão: IPv4 compatível Se você usar o Direct, seu fluxo de trabalho falhará e você vai pensar que o universo o odeia. Set em: Método: pooler de sessão Tipo: URI Você receberá uma cadeia de conexão como: postgresql://postgres.<your-project-ref>:YOUR_PASSWORD@aws-1-<region>.pooler.supabase.com:5432/postgres É importante: Substitua o localizador [YOUR-PASSWORD] com sua senha Supabase, se você não se lembrar, há um link de redefinição de senha db na pop-up dessa conexão. Passo 2: Adicione a cadeia de conexão como um segredo do GitHub Em seu GitHub repo: Settings → Secrets and variables → Actions → New repository secret Crie um segredo: Nome do usuário: SUPABASE_DB_URL Valor: colar a cadeia de conexão Pooler de sessão completa Não adicione espaços extras. Não adicione uma nova linha. Não fique bonito. Adicione o seu segredo Passo 3: Adicione o arquivo de fluxo de trabalho de ações do GitHub Em seu repo, crie este arquivo: .github/workflows/backup.yml Sim, incluindo os pontos. O GitHub criará as pastas automaticamente. Confira o fluxo de trabalho 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: Detecta a versão do Supabase DB Postgres Instalação do matching pg_dump Criar um arquivo .dump Envolva-o em seu repo Esta versão é : Se o Supabase atualizar o Postgres mais tarde, o fluxo de trabalho se adapta. future-proof Passo 4: Dê permissão ao GitHub Actions para empurrar Faça isto , porque o backup falhará quando tentar Volte para o seu repo. before you run the workflow save (commit + push) the database dump Aqui está como permitir: Repo → Configurações → Ações → Geral → Permissões de fluxo de trabalho Selecione: ✅ Permissões de leitura e escrita Clique em . Save Passo 5: Execute manualmente uma vez Agora, teste-o para se certificar de que ele funciona antes de descansar facilmente. Vá para o seu repo: Actions → Supabase Backup → Run workflow Se tiver êxito: Você verá uma nova pasta: backups/ Um arquivo como: supabase_2026-01-24_00-15.dump O que dizer dos recipientes de armazenamento? Este backup é para o seu . Postgres database Não inclui: Arquivos de armazenamento do Supabase (imagens, vídeos, carregamentos) Código de função Edge Logos Se você precisar de backups de armazenamento também, você vai querer um processo separado (sincronização compatível com S3 ou um script - poderia estender isso para fazer tudo isso, mas eu só precisava do banco de dados no meu caso). Bônus: Mantenha seu repo de crescer para sempre (opcional) Se você não quiser que cópias de segurança infinitas se acumulem, você pode excluir arquivos mais antigos automaticamente (manter os últimos 30, por exemplo). Pensamentos finais Você não precisa de um plano pago para ter backups para adultos. Você só precisa: O GitHub repo Um segredo Um fluxo de trabalho Uma permissão toggle E agora seu banco de dados tem backups a cada 12 horas enquanto você dorme, envia e finge que você não é responsável pela produção. Se você achou isso útil, sinta-se livre para roubá-lo.