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 32OAuth GitHub (Optionnel)
GITHUB_ID="..."
GITHUB_SECRET="..."- GitHub Settings → Developer settings → OAuth Apps
- New OAuth App
- Autorization callback URL :
https://monsite.com/api/auth/callback/github - Copiez Client ID et Secret
OAuth Google (Optionnel)
GOOGLE_ID="..."
GOOGLE_SECRET="..."- Google Cloud Console → Credentials
- New OAuth 2.0 Client ID
- Authorized redirect URIs :
https://monsite.com/api/auth/callback/google - 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
.envfiles - Partager les secrets par email
- MĂŞme secrets dev et prod
- Secrets dans Git
Vercel : Configurer les variables
Via Dashboard
-
Vercel → Project Settings → Environment Variables
-
Cliquez Add New
-
Remplissez :
- Key :
DATABASE_URL - Value :
postgresql://... - Scope :
Production(sélectionner)
- Key :
-
Cliquez Save
-
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_URLAutres 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
- Dans votre provider (Vercel, etc.)
- Ajouter toutes les variables du
.env.local - Valeurs correctes pour production
2. Tester localement
# Simuler la prod localement
NODE_ENV=production DATABASE_URL="..." pnpm build
NODE_ENV=production pnpm start3. Déployer
git push origin main
# Vercel redéploie automatiquementDé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