-
Notifications
You must be signed in to change notification settings - Fork 5
[Onboarding] Améliorer et documenter la génération des fichiers .env #1894
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
StephaneTrebel
merged 3 commits into
main
from
1890-ameliorer-et-documenter-la-generation-des-fichiers-env
Feb 10, 2026
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,105 @@ | ||
| # Fichiers de configuration d'environnements | ||
|
|
||
| Cette documentation a pour but de détailler tout ce qui concerne la gestion des configuration d'environnements (appelé couramment "fichiers .env"). | ||
|
|
||
| Comme vous aurez pu le constater, il y a beaucoup de choses à configurer pour un projet d'ampleur comme l'est la Console de CPiN, et il y a des cas d'usages très spécifiques qui seront décrits ici. Vous avez également la possibilité de composer votre propre manière de gérer vous variables d'environments en vous basant sur ce qui a été fait pour nous. | ||
|
|
||
| ## Cas d'usage supportés | ||
|
|
||
| Avant de décrire dans le détail comment configurer les différents environments, il est important de rappeler les Cas d'Usage qui sont supportés par les scripts de CPiN: | ||
|
|
||
| - **Développement totalement en local** : vous déployez l'entièreté de l'écosystème de `console`, sans considération d'un branchement à l'extérieur, et vous développez directement en mode "serve" sur `client`, `server`, un `plugin` en particulier, ou peut-être même une combinaison des trois. | ||
| - **Développement conteneurisé en local** : vous déployez l'entièreté de l'écosystème de `console`, sans considération d'un branchement à l'extérieur, et même les composants fondamentaux de console (comme `client` et `server`) dans des conteneurs à l'aide d'images construites précédemment (en local, ou alors tirée depuis le registre de l'organisation CPiN) | ||
| - **Développement conteneurisé hybride** : vous déployez localement seulement une partie de l'écosystème de `console` (`client` et/ou `server`, de manière à utiliser votre code local) et pour le reste (Base de données de `console`, `keycloak`, `gitlab`, les clusters applicatifs, etc.), vous vous branchez à un environnement existant (appelé `integ` pour `INTEGRATION`). Ce cas d'usage est très pratique pour tester votre code avec de "vraies données" d'un environnement fonctionnel (comme notre environnement interne `cpin-hp`) | ||
| - Les cas de déploiements finaux du système complet, qui sont eux adressé par un chart Helm stocké dans [le dépôt `helm-charts`](https://github.com/cloud-pi-native/helm-charts) | ||
|
|
||
| Maintenant que ces définitions sont établies, passons à la configuration pour chacun des cas d'usage | ||
|
|
||
| ## Considérations communes à tous les cas | ||
|
|
||
| Le mode de fonctionnement de la configuration des environnements est assez classique : les applications `client` et `server` ont besoin d'avoir certaines variables d'environnements définies. | ||
|
|
||
| Le mécanisme de surcharge des différentes configurations fonctionne de cette manière : | ||
|
|
||
| ``` | ||
| ->: «surcharge» | ||
|
|
||
| var d'env settée explicitement -> fichier .env.docker (si contexte docker) -> fichier .env.integ (si INTEGRATION=true) -> fichier .env | ||
| ``` | ||
|
|
||
| ## Prégénération des fichiers .env, .env.docker, et .env.integ | ||
|
|
||
| Un script permet de copier facilement les fichiers `.env*-example` en leur équivalent `.env*`: [`./ci/scripts/init-env.sh`](./ci/scripts/init-env.sh). | ||
|
|
||
| > Il faut ensuite remplir ces fichiers, car ils ne sont là que simplement copiés avec les valeurs par défaut | ||
|
|
||
| ## Configuration pour le développement entièrement en local | ||
|
|
||
| Docker Compose utilisé : [`docker/docker-compose.local.yml`](docker/docker-compose.local.yml) (infrastructure uniquement : Keycloak, PostgreSQL, pgAdmin, OpenCDS mock) | ||
|
|
||
| Fichiers utilisés : | ||
|
|
||
| - `apps/client/.env` | ||
| - `apps/server/.env` | ||
|
|
||
| Les valeurs par défaut, disponibles dans les fichiers `.env-example`, sont suffisantes dans 99% des cas. Cela dit, c'est un cas d'usage assez restreint car la console se reposant sur quelques composants externes comme une base de données PostgreSQL ou un serveur IAM comme `keycloak`, il faut configurer manuellement les `.env` pour pointer sur les bonnes URLs, etc. Pas infaisable, mais pas très pratique au quotidien, hors des cas simple de build des applications. | ||
|
|
||
| **Commandes de lancement :** | ||
|
|
||
| ```bash | ||
| # Lance l'infrastructure (Keycloak, PostgreSQL, pgAdmin, OpenCDS mock) | ||
| pnpm dev | ||
|
|
||
| # Puis dans d'autres terminaux, lancer le serveur et le client manuellement : | ||
| pnpm --filter server run dev | ||
| pnpm --filter client run dev | ||
| ``` | ||
|
|
||
| ## Configuration pour le développement conteneurisé en local | ||
|
|
||
| Docker Compose utilisé : [`docker/docker-compose.dev.yml`](docker/docker-compose.dev.yml) (tout conteneurisé avec Docker Compose Watch) | ||
|
|
||
| Fichiers utilisés : | ||
|
|
||
| - `apps/client/.env` | ||
| - `apps/client/.env.docker` | ||
| - `apps/server/.env` | ||
| - `apps/server/.env.docker` | ||
|
|
||
| Cette configuration est déjà plus intéressante, car elle s'appuie sur les conteneurs définis dans [ce docker-compose](docker/docker-compose.dev.yml), qui lance notamment une base de données PostreSQL (ainsi qu'un `pgadmin`), et un serveur Keycloak préchargé avec un royaume qui contient un jeu de données. Le docker-compose contient des instructions `develop` qui permettent soit de synchroniser certains fichiers, soit de carrément reconstruire l'image et de relancer le service concerné. De cette manière vous pouvez développer en laissant les conteneurs tourner. C'est un peu moins performant qu'un travail totalement en local, mais ça a le mérite d'être plus proche du déploiement cible. | ||
|
|
||
| **Commande de lancement :** | ||
|
|
||
| ```bash | ||
| # Lance l'ensemble des conteneurs (client, server, keycloak, postgres, pgadmin, opencds mock) | ||
| # avec Docker Compose Watch pour la synchronisation du code | ||
| pnpm docker:dev | ||
| ``` | ||
|
|
||
| ## Configuration pour le développement hybride avec un environnement d'intégration existant | ||
|
|
||
| Docker Compose utilisé : [`docker/docker-compose.integ.yml`](docker/docker-compose.integ.yml) (sans Keycloak, branché sur l'environnement d'intégration distant) | ||
|
|
||
| Fichiers utilisés : | ||
|
|
||
| - `apps/client/.env` | ||
| - `apps/client/.env.docker` | ||
| - `apps/client/.env.integ` | ||
| - `apps/server/.env` | ||
| - `apps/server/.env.docker` | ||
| - `apps/server/.env.integ` | ||
|
|
||
| Cette configuration est une itération de la précédente. Dans ce cas d'usage le Keycloak n'est pas créé en tant que conteneur, car on est supposé se brancher sur l'environnement d'intégration défini dans les fichiers `.env.integ`. Le contenu de ces fichiers (en particulier celui de `apps/server`) est donc clé. | ||
|
|
||
| **Commandes de lancement :** | ||
|
|
||
| ```bash | ||
| # Option 1 : Tout conteneurisé, branché sur l'environnement d'intégration | ||
| pnpm docker:integ | ||
|
|
||
| # Option 2 : Seulement l'infra en Docker (postgres, pgadmin), server et client en local avec mode integ | ||
| pnpm integ | ||
| # Puis dans d'autres terminaux : | ||
| pnpm --filter server run dev | ||
| pnpm --filter client run dev | ||
| ``` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,10 +1,20 @@ | ||
| # Mode d'exécution Node.js (development | production | test) | ||
| NODE_ENV=development | ||
| # Hôte du serveur backend vers lequel le client proxifie les appels API | ||
| SERVER_HOST=localhost | ||
| # Port d'écoute du serveur backend | ||
| SERVER_PORT=4000 | ||
| # Domaine (host:port) du serveur Keycloak pour l'authentification | ||
| KEYCLOAK_DOMAIN=localhost:8090 | ||
| # Nom du royaume Keycloak utilisé par la console | ||
| KEYCLOAK_REALM=cloud-pi-native | ||
| # Protocole de communication avec Keycloak (http | https) | ||
| KEYCLOAK_PROTOCOL=http | ||
| # Identifiant du client Keycloak côté frontend | ||
| KEYCLOAK_CLIENT_ID=dso-console-frontend | ||
| # URL de redirection après authentification Keycloak | ||
| KEYCLOAK_REDIRECT_URI=http://localhost:8080 | ||
| # Active/désactive le module OpenCDS (true | false) | ||
| OPENCDS_ENABLED=false | ||
| # Adresse e-mail de contact affichée dans l'interface | ||
| CONTACT_EMAIL=cloudpinative-relations@interieur.gouv.fr |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,10 +1,20 @@ | ||
| # Indique que l'application tourne dans un conteneur Docker | ||
| DOCKER=true | ||
| # Mode d'exécution Node.js (development | production | test) | ||
| NODE_ENV=development | ||
| # Hôte du serveur backend (nom du service Docker Compose) | ||
| SERVER_HOST=server | ||
| # Port d'écoute du serveur backend dans le réseau Docker | ||
| SERVER_PORT=8080 | ||
| # Domaine (host:port) du serveur Keycloak pour l'authentification | ||
| KEYCLOAK_DOMAIN=localhost:8090 | ||
| # Nom du royaume Keycloak utilisé par la console | ||
| KEYCLOAK_REALM=cloud-pi-native | ||
| # Protocole de communication avec Keycloak (http | https) | ||
| KEYCLOAK_PROTOCOL=http | ||
| # Identifiant du client Keycloak côté frontend | ||
| KEYCLOAK_CLIENT_ID=dso-console-frontend | ||
| # URL de redirection après authentification Keycloak | ||
| KEYCLOAK_REDIRECT_URI=http://localhost:8080 | ||
| # Adresse e-mail de contact affichée dans l'interface | ||
| CONTACT_EMAIL=cloudpinative-relations@interieur.gouv.fr |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.