Service en ligne 100% Gratuit Utilitaires Web AngularForAll

- Générateur de fichier .env en ligne

Générateur Fichier Env En Ligne Dotenv Generator Online Créer Fichier Env Exemple Variables Environnement Node.js Env Example Laravel Django

Créez votre fichier .env et .env.example en ligne. Presets Node.js, Laravel, Django, Next.js, Symfony, Vite. Ajoutez vos variables, marquez les secrets, téléchargez. 100% client-side.

⚙️

Générateur de fichier .env

Charger un preset :

⚙️ Variables

🔒 = variable secrète (masquée dans .env.example)

📄 Aperçu .env

Le fichier .env : principe et fonctionnement

Le fichier .env est devenu l'un des éléments les plus essentiels de toute application web moderne. Il centralise les variables d'environnement — ces paramètres qui varient selon le contexte d'exécution (développement, staging, production) et qui ne doivent jamais être codés en dur dans le code source.

Historique : la méthodologie Twelve-Factor App

En 2012, Adam Wiggins et l'équipe Heroku formalisent les bonnes pratiques du développement cloud-native dans le manifeste 12 Factor App. Le facteur III stipule clairement : "Store config in the environment". La règle d'or : la configuration varie selon les déploiements, le code non.

En 2013, le package dotenv pour Node.js (créé par Brandon Keepers) popularise le fichier .env comme mécanisme standard. Chaque écosystème a depuis développé son équivalent : python-dotenv, vlucas/phpdotenv, godotenv, dotenv-rails

Fonctionnement technique

Au démarrage de l'application, la bibliothèque dotenv lit le fichier .env à la racine du projet et injecte chaque paire CLÉ=valeur dans les variables d'environnement du processus. Ces variables sont ensuite accessibles via :

Langage / FrameworkBibliothèqueAccès à la variable
Node.jsdotenvprocess.env.MA_VARIABLE
PHP (Laravel)vlucas/phpdotenvenv('MA_VARIABLE') ou $_ENV
Python (Django)python-dotenvos.environ.get('MA_VARIABLE')
Next.js / ViteIntégré au frameworkprocess.env.NEXT_PUBLIC_X / import.meta.env.VITE_X
Gogodotenvos.Getenv("MA_VARIABLE")
Ruby on Railsdotenv-railsENV['MA_VARIABLE']
Principe de non-écrasement : la plupart des implémentations dotenv ne remplacent pas les variables déjà définies dans le shell. Si PORT=8080 est défini dans l'environnement OS, il prendra la précédence sur la valeur du .env.

Syntaxe et règles du format .env

Le format .env semble trivial mais cache plusieurs subtilités importantes qui varient selon les implémentations.

Structure de base

# Commentaire (ligne entière)
VARIABLE_SIMPLE=valeur
PORT=3000
NODE_ENV=development

# Valeurs avec espaces → guillemets obligatoires
APP_NAME="Mon Application Web"

# Guillemets simples → valeur littérale (pas d'interpolation)
MESSAGE='Hello ${USER}'

# Valeur vide (autorisée)
DB_PASSWORD=

Règles d'échappement et guillemets

Le comportement des guillemets diffère selon les bibliothèques, mais la convention la plus répandue est :

SyntaxeComportementExemple
KEY=valeur Valeur brute, espaces ignorés PORT=3000
KEY="valeur" Guillemets doubles : interpole \n, \t, $VAR MSG="Hello\nWorld"
KEY='valeur' Guillemets simples : valeur littérale, pas d'interpolation REGEX='^\d{4}$'
# commentaire Ligne ignorée entièrement # Production URL

Interpolation de variables

Certaines bibliothèques (dotenv-expand, Laravel, Symfony) supportent la référence de variables définies dans le même fichier :

APP_NAME="MonApp"
APP_URL=http://localhost

# Référence à APP_NAME dans une autre variable
MAIL_FROM_NAME="${APP_NAME} Notifications"
# → Résultat : "MonApp Notifications"

Valeurs multiligne (avancé)

Pour les clés privées RSA ou certificats, le saut de ligne s'encode avec \n ou avec des guillemets doubles autour d'un vrai saut de ligne :

# Méthode 1 : \n explicite (plus compatible)
PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANB...\n-----END PRIVATE KEY-----"

# Méthode 2 : guillemets double + vrai saut de ligne
PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
MIIEvQIBADANB...
-----END PRIVATE KEY-----"
Compatibilité : la méthode avec \n est recommandée car elle fonctionne avec toutes les implémentations dotenv, y compris sur CI/CD où le fichier est souvent injecté comme variable de pipeline.

Variables par écosystème

Chaque framework impose ses conventions sur le nommage et le chargement des variables d'environnement. Voici les spécificités essentielles.

Node.js avec dotenv

# Installation
npm install dotenv

# Chargement (en tout début de app.js / server.js)
require('dotenv').config();

# Ou en ES modules
import 'dotenv/config';

