Variables d'environnement et secrets¶
Règle fondamentale¶
Ne jamais commiter de fichiers .env
Les fichiers .env contiennent des secrets (mots de passe, tokens API, clés). Ils ne doivent jamais être commités dans Git.
Configuration .gitignore¶
Chaque projet doit avoir dans son .gitignore :
Cela ignore tous les fichiers .env.* sauf .env.example, qui sert de template.
Fichier .env.example¶
Chaque projet doit fournir un .env.example avec toutes les variables nécessaires et des valeurs placeholder :
# Application
NODE_ENV=production
PORT=5010
# Base de données
MONGO_URI=CHANGE_ME
# Authentification
JWT_SECRET=CHANGE_ME
ADMIN_EMAIL=CHANGE_ME
# Email
RESEND_TOKEN=CHANGE_ME
MAIL_HOST=CHANGE_ME
MAIL_PORT=465
MAIL_ADDR=CHANGE_ME
MAIL_PASS=CHANGE_ME
# URLs
CORS_ORIGIN=https://alert.epitools.bj
FRONT_URL=https://alert.epitools.bj
API_URL=https://api.epitools.bj
Pattern DOTENV_FILE¶
Principe¶
Au lieu de stocker chaque variable d'environnement comme un secret GitHub séparé, on stocke l'intégralité du fichier .env comme un seul secret nommé DOTENV_FILE.
Avantages¶
- Simplicité : un seul secret à gérer par repo
- Cohérence : le fichier .env est toujours complet et cohérent
- Mise à jour facile : modifier le .env local puis re-uploader le secret
- Pas d'oubli : toutes les variables sont présentes à chaque déploiement
Comment ça fonctionne¶
- Localement : créer/modifier le fichier
.env.prodavec les valeurs de production - Stocker le fichier comme secret GitHub :
- Le pipeline reconstruit le
.envsur le VPS à chaque déploiement : - Docker Compose charge le
.envviaenv_file: .env
Mettre à jour les variables¶
# 1. Modifier le fichier .env.prod local
nano .env.prod
# 2. Re-uploader le secret
gh secret set DOTENV_FILE --repo EpitechAfrik/alert-parent-backend < .env.prod
# 3. Relancer le pipeline (ou pousser un commit)
gh run rerun LAST_RUN_ID --repo EpitechAfrik/alert-parent-backend
Vérification¶
Pour vérifier que le secret est bien défini (sans voir sa valeur) :
Bonnes pratiques¶
- Un fichier .env.prod par projet : conservé localement par les développeurs habilités, jamais partagé via des canaux non sécurisés
- Documenter dans .env.example : toute nouvelle variable doit être ajoutée au template avec
CHANGE_ME - Vérifier après déploiement : si le backend ne démarre pas, la première chose à vérifier est le contenu du
.envsur le VPS - Rotation des secrets : lors du changement d'un mot de passe ou token, mettre à jour
.env.prodet re-uploaderDOTENV_FILE
Diagnostic¶
Vérifier le .env sur le VPS¶
ssh root@IP_DU_VPS
cat /root/projects/alert-parent/alert-parent-backend/.env | wc -l
# Doit afficher le nombre de lignes attendu (pas 0 !)
Le .env est vide après déploiement¶
Causes possibles :
- Le secret
DOTENV_FILEn'est pas défini :gh secret list --repo ... - Le chemin dans le workflow est incorrect (vérifier les chemins absolus)
- Le secret a été supprimé par erreur