[Factory](../../../README.md) > [Doc](../../README.md) > [Runbooks](../README.md) > [Nouvelle application web](README.md) > **Conventions de nommage** # Conventions de nommage > **Pourquoi cette page.** Un seul nom — `` — est réutilisé à l'identique dans une dizaine de systèmes (Gitea, Postgres, Vault, Kubernetes, ArgoCD, GCS, DNS). Toutes les étapes du runbook en dépendent ; on le centralise ici pour ne pas le ré-expliquer partout. > **Audience.** Quiconque crée ou audite une app sur la plateforme. > **Status.** Actif · revu le 2026-05-31. --- ## TL;DR Choisis **un** identifiant `` en **kebab-case minuscule** (`webapp`, `erp`, `dance-lessons-coach`, `url-shortener`). Ce nom devient, **sans variation**, la clé de toutes les ressources. Une seule faute de frappe quelque part casse la chaîne (auth Vault, rattachement DB, sync ArgoCD). ## Le nom `` dans chaque système | Système | Identifiant dérivé de `` | Exemple (`erp`) | Source de vérité | |---|---|---|---| | Dépôt Gitea | `arcodange-org/` (ou `arcodange/` si `org` surchargé) | `arcodange-org/erp` | [argocd/templates/apps.yaml](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/argocd/templates/apps.yaml) | | Base PostgreSQL | `` | `erp` | [postgres/iac/main.tf](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/postgres/iac/main.tf) | | Rôle propriétaire PG (non-login) | `_role` | `erp_role` | postgres/iac/main.tf | | Rôle DB dynamique Vault | `postgres/creds/` | `postgres/creds/erp` | [modules/app_roles/main.tf](https://gitea.arcodange.lab/arcodange-org/tools/src/branch/main/hashicorp-vault/iac/modules/app_roles/main.tf) | | Rôle d'auth Kubernetes (Vault) | `` | `erp` | modules/app_roles/main.tf | | Policy Vault **runtime** (pod) | `` | `erp` | [modules/app_policy/main.tf](https://gitea.arcodange.lab/arcodange-org/tools/src/branch/main/hashicorp-vault/iac/modules/app_policy/main.tf) | | Policy Vault **CI** (ops) | `-ops` | `erp-ops` | modules/app_policy/main.tf | | Rôle JWT de CI (Vault) | `gitea_cicd_` | `gitea_cicd_erp` | modules/app_policy/main.tf | | Groupe d'identité Vault | `-ops` | `erp-ops` | modules/app_policy/main.tf | | Secret KV de config | `kvv2//config` | `kvv2/erp/config` | modules/app_roles (sortie `kvv2_path_prefix`) | | Namespace Kubernetes | `` | `erp` | apps.yaml (`CreateNamespace=true`) | | ServiceAccount Kubernetes | `` | `erp` | [chart/templates/serviceaccount.yaml](https://gitea.arcodange.lab/arcodange-org/erp/src/branch/main/chart/templates/serviceaccount.yaml) | | Application ArgoCD | `` | `erp` | apps.yaml | | Préfixe d'état OpenTofu (GCS) | `/main` | `erp/main` | [iac/backend.tf](https://gitea.arcodange.lab/arcodange-org/erp/src/branch/main/iac/backend.tf) | | Domaine interne | `.arcodange.lab` | `erp.arcodange.lab` | chart/values.yaml (ingress) | | Domaine public | `.arcodange.fr` | `webapp.arcodange.fr` | chart/values.yaml (ingress) | ## Pourquoi cette uniformité est structurante Les briques se « branchent » entre elles **par convention de nom**, pas par configuration explicite : - Le module `app_roles` génère un user PG dynamique avec `GRANT _role TO …` → il **suppose** que `_role` (créé à l'[étape 2](02-database.md)) porte exactement ce nom. - Le `VaultDynamicSecret` du chart lit `postgres/creds/` → il **suppose** que le rôle Vault (créé à l'[étape 5](05-app-terraform.md)) porte exactement ``. - L'`Application` ArgoCD déduit `repoURL=.../`, `path=chart`, `namespace=` du seul nom → le dépôt ([étape 1](01-gitea-repo.md)) et le namespace doivent matcher. ✅ **Utilise un nom court, stable, kebab-case** dès le départ. ❌ **N'introduis pas** de variantes (`my_app` vs `my-app`, `MyApp`, pluriels) : rien ne te préviendra, l'app échouera silencieusement à se connecter ou à se déployer. ## Plusieurs environnements pour une même app Une application peut être déployée plusieurs fois (prod, sandbox, …) **sans devenir une app distincte** : même dépôt, même chart, même version. On ajoute une seconde coordonnée `` au nom, régie par une **règle d'élision** ([ADR-0002](../../../vibe/ADR/0002-per-application-environments.md)) : - **`env` vaut `prod` par défaut, et `prod` s'élide.** Quand `env == prod`, **aucun suffixe** n'est ajouté : tous les noms dérivés sont identiques au cas mono-environnement décrit plus haut. Une app existante ne change donc pas (`plan` à vide). - **Les environnements non-prod prennent le suffixe `-`** en kebab-case partout — base, namespace, chemins/rôles/policies Vault, Application ArgoCD, hôte DNS, sous-préfixe d'état GCS — **à une exception** : le rôle propriétaire PostgreSQL reste en snake-case `__role`, pour rester cohérent avec le suffixe `_role`. - **Un seul dépôt et un seul chart** servent tous les environnements ; les différences sont superposées via `values-.yaml`. **Un seul rôle JWT de CI** (`gitea_cicd_`) par dépôt couvre tous ses environnements. Exemple — `erp` (prod, élidé) vs `erp-sandbox` : | Système | `erp` (env = prod) | `erp-sandbox` (env = sandbox) | |---|---|---| | Base PostgreSQL | `erp` | `erp-sandbox` | | Rôle propriétaire PG | `erp_role` | `erp_sandbox_role` | | Namespace + ServiceAccount | `erp` | `erp-sandbox` | | Creds DB dynamiques Vault | `postgres/creds/erp` | `postgres/creds/erp-sandbox` | | Secret KV de config | `kvv2/erp/config` | `kvv2/erp-sandbox/config` | | Application ArgoCD | `erp` | `erp-sandbox` | | Domaine interne | `erp.arcodange.lab` | `erp-sandbox.arcodange.lab` | | Dépôt Gitea / chart / JWT CI | `arcodange-org/erp` · chart · `gitea_cicd_erp` | partagés (mêmes valeurs) | Déclaration : `postgres/iac/terraform.tfvars` et la liste `applications` côté `tools` acceptent `envs = ["prod", "sandbox"]` ; l'omettre revient à `["prod"]`. L'`Application` ArgoCD non-prod se déclare via une clé `envs` sous l'app dans [argocd/values.yaml](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/argocd/values.yaml). ## Références croisées - [01 · Dépôt Gitea](01-gitea-repo.md) — fixe `` comme nom de dépôt sous `arcodange-org`. - [02 · Base de données](02-database.md) — crée `` et `_role`. - [03 · Vault plateforme](03-vault-platform.md) — crée `gitea_cicd_`, policies `` / `-ops`. - [04 · Chart Helm](04-helm-chart.md) — référence ``, `creds/`, `kvv2//config`. - [05 · Terraform de l'app](05-app-terraform.md) — appelle `app_roles` avec `name=`. - [06 · Workflows CI](06-ci-workflows.md) — s'authentifie avec `gitea_cicd_`. - [07 · Enregistrement ArgoCD](07-argocd-register.md) — déclare `` dans `gitea_applications`.