Es muy bonito, me encanta la base. Pero en el momento en que vi “Backups” sentado detrás de un plan pagado, mi cerebro hizo lo que hace el cerebro de cada fundador roto: “I can build that.” Y sí, puedes. En el plan libre. Con la automatización real. Sin un servidor. Sin despertar a las 2 de la mañana para recordar “oh sí, debería desechar mi base de datos”. Este artículo muestra cómo he creado Uso , además de todos los molestos pequeños errores que probablemente llegue (por lo que no tiene que). automatic Supabase Postgres backups every 12 hours GitHub Actions Lo que estamos construyendo Una configuración de una vez que: Corre cada 12 horas Se conecta a su base de datos de Supabase Postgres Crea un archivo de copia de seguridad .dump (formato comprimido, correcto) Lo almacena en un repo privado de GitHub como archivos de versión No hay plan de Supabase pagado. No hay servicios de terceros. No hay VPS. Sólo GitHub hace el trabajo aburrido. Lo único que tienes que entender Una base de datos es como un paraguas. Si esperas hasta que empiece a llover, ya estás mojado. También, "Sólo lo recrearé" es una mentira que te dices a ti mismo cuando nunca la has recreado, el plan gratuito de Supabase es básicamente un agujero negro, si te hackean, no hay historia para retroceder. Paso 0: Crear un repo privado Creación a El repositorio de GitHub llamó algo como: private miapp-db Backups de seguridad Descargar Backups notpayingforshiii-db-backups (si eres mío) Este repo almacenará sus archivos de seguridad. GitHub repo dedicado a los backups Paso 1: Obtenga la cadena de conexión correcta de Supabase (esta parte importa) Ir a su proyecto de base de datos: y Settings → Database → Connection string Aquí está la trampa: Use Session Pooler (no Direct) Si estás en el plan gratuito, Supabase a menudo muestra: Conexión directa: No es compatible con IPv4 Sesión: compatible con IPv4 Los corredores de GitHub suelen ser IPv4.Si usa Direct, su flujo de trabajo fracasará y pensará que el universo te odia. El set: Método: Pooler de sesión Tipo de URI Obtendrá una cadena de conexión como: postgresql://postgres.<your-project-ref>:YOUR_PASSWORD@aws-1-<region>.pooler.supabase.com:5432/postgres Es importante: Reemplaza el localizador de [YOUR-PASSWORD] con su contraseña de Supabase, si no la recuerda, hay un enlace de restablecimiento de contraseña db en la ventana popup de esa conexión. Paso 2: Agregue la cadena de conexión como un secreto de GitHub En su GitHub repo: Settings → Secrets and variables → Actions → New repository secret Crea un secreto: Nombre: SUPABASE_DB_URL Valor: pega la cadena de conexión Pooler de sesión completa No agregue espacios adicionales. No añada una nueva línea. No se sienta bonito. Añade su secreto Paso 3: Agregar el archivo de flujo de trabajo de GitHub Actions En tu repo, crea este archivo: .github/workflows/backup.yml Sí, incluidos los puntos. GitHub creará las carpetas automáticamente. Descarga el flujo de trabajo 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 la versión de Supabase DB Postgres Instala la combinación pg_dump Crear un archivo .dump Compromételo en tu repo Esta versión es : si Supabase actualiza Postgres más tarde, el flujo de trabajo se adapta. future-proof Paso 4: Dar permiso a GitHub Actions para empujar Hacer esto , porque el backup fallará cuando intente Regreso a tu repo. before you run the workflow save (commit + push) the database dump Aquí está cómo permitirlo: Repo → Configuración → Acciones → General → Permisos de flujo de trabajo Seleccione: ✅ Permisos de leer y escribir Clique . Save Paso 5: Executarlo manualmente una vez Ahora, pruebe para asegurarse de que funciona antes de descansar fácilmente. Vaya a tu repo: Actions → Supabase Backup → Run workflow Si lo consigue: Verá una nueva carpeta: backups/ Un archivo como: supabase_2026-01-24_00-15.dump ¿Y las cajas de almacenamiento? Este soporte es para tu . Postgres database No incluye: Archivos de almacenamiento de Supabase (imágenes, videos, cargas) Código de funciones Edge Los logos Si también necesita copias de seguridad de almacenamiento, necesitará un proceso separado (sincronización compatible con S3 o un script - podría extender esto para hacer todo esto, pero sólo necesitaba la base de datos en mi caso). Bonus: Mantenga su repo de crecer para siempre (opcional) Si no desea que se acumulen copias de seguridad infinitas, puede borrar archivos antiguos automáticamente (cuida los últimos 30, por ejemplo). Pensamientos finales No necesita un plan de pago para tener copias de seguridad para adultos. Sólo necesitas: El nuevo GitHub repo Un secreto Un flujo de trabajo Un permiso Toggle Y ahora tu base de datos tiene copias de seguridad cada 12 horas mientras duermes, envias y finges que no eres responsable de la producción. Si has encontrado esto útil, siéntate libre de robarlo.