Déploiement
Déploiement • Chapitre 6 : Déploiement d'une API REST

Gestion des variables d'environnement (API)

Verrouillez les secrets capitaux de votre API backend : chaînes de connexion SQL, clés privées JWT, clés d'API Stripe et identifiants SMTP via un fichier .env hermétique et validé au démarrage.

🔐
Zéro Secret dans Git

Le fichier .env ne doit JAMAIS apparaître dans un commit ou sur GitHub.

🛡️
Validation au Boot

Vérification stricte de la présence de toutes les clés obligatoires avant d'écouter.

🔒
Droits Système 600

Empêcher tout utilisateur autre que le propriétaire de lire le fichier de variables.

🔄
Redémarrage Requis

Toute modification d'une variable dans .env exige un redémarrage du processus PM2.

env-validation.ts
import dotenv from 'dotenv';
// Charger les variables depuis le fichier .env
dotenv.config();

// Fonction de validation des variables d'environnement critiques
function validateEnv() {
  const required = [
    'DATABASE_URL',
    'JWT_SECRET',
    'PORT',
    'CORS_ORIGIN'
  ];

  const missing = required.filter((key) => !process.env[key]);

  if (missing.length > 0) {
    console.error(`❌ ERREUR FATALE: Variables d'environnement manquantes: ${missing.join(', ')}`);
    process.exit(1); // Arrêt immédiat avant tout comportement imprévu
  }

  // Vérifier la robustesse de la clé secrète JWT
  if (process.env.JWT_SECRET!.length < 32) {
    console.warn('⚠️ AVERTISSEMENT: JWT_SECRET est trop court (minimum 32 caractères recommandés) !');
  }
}

validateEnv();
console.log('✅ Configuration de production validée avec succès.');

Guide Approfondi & Architecture Système

1. Pourquoi les variables d'une API sont-elles différentes du Frontend ?

Rappel fondamental de sécurité :
  • Dans une application React ou Angular, le fichier .env est intégré dans le JavaScript envoyé au navigateur. Tout visiteur peut l'extraire.
  • Dans une API Node.js ou PHP, le code s'exécute exclusivement sur le serveur. L'internaute ne reçoit que les réponses JSON : vos identifiants de base de données ne quittent jamais la machine.

2. La Procédure du Modèle .env.example

Puisque votre fichier .env est dans .gitignore, comment les autres développeurs ou le serveur savent-ils quelles variables sont indispensables ?

Vous devez commiter un fichier .env.example documentant les variables requises avec des valeurs factices :

NODE_ENV=production
PORT=3000
DATABASE_URL="mysql://utilisateur:mot_de_passe@127.0.0.1:3306/ma_base"
JWT_SECRET="remplacer_par_une_cle_secrete_aleatoire_de_64_caracteres"

Tableau Récapitulatif : Gestion des Secrets en Production

Plateforme d'HébergementEmplacement des SecretsMécanisme de Chargement
Serveur VPS LinuxFichier /var/www/api/.env (chmod 600)Bibliothèque dotenv ou gestionnaire systemd
Render / RailwaySection 'Environment' du tableau de bordInjecté directement dans le runtime process.env
Vercel (Serverless Functions)Settings > Environment VariablesChiffré au repos et injecté lors de chaque invocation
Docker / KubernetesFichier docker-compose ou Kubernetes SecretsVariables injectées au lancement du conteneur