Skip to Content
Wagoo SaaS 1.0.25 is released 🎉
07 DeploymentEnvironmentVariables d'environnement

Variables d’environnement

Guide complet des variables d’environnement de production.

Structure des fichiers env

Développement local

.env.local (ne pas commiter)

DATABASE_URL="..." STRIPE_SECRET_KEY="..."

Production

.env.production.local (ne pas commiter)

Ou variables d’environnement du provider (Vercel, etc.)

Variables critiques

Database

DATABASE_URL="postgresql://user:password@host:5432/dbname"
  • Format Prisma
  • Doit ĂŞtre accessible
  • Avec HTTPS si possible

Authentication

BETTER_AUTH_SECRET="un-secret-très-long-et-aléatoire-min-32-char" BETTER_AUTH_URL="https://monsite.com"
  • Secret : gĂ©nĂ©ration alĂ©atoire (min 32 caractères)
  • URL : l’URL publique de votre site

Générer un secret

# macOS/Linux openssl rand -base64 32 # Windows [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((New-Guid).ToString())) | Select-Object -First 32

OAuth GitHub (Optionnel)

GITHUB_ID="..." GITHUB_SECRET="..."
  1. GitHub Settings → Developer settings → OAuth Apps
  2. New OAuth App
  3. Autorization callback URL : https://monsite.com/api/auth/callback/github
  4. Copiez Client ID et Secret

OAuth Google (Optionnel)

GOOGLE_ID="..." GOOGLE_SECRET="..."
  1. Google Cloud Console → Credentials
  2. New OAuth 2.0 Client ID
  3. Authorized redirect URIs : https://monsite.com/api/auth/callback/google
  4. Copiez Client ID et Secret

Stripe

NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_..." STRIPE_SECRET_KEY="sk_live_..." STRIPE_WEBHOOK_SECRET="whsec_..."
  • Public key : pour les clients (safe)
  • Secret key : serveur uniquement (secret!)
  • Webhook secret : pour les webhooks

Mode Live (pas test!)

Email (Optionnel)

SMTP_HOST="smtp.gmail.com" SMTP_PORT="587" SMTP_USER="votre-email@gmail.com" SMTP_PASSWORD="app-specific-password" SMTP_FROM="noreply@monsite.com"

Pour les emails de notification :

  • Nouvelles applications
  • RĂ©initialisations de mot de passe
  • Invitations Ă©quipe

Node Environment

NODE_ENV="production"

Toujours production en prod!

Variables optionnelles

Logging

LOG_LEVEL="info" ENABLE_DEBUG_LOGS="false"

Rate Limiting

RATE_LIMIT_REQUESTS="100" RATE_LIMIT_WINDOW="60"

Avec Redis pour l’efficacité

CDN

NEXT_PUBLIC_CDN_URL="https://cdn.monsite.com"

Pour les images optimisées

Sécurité des variables

âś… Faire

  • Utiliser un gestionnaire de secrets (Vercel, AWS Secrets Manager)
  • Variables diffĂ©rentes pour dev/staging/prod
  • Rotation des secrets rĂ©gulièrement
  • Audit des accès
  • Chiffrement au repos

❌ Ne pas faire

  • Hard-coder les secrets
  • Commiter .env files
  • Partager les secrets par email
  • MĂŞme secrets dev et prod
  • Secrets dans Git

Vercel : Configurer les variables

Via Dashboard

  1. Vercel → Project Settings → Environment Variables

  2. Cliquez Add New

  3. Remplissez :

    • Key : DATABASE_URL
    • Value : postgresql://...
    • Scope : Production (sĂ©lectionner)
  4. Cliquez Save

  5. Redéployez

Via CLI

# Installer Vercel CLI npm i -g vercel # Se connecter vercel login # Ajouter une variable vercel env add DATABASE_URL # Lister les variables vercel env ls # Retirer une variable vercel env rm DATABASE_URL

Autres providers

AWS Lambda / RDS

Variables dans AWS Systems Manager → Parameter Store

DigitalOcean App Platform

Variables dans l’app settings

Render.com

Variables dans le dashboard

Railway.app

Variables dans le project settings

Vérifier les variables

Localement

# Voir les variables env | grep STRIPE # Ou créer un script de vérification node -e "console.log(process.env.STRIPE_SECRET_KEY ? 'OK' : 'MISSING')"

En production

Créez une page de debug (à retirer en prod) :

// pages/api/debug/env.ts export default function handler(req, res) { if (process.env.NODE_ENV !== 'production') { return res.status(200).json({ database: process.env.DATABASE_URL ? 'OK' : 'MISSING', stripe: process.env.STRIPE_SECRET_KEY ? 'OK' : 'MISSING', auth: process.env.BETTER_AUTH_SECRET ? 'OK' : 'MISSING', }) } res.status(403).json({ error: 'Not available in production' }) }

Migration depuis dev vers prod

1. Créer les secrets prod

  1. Dans votre provider (Vercel, etc.)
  2. Ajouter toutes les variables du .env.local
  3. Valeurs correctes pour production

2. Tester localement

# Simuler la prod localement NODE_ENV=production DATABASE_URL="..." pnpm build NODE_ENV=production pnpm start

3. Déployer

git push origin main # Vercel redéploie automatiquement

Dépannage

”Cannot connect to database"

# Vérifier DATABASE_URL # Bonnes pratiques : DATABASE_URL="postgresql://user:password@host:5432/db?sslmode=require" # ^^^^^^^^^^^^^^ # Important pour la sécurité!

"Stripe key invalid"

# Vérifier qu'il s'agit de clés LIVE, pas TEST STRIPE_SECRET_KEY="sk_live_..." # pas sk_test_! NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_..." # pas pk_test_!

"Cannot send email”

# SMTP credentials SMTP_HOST="smtp.gmail.com" SMTP_PORT="587" SMTP_USER="votre-email@gmail.com" SMTP_PASSWORD="votre-app-password" # Pas le mot de passe Gmail normal! SMTP_FROM="noreply@monsite.com"

Checklist avant déploiement

  • âś… DATABASE_URL configurĂ©e et testĂ©e
  • âś… BETTER_AUTH_SECRET gĂ©nĂ©rĂ© et long (min 32 char)
  • âś… BETTER_AUTH_URL = production URL
  • âś… STRIPE_SECRET_KEY = clĂ© LIVE (sk_live_)
  • âś… STRIPE_WEBHOOK_SECRET configurĂ©
  • âś… NODE_ENV = production
  • âś… Toutes les OAuth keys configurĂ©es
  • âś… Email SMTP testĂ©e (si utilisĂ©e)
  • âś… Variables diffĂ©rentes de dev
  • âś… Aucun secret en clair

Prochaines étapes

→ Déployer en production → Monitoring

Last updated on