Aller au contenu principal

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

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.

  1. 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.

    .env
    POSTGRES_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"
    attention

    Si 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.

  2. 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
  3. Modifiez votre fichier docker-compose.yml pour qu'il utilise les variables d'environnement. Par exemple:

    docker-compose.yml
    services:
    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:
  4. Lorsque vous démarrez docker compose, les variables d'environnement devraient être prises en compte.

Configuration des variables d'environnement sur le serveur

  1. Assurez-vous de récupérer la dernière version du code sur le serveur (git pull)

  2. 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"
    info

    Assurez-vous d'utiliser un mot de passe sécuritaire!

  3. 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.

  1. Accéder à Postgres en ligne de commande

    docker exec -it snowfall_postgres bash
  2. Accédez à psql

    psql -U snowfall_user -d snowfall_db
  3. Modifiez le mot de passe

    ALTER USER snowfall_user WITH PASSWORD 'NOUVEAU_MOT_DE_PASSE';
    attention

    Utilisez le même mot de passe que celui de la variable d'environnement!

  4. Quittez psql

    \q
  5. Quittez le conteneur

    exit

Redémarrer le conteneur

Redémarrez le conteneur à l'aide de:

  1. docker compose stop
  2. 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

  1. nano ~/.bash_profile
  2. 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"
  3. Enregistrez et fermez l’éditeur
    1. CTRL + X
    2. Y pour sauvegarder
  4. Apliquer les changements
    source ~/.bash_profile