## Gestion des variables d'environnement

Les variables d'environnement sont définies dans les fichiers .env (dotenv)

> Voir <https://symfony.com/doc/current/configuration.html#configuration-based-on-environment-variables>

### Principe général

#### Les fichiers d'environnement

Les fichiers dotenv s'organisent ainsi :

* Un fichier `.env` commun à tous les environnements, il définit des valeurs par défaut.
* Un fichier `.env.local`, non versionné, qui surcharge le fichier `.env` avec les données propres à l'environnement local.

Il existe d'autres manières de surcharger le fichier d'environnement, mais elles ne nous seront pas utiles ici.

#### Variables secrètes

Certaines informations sensibles sont stockées de manière cryptée, telles que les informations permettant l'accès aux 
bases de données. Toutes ces données sont stockées par environnement dans le répertoire `config/secrets`.

Pour mettre à jour une variable secrète : 

    bin/console secrets:set MY_SECRET_VAR

Pour plus d'informations sur le fonctionnement des secrets : https://symfony.com/doc/current/configuration/secrets.html

### Mise en pratique

#### Génération du symlink vers le fichier d'environnement

On trouve dans le répertoire `env` des fichiers `.env.<environnement>` correspondant aux différents environnements 
de développement, test, production, etc.

Lorsque la commande `composer install|update` est exécutée, la commande `bin/console ot:setup:env` s'exécute en post-
script et génère un symlink `.env.local` à la racine du projet.

Pour forcer la mise à jour du fichier d'environnement : 

    bin/console ot:setup:env

Ce symlink pointe vers le fichier d'environnement correspondant à la machine hôte.

On peut forcer un nom d'hôte avec l'option `--host`. Ex : 

    bin/console ot:setup:env --host=ci

Ou en définissant une variable d'environnement `HOST` :

    HOST=ci bin/console ot:setup:env

#### Génération du fichier des variables secrètes

Par ailleurs, la commande `bin/console secrets:decrypt-to-local --force` est aussi exécutée, et génère un fichier
`.env.{env}.local` contenant les variables secrètes. (@see https://symfony.com/doc/current/configuration/secrets.html#deploy-secrets-to-production)
secrètes

### Déboguer

Les variables d'environnement actives peuvent être affichées au moyen de la commande :

    php bin/console debug:container --env-vars

Les variables secrètes peuvent être lues avec :

    php bin/console secrets:list --reveal

Ou pour un autre environnement : 

    APP_RUNTIME_ENV={env} php bin/console secrets:list --reveal
