Aller au contenu

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 :

# Variables d'environnement
.env
.env.*
!.env.example

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

  1. Localement : créer/modifier le fichier .env.prod avec les valeurs de production
  2. Stocker le fichier comme secret GitHub :
    gh secret set DOTENV_FILE --repo EpitechAfrik/alert-parent-backend < .env.prod
    
  3. Le pipeline reconstruit le .env sur le VPS à chaque déploiement :
    echo "${{ secrets.DOTENV_FILE }}" > /root/projects/alert-parent/alert-parent-backend/.env
    
  4. Docker Compose charge le .env via env_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) :

gh secret list --repo EpitechAfrik/alert-parent-backend

Bonnes pratiques

  1. Un fichier .env.prod par projet : conservé localement par les développeurs habilités, jamais partagé via des canaux non sécurisés
  2. Documenter dans .env.example : toute nouvelle variable doit être ajoutée au template avec CHANGE_ME
  3. Vérifier après déploiement : si le backend ne démarre pas, la première chose à vérifier est le contenu du .env sur le VPS
  4. Rotation des secrets : lors du changement d'un mot de passe ou token, mettre à jour .env.prod et re-uploader DOTENV_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 :

  1. Le secret DOTENV_FILE n'est pas défini : gh secret list --repo ...
  2. Le chemin dans le workflow est incorrect (vérifier les chemins absolus)
  3. Le secret a été supprimé par erreur