Variables d'environnement
Pour nous simplifier la vie, peut-être avez-vous remarqué que le mot de passe de la base de données Docker est spécifié directement dans le docker-compose. Évidemment, comme cette information est commitée sur git, il faut faire attention.
C'est pourquoi on ne sauvegarde habituellement pas ces informations directement dans le fichier, mais plutôt dans des variables d'environnement.
Les variables d’environnement sont des paires clé-valeur utilisée par le système d’exploitation et les applications pour stocker des informations essentielles sur l’environnement dans lequel elles s’exécutent.
Elles permettent de configurer le comportement des logiciels sans modifier leur code source.
Essentiellement, une variable d’environnement est une donnée stockée dans le système d’exploitation qui peut être utilisée par les programmes en cours d’exécution. Elle contient généralement des informations sur la configuration du système, les chemins d’accès, ou des paramètres spécifiques à une application.
Vous en connaissez déjà peut-être quelques-unes!
PATH
: Indique les répertoires où le système cherche les exécutables.HOME
sur Linux (ou USERPROFILE sur Windows): Indique le répertoire personnel de l’utilisateur.
Créer un fichier .env
En développement, pour simplifier la gestion des variables d'environnement, on peut utiliser un fichier .env
que l'application et docker pourront lire.
Par défaut, docker lira un fichier nommé .env
à la racine du projet. Il lira aussi directement les variables d'environnement au niveau du système d'exploitation si elles sont définies.
-
Créer un fichier
.env
à la racine de la solution (même niveau que docker-compose) et mettez-y les informations dont votre application a besoin lorsqu'exécuté avec docker..envPOSTGRES_DB=snowfall_db
POSTGRES_USER=snowfall_user
POSTGRES_PASSWORD=motdepasse
ASPNETCORE_URLS=http://+:80
DossierStorage=storage-images
APP_DATABASE_CONNECTION="Host=postgres;Port=5432;Database=snowfall_db;Username=snowfall_user;Password=motdepasse"attentionSi vous avez déjà un fichier
.env
, vous pouvez nommer celui-ci.env.docker
.Il vous faudra spécifier le fichier lors de l'exécution de la commande
docker compose
par contre puisqu'il ne s'agit pas du fichier par défaut. -
Assurez-vous d'exclure dans le gitignore le fichier! En effet, les fichiers .env peuvent contenir des données sensibles et on ne veut pas les rendre disponibles sur git.
.gitignore.env
.env.docker -
Modifiez votre fichier
docker-compose.yml
pour qu'il utilise les variables d'environnement. Par exemple:docker-compose.ymlservices:
postgres:
image: postgres:17-alpine
container_name: snowfall_postgres
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
client:
build:
context: .
dockerfile: Snowfall.Web.Mvc/Dockerfile
container_name: snowfall_client
environment:
- ASPNETCORE_URLS=${ASPNETCORE_URLS}
- DossierStorage=${DossierStorage}
- ConnectionStrings__AppDatabaseConnection=${APP_DATABASE_CONNECTION}
expose:
- "80"
volumes:
- shared-images:/storage-images
depends_on:
- postgres
reverse-proxy:
image: nginx:alpine
container_name: reverse_proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- certs:/etc/letsencrypt
- certs-data:/data/letsencrypt
depends_on:
- client
certbot:
image: certbot/certbot
container_name: certbot
volumes:
- certs:/etc/letsencrypt
- certs-data:/data/letsencrypt
volumes:
pgdata:
shared-images:
certs:
certs-data: -
Lorsque vous démarrez docker compose, les variables d'environnement devraient être prises en compte.
Configuration des variables d'environnement sur le serveur
-
Assurez-vous de récupérer la dernière version du code sur le serveur (
git pull
) -
Ajoutez les variables d'environnement au serveur via
export
export POSTGRES_DB=snowfall_db
export POSTGRES_USER=snowfall_user
export POSTGRES_PASSWORD="x2B7)7s+pFY8"
export ASPNETCORE_URLS=http://+:80
export DossierStorage=storage-images
export APP_DATABASE_CONNECTION="Host=postgres;Port=5432;Database=snowfall_db;Username=snowfall_user;Password=x2B7)7s+pFY8"infoAssurez-vous d'utiliser un mot de passe sécuritaire!
-
Démarrez le conteneur à l'aide de
docker compose up
. Postgres ne pourra pas démarrer correctement cependant puisque le mot de passe a changé. Voir l'étape suivante!
Modifier le mot de passe existant
Postgres est déjà configuré avec un mot de passe simple. On doit changer le mot de passe puisque maintenant un nouveau mot de passe sera utilisé via les variables d'environnement.
-
Accéder à Postgres en ligne de commande
docker exec -it snowfall_postgres bash
-
Accédez à
psql
psql -U snowfall_user -d snowfall_db
-
Modifiez le mot de passe
ALTER USER snowfall_user WITH PASSWORD 'NOUVEAU_MOT_DE_PASSE';
attentionUtilisez le même mot de passe que celui de la variable d'environnement!
-
Quittez
psql
\q
-
Quittez le conteneur
exit
Redémarrer le conteneur
Redémarrez le conteneur à l'aide de:
docker compose stop
docker compose start
(ajoutez-d
pour démarrer en arrière-plan)
Tester
Accédez à votre site, le tout devrait être revenu, mais cette fois avec des variables d'environnement! 🎉
Ajouter les variables d'environnement au profil utilisateur
nano ~/.bash_profile
- Ajoutez une section avec les nouvelles variables
# Variables d'environnement pour Docker Compose
export POSTGRES_DB=snowfall_db
export POSTGRES_USER=snowfall_user
export POSTGRES_PASSWORD=votremotdepasse
export ASPNETCORE_URLS=http://+:80
export DossierStorage=storage-images
export APP_DATABASE_CONNECTION="Host=postgres;Port=5432;Database=snowfall_db;Username=snowfall_user;Password=votremotdepasse" - Enregistrez et fermez l’éditeur
CTRL + X
Y
pour sauvegarder
- Apliquer les changements
source ~/.bash_profile