C’est génial, j’aime la base. Mais au moment où j'ai vu "Backups" assis derrière un plan payant, mon cerveau a fait ce que fait le cerveau de chaque fondateur brisé: “I can build that.” Et oui, vous pouvez. Sur le plan gratuit. Avec une véritable automatisation. Sans serveur. Sans se réveiller à 2 heures du matin pour se rappeler "oh oui, je devrais jeter ma base de données." Cet article montre comment j'ai créé Utiliser , ainsi que toutes les petites erreurs ennuyeuses que vous allez probablement rencontrer (vous n'avez donc pas à). automatic Supabase Postgres backups every 12 hours GitHub Actions Ce que nous construisons Une mise en place unique qui : Courir toutes les 12 heures Se connecter à votre base de données Supabase Postgres Créer un fichier de sauvegarde .dump (comprimé, au format approprié) Enregistre dans un repo GitHub privé en tant que fichiers versionnés Pas de plan Supabase payant. Pas de services tiers. Pas de VPS. Juste GitHub fait le travail ennuyeux. La seule chose que vous devez comprendre Une base de données est comme un parapluie. Si vous attendez que la pluie commence, vous êtes déjà mouillé. Aussi, "Je vais juste le recréer" est un mensonge que vous vous dites quand vous ne l'avez jamais recréé, le plan gratuit de Supabase est fondamentalement un trou noir, si vous êtes piraté, il n'y a pas d'histoire à revenir. Étape 0 : Créer un repo privé Créer une Le dépôt GitHub a appelé quelque chose comme: private Les backups myapp-db Les backups notpayingforshiii-db-backups (si vous êtes moi) Ce repo stockera vos fichiers de sauvegarde. GitHub repo dédié aux backups Étape 1: Obtenez la bonne chaîne de connexion Supabase (cette partie compte) Accédez à votre projet de base: à Settings → Database → Connection string Et voici le piège : Utiliser Session Pooler (non Direct) Si vous êtes sur le plan gratuit, Supabase montre souvent: Connexion directe : Non IPv4 compatible Session pooler : IPv4 compatible Les utilisateurs de GitHub sont généralement IPv4.Si vous utilisez Direct, votre workflow échouera et vous penserez que l'univers vous hait. Séance : Méthode : Session Pooler Type : URI Vous obtiendrez une chaîne de connexion comme : postgresql://postgres.<your-project-ref>:YOUR_PASSWORD@aws-1-<region>.pooler.supabase.com:5432/postgres Important : Remplacez le locataire [YOUR-PASSWORD] par votre mot de passe Supabase, si vous ne vous en souvenez pas, il y a un lien de réinitialisation de mot de passe db sur le pop-up de cette connexion. Étape 2: Ajoutez la chaîne de connexion en tant que secret GitHub Dans votre GitHub repo : Settings → Secrets and variables → Actions → New repository secret Créer un secret : Nom du site : SUPABASE_DB_URL Valeur : coller la chaîne de connexion Pooler de session complète N’ajoutez pas d’espaces supplémentaires. N’ajoutez pas de newline. Donnez votre secret Étape 3: Ajouter le fichier de flux de travail GitHub Actions Dans votre repo, créez ce fichier : .github/workflows/backup.yml Oui, y compris les points. GitHub créera automatiquement les dossiers. Maintenant, insérez ce flux de travail 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: Détecter la version de Supabase DB Postgres Installez le matching pg_dump Créer un fichier .dump Mettez-le dans votre repo Cette version est Si Supabase met à niveau Postgres plus tard, le flux de travail s’adapte. future-proof Étape 4: Donnez à GitHub Actions la permission de pousser Faites ceci , parce que la sauvegarde échouera lorsqu'elle tente de Retour à votre repo. before you run the workflow save (commit + push) the database dump Voici comment l’activer : Repo → Paramètres → Actions → Général → Permis de flux de travail Sélectionnez : ✅ Autorisations de lecture et d'écriture Cliquez sur . Save Étape 5 : Exécuter manuellement une fois Maintenant, testez-le pour vous assurer qu'il fonctionne avant de vous reposer facilement. Rendez-vous à votre repo : Actions → Supabase Backup → Run workflow Si ça réussit : Vous verrez un nouveau dossier : Backups/ Un fichier comme: supabase_2026-01-24_00-15.dump Qu’en est-il des bureaux de stockage ? Ce support est pour votre . Postgres database Il ne comprend pas : Fichiers de stockage de Supabase (images, vidéos, téléchargements) Le code de fonction Edge Les logs Si vous avez besoin de sauvegardes de stockage aussi, vous aurez besoin d'un processus distinct (synchronisation compatible S3 ou un script - pourrait étendre cela pour faire tout cela, mais je n'avais besoin que de la base de données dans mon cas). Bonus : Gardez votre repo de croître pour toujours (facultatif) Si vous ne voulez pas que des sauvegardes infinies s'accumulent, vous pouvez supprimer automatiquement les fichiers plus anciens (maintenir les 30 derniers, par exemple). Pensées finales Vous n'avez pas besoin d'un plan payant pour avoir des sauvegardes pour adultes. Vous avez juste besoin : Le GitHub repo Un secret Un flux de travail Une autorisation de parcours Et maintenant, votre base de données a des sauvegardes toutes les 12 heures pendant que vous dormez, que vous expédiez et que vous faites semblant de ne pas être responsable de la production. Si vous trouvez cela utile, soyez libre de le voler.