# Accès
const port = process.env.PORT || 3000;
const dbUrl = process.env.DATABASE_URL;

Depuis Node.js 20.6+, vous pouvez charger le .env sans aucune bibliothèque via le flag natif --env-file :

node --env-file=.env server.js

Laravel (PHP)

Laravel utilise vlucas/phpdotenv et expose les valeurs via le helper env() et la fonction config() :

# .env Laravel
APP_KEY=base64:votre-cle-generee-par-artisan
DB_CONNECTION=mysql
DB_HOST=127.0.0.1

# Dans le code PHP
$debug = env('APP_DEBUG', false);
$dbHost = config('database.connections.mysql.host');
Attention : en production, Laravel met en cache la configuration avec php artisan config:cache. Après chaque modification du .env, relancez la commande.

Django (Python)

# Installation
pip install python-dotenv

# settings.py
from dotenv import load_dotenv
import os

load_dotenv()  # charge .env depuis la racine

DEBUG = os.environ.get('DEBUG', 'False') == 'True'
SECRET_KEY = os.environ['SECRET_KEY']  # KeyError si manquant
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': os.getenv('DB_NAME')}}

# Alternative : django-environ (plus puissant)
import environ
env = environ.Env()
environ.Env.read_env()
DATABASE_URL = env('DATABASE_URL')

Next.js : NEXT_PUBLIC_ prefix

Next.js distingue les variables côté serveur des variables exposées au navigateur via le préfixe NEXT_PUBLIC_ :

# Côté serveur uniquement (safe)
DATABASE_URL=postgresql://...
STRIPE_SECRET_KEY=sk_live_...

# Exposé au navigateur (NEXT_PUBLIC_ requis)
NEXT_PUBLIC_API_URL=https://api.example.com
NEXT_PUBLIC_STRIPE_PUBLIC_KEY=pk_live_...

# Accès côté client
const apiUrl = process.env.NEXT_PUBLIC_API_URL;

Vite : VITE_ prefix et import.meta.env

# .env (Vite n'expose QUE les variables VITE_)
VITE_API_BASE_URL=http://localhost:3001
VITE_APP_TITLE=Mon App

# Accès dans React/Vue
const apiUrl = import.meta.env.VITE_API_BASE_URL;
const isDev  = import.meta.env.DEV;       // built-in
const isProd = import.meta.env.PROD;      // built-in
const mode   = import.meta.env.MODE;      // 'development' | 'production'

Symfony : .env en cascade

Symfony gère plusieurs fichiers .env en cascade avec une priorité définie :

FichierCommitéUsage
.env✅ OuiValeurs par défaut du projet
.env.local❌ NonSurcharges locales (jamais en prod)
.env.test✅ OuiValeurs spécifiques aux tests
.env.prod❌ NonVariables de production (serveur)
.env.prod.local❌ NonSecrets de production locaux

Sécurité : ne jamais committer son .env

La règle d'or est absolue : le fichier .env ne doit jamais être versionné. Les conséquences d'une fuite peuvent être catastrophiques : accès à vos bases de données, usurpation de votre identité sur des APIs tierces, frais AWS exorbitants.

Configuration .gitignore obligatoire

# .gitignore
.env
.env.local
.env.*.local
.env.production
!.env.example   # Committer UNIQUEMENT le template sans secrets
  • Ajouter .env au .gitignore dès git init
  • Vérifier avec git status que le fichier est bien ignoré
  • Scanner l'historique git : git log --all -- .env
  • Si commité par erreur : révoquer tous les secrets immédiatement
  • Utiliser git filter-repo pour purger l'historique (jamais git rewrite sans sauvegarde)

Outils de détection de secrets

# git-secrets (AWS)
git secrets --install
git secrets --add 'password\s*=\s*.+'

# truffleHog (scan de l'historique git)
trufflehog git file://. --since-commit HEAD~10

# detect-secrets (Yelp)
detect-secrets scan --update .secrets.baseline
detect-secrets audit .secrets.baseline

Gestionnaires de secrets recommandés

Pour les équipes et la production, préférez un gestionnaire de secrets centralisé plutôt que des fichiers .env copiés manuellement :

OutilUsageAvantage clé
HashiCorp VaultEntreprise, self-hostedAudit trail, rotation automatique
AWS Secrets ManagerAWS-nativeIntégration IAM, rotation Lambda
DopplerSaaS multi-envSync env vers CI/CD, Teams
1Password SecretsÉquipes devPartage sécurisé entre développeurs
dotenv-vaultSaaS dotenvChiffrement du .env, CLI simple

Le duo .env / .env.example

La convention du duo .env / .env.example est un standard de facto dans tous les écosystèmes. Elle résout élégamment la tension entre sécurité et documentation.

Principe

FichierCommité dans gitContenu
.env ❌ JAMAIS Vraies valeurs, clés API, mots de passe réels
.env.example ✅ Toujours Template avec toutes les clés, valeurs de démo ou placeholders

Onboarding d'un nouveau développeur

