Toutes les variables
Chaque variable de l'infrastructure : où elle est définie, ce qu'elle vaut, et qui la lit.
Ansible : l'inventaire
ansible/inventory.ini
| Variable | tm-prod | tm-tooling | Rôle |
|---|---|---|---|
ansible_host | 34.140.149.187 | 34.156.3.169 | L'IP publique, pour se connecter en SSH |
private_ip | 10.132.0.2 | 10.132.0.3 | L'IP interne, lue par all.yml |
Ansible : les valeurs partagées
ansible/group_vars/all.yml, en clair.
| Variable | Valeur | Lue par |
|---|---|---|
ansible_user | eliashounnou | Ansible (connexion), rôles docker, traefik, jenkins |
ansible_ssh_private_key_file | ~/.ssh/id_ed25519 | Ansible (connexion) |
app_root | /opt/timemanager | rôles traefik, app, jenkins |
docker_network | timemanager | rôle traefik (création du réseau) |
ghcr_owner | saliehsab | rôles app et jenkins (nom des images, connexion GHCR) |
domain_front | time.jostud.com | rôle app (CORS_ORIGINS) |
domain_api | api.time.jostud.com | rôle app (PHX_HOST), vite_api_url |
domain_ci | ci.time.jostud.com | rôle jenkins (JENKINS_PUBLIC_URL) |
vite_api_url | https://api.time.jostud.com/api | rôle jenkins (VITE_API_URL) |
prod_private_ip | lu dans l'inventaire | rôle jenkins (PROD_HOST) |
tooling_private_ip | lu dans l'inventaire | rôle jenkins (JENKINS_BIND_IP) |
jenkins_deploy_pubkey | la clé publique jenkins_timemanager | rôle app (authorized_keys de deploy) |
postgres_user | timemanager | rôle app (.env) |
postgres_db | timemanager | rôle app (.env) |
Ansible : les secrets
| Variable | Fichier (vault) | Lue par |
|---|---|---|
postgres_password | prod.yml | rôle app (.env) |
secret_key_base | prod.yml | rôle app (.env) |
ghcr_read_token | prod.yml | rôle app (docker login de deploy) |
brevo_api_key | prod.yml | rôle app (.env) |
mail_from | prod.yml | rôle app (.env) |
jenkins_admin_password | tooling.yml | rôle jenkins (.env) |
github_token | tooling.yml | rôle jenkins (.env, deux fois : GitHub et GHCR) |
jenkins_deploy_key | tooling.yml | rôle jenkins (secrets/deploy_key) |
Le .env de l'application
/opt/timemanager/app/.env sur tm-prod, écrit par le rôle app, lu par app/docker-compose.yml.
| Variable | Valeur | Passée à |
|---|---|---|
GHCR_OWNER | {ghcr_owner} | nom des images front et back |
POSTGRES_USER | {postgres_user} | db, et DATABASE_URL de back |
POSTGRES_PASSWORD | {postgres_password} | db, et DATABASE_URL de back |
POSTGRES_DB | {postgres_db} | db, et DATABASE_URL de back |
SECRET_KEY_BASE | {secret_key_base} | back |
PHX_HOST | api.time.jostud.com | back |
CORS_ORIGINS | https://time.jostud.com | back |
BREVO_API_KEY | {brevo_api_key} | back |
MAIL_FROM | {mail_from} | back |
TEST_TO | {test_to} | back, mais aucun code de l'API ne la lit : à retirer, ou à documenter par l'équipe backend |
L'API au démarrage
timemanager-api/config/runtime.exs lit :
| Variable | Obligatoire | Valeur par défaut | Rôle |
|---|---|---|---|
DATABASE_URL | Oui | ecto://user:mot-de-passe@db/timemanager, construite par le compose | |
SECRET_KEY_BASE | Oui | Signature de Phoenix | |
PHX_HOST | Non | example.com | Le nom de domaine de l'API |
CORS_ORIGINS | Oui, ou WEB_URL | Les sites autorisés à appeler l'API avec des cookies, séparés par des virgules | |
WEB_URL | Non | le premier CORS_ORIGINS | L'adresse du site dans les emails |
JWT_SECRET | Non | SECRET_KEY_BASE | Signature des jetons |
BREVO_API_KEY | Non | Sans elle, les emails ne sont qu'écrits dans les journaux | |
MAIL_FROM | Non | no-reply@<PHX_HOST> | L'expéditeur des emails |
PORT | Non | 4000 | Le port d'écoute |
POOL_SIZE | Non | 10 | Le nombre de connexions à la base |
PHX_SERVER | Non | mise par bin/server | Démarre le serveur HTTP |
Le .env de Jenkins
/opt/timemanager/jenkins/.env sur tm-tooling, généré depuis roles/jenkins/templates/jenkins.env.j2.
| Variable | Valeur | Lue par |
|---|---|---|
JENKINS_ADMIN_PASSWORD | {jenkins_admin_password} | casc.yml (compte admin) |
JENKINS_PUBLIC_URL | https://ci.time.jostud.com | casc.yml (adresse de Jenkins) |
JENKINS_BIND_IP | 10.132.0.3 | jenkins/docker-compose.yml (port publié sur l'IP interne seulement) |
GITHUB_USERNAME | {ghcr_owner} | casc.yml (identifiant github-token) |
GITHUB_TOKEN | {github_token} | casc.yml (identifiant github-token) |
GHCR_USERNAME | {ghcr_owner} | casc.yml (identifiant ghcr, variable GHCR_OWNER) |
GHCR_TOKEN | {github_token} | casc.yml (identifiant ghcr) |
VITE_API_URL | https://api.time.jostud.com/api | casc.yml, puis pipeline frontend |
PROD_HOST | 10.132.0.2 | casc.yml, puis étape Deploy des deux pipelines |
Dans les pipelines
Disponibles dans tous les jobs grâce à casc.yml :
| Variable | Utilisée pour |
|---|---|
env.GHCR_OWNER | Le nom des images : ghcr.io/<owner>/timemanager-web et -api |
env.VITE_API_URL | --build-arg du build du site |
env.PROD_HOST | L'adresse SSH du déploiement |
env.BUILD_NUMBER | Fournie par Jenkins : nom unique des conteneurs de test |
Le site web, au build
| Variable | Valeur | Où |
|---|---|---|
VITE_API_URL | https://api.time.jostud.com/api | Argument de build obligatoire du Dockerfile : figée dans le JavaScript du site |
L'application mobile
| Variable | Valeur par défaut | Où |
|---|---|---|
EXPO_PUBLIC_API_URL | https://api.time.jostud.com/api | timemanager-mobile/.env.local (facultatif). Voir Lancer l'app. |