Kodokon kodokon.com

Configuration et secrets

Sortez la configuration du code avec dotenv, séparez développement et production et gardez vos secrets hors de Git.

8 min · 3 questions

Ouvrir cette leçon dans Kodokon

Le port d'écoute, l'URL de la base, les clés d'API : rien de tout cela n'a sa place dans le code source. Ces valeurs changent entre votre machine et la production, et certaines sont des secrets. La solution standard : les variables d'environnement, chargées depuis un fichier .env en développement. Installez dotenv avec npm install dotenv, puis créez le fichier à la racine du projet.

BASH
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=changez-cette-valeur
.env - une variable par ligne

Importez dotenv/config au tout début de votre point d'entrée : les variables du fichier sont copiées dans process.env. Bonne habitude professionnelle : centralisez la lecture dans un module de configuration unique, validez les variables au démarrage et échouez immédiatement si l'une manque. Un serveur qui refuse de démarrer vaut mieux qu'un serveur qui plante à la première requête.

JAVASCRIPT
import "dotenv/config";

const required = ["PORT", "SESSION_SECRET"];

for (const name of required) {
  if (!process.env[name]) {
    throw new Error("Variable manquante : " + name);
  }
}

export const config = {
  port: Number(process.env.PORT),
  secret: process.env.SESSION_SECRET,
  isProd: process.env.NODE_ENV === "production"
};
config.js - le seul module qui lit process.env

En production, pas de fichier .env : l'hébergeur fournit les vraies valeurs, et NODE_ENV vaut production. Utilisez config.isProd pour adapter le comportement : journaux détaillés en développement, messages d'erreur sobres en production. Committez aussi un fichier .env.example listant les variables attendues avec des valeurs factices : il documente la configuration sans exposer les secrets.

JAVASCRIPT
import express from "express";
import { config } from "./config.js";

const app = express();

if (!config.isProd) {
  console.log("Mode développement");
}

app.listen(config.port, () => {
  console.log("Port : " + config.port);
});
server.js - le reste du code ignore process.env

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Où placez-vous le mot de passe de la base de données ?
    • Dans une constante du code source
    • Dans un fichier .env ignoré par Git
    • Dans le README du projet
    • Dans un commentaire du fichier de configuration
  2. Quel est le rôle du fichier .env.example ?
    • Contenir les vraies valeurs de secours
    • Documenter les variables attendues, sans valeurs sensibles
    • Configurer l'environnement de test
  3. Un secret a été commité par erreur. Que faites-vous en priorité ?
    • Supprimer le commit et passer à autre chose
    • Révoquer le secret et en générer un nouveau
    • Ajouter le fichier au .gitignore