# 1. Cloner le projet
git clone https://github.com/mon-org/mon-projet

# 2. Copier le template
cp .env.example .env

# 3. Remplir les valeurs réelles dans .env
nano .env   # ou vim, VS Code…

# 4. Lancer l'application
npm start

Notre générateur inclut un mode "Masquer les valeurs" qui transforme automatiquement votre .env en .env.example : les variables marquées comme secrètes (🔒) reçoivent un placeholder du type your-jwt-secret-here, tandis que les valeurs non-sensibles (ports, modes, URLs locales) sont conservées intactes.

Bonne pratique : dans votre README.md, documentez chaque variable du .env.example avec son rôle, sa valeur attendue et comment l'obtenir. C'est le premier endroit qu'un nouveau collaborateur consultera.

Gestion des secrets en CI/CD

Sur les pipelines CI/CD, vous ne pouvez pas avoir de fichier .env physique. Les secrets sont injectés via les mécanismes natifs de chaque plateforme.

GitHub Actions

# Définir les secrets dans : Settings → Secrets and variables → Actions

# .github/workflows/deploy.yml
jobs:
  deploy:
    steps:
      - name: Build
        env:
          DATABASE_URL: ${{ secrets.DATABASE_URL }}
          JWT_SECRET: ${{ secrets.JWT_SECRET }}
          NODE_ENV: production
        run: npm run build

      # Ou générer un .env à la volée
      - name: Create .env
        run: |
          echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> .env
          echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> .env
          echo "NODE_ENV=production" >> .env

Docker et docker-compose

# Méthode 1 : --env-file (recommandé)
docker run --env-file .env mon-image

# Méthode 2 : variables individuelles
docker run -e PORT=3000 -e NODE_ENV=production mon-image

# docker-compose.yml
services:
  app:
    image: mon-image
    env_file:
      - .env           # .env local
    environment:
      - NODE_ENV=production   # surcharge possible

Kubernetes Secrets

# Créer un secret Kubernetes depuis un fichier .env
kubectl create secret generic app-secrets --from-env-file=.env

# Ou depuis des valeurs individuelles
kubectl create secret generic app-secrets \
  --from-literal=JWT_SECRET=ma-cle-secrete \
  --from-literal=DATABASE_URL=postgresql://...

# Référencer dans un Deployment
env:
  - name: JWT_SECRET
    valueFrom:
      secretKeyRef:
        name: app-secrets
        key: JWT_SECRET
Alternative SaaS : Doppler synchronise automatiquement vos variables d'environnement vers GitHub Actions, Heroku, Vercel et Kubernetes sans jamais exposer les secrets dans votre code. Son CLI remplace le fichier .env localement : doppler run -- npm start.

FAQ

Pourquoi mon .env ne se charge-t-il pas en production ?

En production (Heroku, Vercel, Railway, Docker…), les variables d'environnement sont injectées directement par la plateforme, sans passer par un fichier .env. C'est intentionnel pour la sécurité. Configurez vos variables dans le dashboard ou CLI de votre plateforme.

Quelle différence entre .env et .env.local ?

.env contient les valeurs partagées (peut être commité dans certains frameworks comme Symfony). .env.local est pour les surcharges personnelles du développeur et n'est jamais commité. Les variables de .env.local ont priorité sur .env.

Comment générer une clé secrète sécurisée ?

# OpenSSL (universel)
openssl rand -base64 64

# Node.js
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"

# Python
python -c "import secrets; print(secrets.token_hex(64))"

# PHP
php -r "echo bin2hex(random_bytes(32)) . PHP_EOL;"

Puis-je utiliser des commentaires inline ?

La plupart des implémentations n'supportent pas les commentaires en fin de ligne (PORT=3000 # commentaire). Le # sera inclus dans la valeur. Préférez les commentaires sur des lignes dédiées, au-dessus de la variable.

Comment gérer plusieurs environnements (.env.staging, .env.prod) ?

# Charger un fichier .env spécifique selon l'environnement
NODE_ENV=staging node -r dotenv/config app.js dotenv_config_path=.env.staging

# Ou en code
require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` });

# Avec dotenv-flow (gestion cascade automatique)
npm install dotenv-flow
require('dotenv-flow').config();
# Charge : .env, .env.local, .env.[NODE_ENV], .env.[NODE_ENV].local

Conclusion

Le fichier .env est un pilier fondamental du développement moderne : il sépare proprement la configuration du code, facilite l'onboarding des développeurs et protège vos secrets en production. La pratique du duo .env / .env.example et l'ajout systématique de .env dans le .gitignore sont des réflexes à adopter dès le premier commit.

Pour les équipes en croissance, les gestionnaires de secrets comme Doppler, HashiCorp Vault ou AWS Secrets Manager offrent une solution centralisée, auditée et sans fichier plat sensible sur les machines des développeurs. Notre générateur vous aide à démarrer rapidement avec les conventions de chaque framework et à produire un .env.example documenté pour vos collaborateurs.

Partager