Déployer Supabase en Production : Checklist et Bonnes Pratiques

Passer de la phase de développement à la production avec Supabase nécessite une préparation rigoureuse. Ce guide couvre la checklist complète pour déployer en production en toute confiance : sécurité, performances, monitoring et CI/CD.

Pour les fondations, consultez notre guide complet Supabase. Pour les migrations de schéma, voir Supabase Migrations. Pour sécuriser les données, voir Supabase RLS. Pour déployer les Edge Functions, voir Edge Functions Supabase. Pour la CLI de déploiement, voir Supabase CLI. Pour le pricing en production, voir Supabase Pricing.

Checklist Pré-Production

✅ Sécurité

  • RLS activée sur toutes les tables exposées à l’API
  • Clé service_role utilisée uniquement côté serveur
  • Variables d’environnement configurées correctement
  • Confirmation email activée pour les nouvelles inscriptions
  • Rate limiting configuré sur l’authentification
  • CORS limité aux domaines autorisés

✅ Base de données

  • Toutes les migrations appliquées et testées
  • Index créés sur les colonnes fréquemment utilisées
  • Backup automatique activé (quotidien minimum)
  • Connection pooling configuré (PgBouncer)

✅ Performance

  • Plan tarifaire adapté (Pro minimum recommandé)
  • Edge Functions déployées dans la bonne région
  • Images optimisées avec les transformations Storage
  • Cache-Control configuré sur les buckets publics

Choisir le Bon Plan Supabase

Plan Prix Limites Usage recommandé
Free 0€/mois 500 MB DB, 2 projets actifs Dev, prototypes, MVP
Pro 25$/mois 8 GB DB, backups quotidiens Startups, apps en prod
Team 599$/mois Ressources dédiées, SOC2 Entreprises, scale-ups

⚠️ Les projets Free sont mis en pause après 1 semaine d’inactivité. Passez au plan Pro pour la production.

Configuration des Environnements

# Projets Supabase séparés
- mon-app-dev      → Développement local + tests
- mon-app-staging  → Tests d'intégration, pre-prod
- mon-app-prod     → Production (accès limité)

CI/CD avec GitHub Actions

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches: [main]

jobs:
  migrate-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - uses: supabase/setup-cli@v1
        with:
          version: latest
      
      - name: Lint SQL migrations
        run: supabase db lint
      
      - name: Apply migrations (staging)
        run: supabase db push --project-ref ${{ secrets.STAGING_PROJECT_REF }}
        env:
          SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
      
      - name: Run E2E tests
        run: npm run test:e2e
      
      - name: Apply migrations (production)
        run: supabase db push --project-ref ${{ secrets.PROD_PROJECT_REF }}
        env:
          SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}
      
      - name: Deploy Edge Functions
        run: supabase functions deploy --project-ref ${{ secrets.PROD_PROJECT_REF }}
        env:
          SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}

Connection Pooling avec PgBouncer

// Port 5432 = connexion directe (serveurs stables)
// Port 6543 = PgBouncer (fonctions serverless, Edge Functions)

// Connection string pour les migrations (connexion directe)
DATABASE_URL=postgresql://postgres:[password]@db.[ref].supabase.co:5432/postgres

// Connection string pour l'app (via pooler)
DATABASE_URL=postgresql://postgres:[password]@db.[ref].supabase.co:6543/postgres?pgbouncer=true

Monitoring et Alertes

-- Analyser les requêtes lentes
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
WHERE mean_exec_time > 100 -- Plus de 100ms
ORDER BY mean_exec_time DESC
LIMIT 20;

-- Vérifier les index manquants
SELECT schemaname, tablename, indexname, idx_scan
FROM pg_stat_user_indexes
ORDER BY idx_scan ASC;

-- Vacuum et analyze pour maintenir les performances
VACUUM ANALYZE posts;
ANALYZE profiles;

Backup et Disaster Recovery

# Export manuel de la base de données
pg_dump \
  --no-acl \
  --no-owner \
  -h db.[ref].supabase.co \
  -U postgres \
  -d postgres \
  > backup-$(date +%Y%m%d).sql

👉 Articles du guide Supabase

Cet article fait partie du Guide Complet Supabase 2026. Retrouvez les autres articles :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *