Environnements
KOHAMI cible trois environnements distincts, tous hébergés sur le même serveur dédié Scaleway à Paris (INV-T02). Chaque environnement a sa pile complète : API, runtime vocal, LiveKit, Inngest et sa propre base PostgreSQL.
Vue d'ensemble
Le domaine définitif (kohami.app) n'est pas encore enregistré ; en attendant, les environnements sont servis sur le wildcard public sslip.io, qui résout directement vers l'IP du serveur et permet des certificats Let's Encrypt valides.
| Environnement | Usage | URL API | LiveKit (signaling) |
|---|---|---|---|
dev | Développement courant, tests et démos | https://api-dev.195-154-239-8.sslip.io | wss://livekit-dev.195-154-239-8.sslip.io |
staging | Pré-recette et démonstrations JUWA | https://api-staging.195-154-239-8.sslip.io (pile provisionnée, application à venir) | wss://livekit-staging.195-154-239-8.sslip.io |
prod | Production seniors | https://api.195-154-239-8.sslip.io (pile provisionnée, application à venir) | wss://livekit.195-154-239-8.sslip.io |
La documentation (ce site) est servie par le même serveur : https://docs-dev.195-154-239-8.sslip.io.
Le TLS public est terminé par Caddy (ports 80/443, certificats Let's Encrypt automatiques). Seul l'environnement dev porte aujourd'hui l'application déployée ; les hostnames staging et prod sont déjà câblés dans le reverse-proxy et s'activeront à leur mise en service, sans changement d'URL côté clients.
Comportements spécifiques
dev
- Swagger UI accessible sur
/docs(non protégé) - Workloads applicatifs déployés sur k3s, redéployés automatiquement à chaque push
develop - Comptes de démonstration et fixtures de développement
- Logs verbeux
staging
- Endpoints de développement désactivés
- Données de recette JUWA (volume réduit)
- Configuration identique à prod, à destination de la validation contractuelle
prod
- Aucun endpoint de développement exposé, Swagger désactivé
- Données seniors réelles
- Sauvegarde continue PostgreSQL (WAL-G vers Object Storage, armée à la mise en service)
Gestion des secrets
Aucun secret n'est versionné dans le repo, et la CI n'en détient aucun pour l'infrastructure. La source canonique est le vault Ansible (infra/ansible/vault/secrets.yaml, chiffré avec ansible-vault, jamais commité en clair) :
- Ansible déchiffre le vault au moment du provisioning et rend les fichiers d'environnement de chaque pile sur le serveur (permissions restrictives).
- Pour l'environnement k3s, c'est aussi Ansible qui pose les secrets Kubernetes (clés LiveKit, environnement de l'API et du voice-agent, accès registre). Les manifests applicatifs appliqués par la CI ne contiennent aucune valeur sensible : un déploiement ne peut pas écraser une credential.
- En développement local, un
.envgitignoré par application fait foi.
Un garde-fou refuse d'appliquer les playbooks sur le serveur réel si le vault n'est pas déchiffré : impossible d'installer par accident les valeurs d'exemple du repo.
Détecter l'environnement runtime
Côté back-end, la variable KOHAMI_ENV est garantie présente. Côté clients, l'environnement se déduit de l'URL de base configurée au build (l'app mobile embarque EXPO_PUBLIC_API_URL, le dashboard VITE_API_URL).
Promotion entre environnements
Le pipeline courant :
- Branche
feat/...oufix/..., ciblantdevelop(squash merge). - Avant tout merge, preuve sur pile locale complète : boot réel, tests, sonde de bout en bout.
- Le push sur
developdéclenche le workflowdeploy-box: build des images (API et voice-agent), push au registre Scaleway, application des manifests k3s sur le serveur, migrations, puis smoke public. Le smoke exige un/v1/healthà 200, la garde d'authentification, et l'enregistrement effectif du worker vocal auprès de LiveKit (un déploiement qui rendrait Helena muette échoue au lieu de passer au vert). mainreste le miroir de la production : release PR depuisdevelopavec tag, déploiement prod manuel (à l'activation de l'environnement).
Aller plus loin
- Operations Deploy, procédures de déploiement détaillées
- Authentification, récupération des credentials par environnement