Deux modèles de déploiement
| Modèle | Ce que vous obtenez | Où aller |
|---|---|---|
| Docker Compose | L'application de référence et l'ensemble de ses dépendances, sur votre machine, en quelques minutes | Guide du développeur — Exécuter l'application |
| Kubernetes (Terraform + Helm) | Un déploiement de référence pour la production : opérateurs, bases de données, authentification, secrets, observabilité, tout y est | Cette page |
En local : Docker Compose
Le dépôt du framework fournit deux stacks complètes — application, PostgreSQL (avec pgvector), Redis, Vault et une stack d'observabilité :
docker compose -f compose-grafana.yml up --build # Grafana stack
docker compose -f compose-opensearch.yml up --build # OpenSearch Dashboards stackLes projets générés disposent de leur propre compose.yml (app + postgres + redis + vault) —
voir Votre premier agent.
En production : Kubernetes avec Terraform
Agent-Lab fournit des scripts Terraform qui déploient l'application et ses dépendances sur Kubernetes. Ce pas-à-pas utilise un cluster Minikube à titre de référence — utilisez un cluster prêt pour la production pour les déploiements réels.
Prérequis
Mettre en place un cluster Kubernetes
Minikube (Linux) — allouez suffisamment de ressources (la stack de référence est gourmande) :
minikube start --memory=20g --cpus=4Récupérez l'adresse IP du cluster et faites-y pointer les domaines des services :
minikube ip
# 192.168.49.2192.168.49.2 vault.my-domain.com kibana.my-domain.com elasticsearch.my-domain.com agent-lab.my-domain.com litellm.my-domain.comDocker Desktop (Mac / Windows) — activez le Kubernetes intégré :

Avec Docker Desktop, les domaines sont résolus via localhost :
127.0.0.1 vault.my-domain.com kibana.my-domain.com elasticsearch.my-domain.com agent-lab.my-domain.com litellm.my-domain.comProvisionner les dépendances
Chacun des modules ci-dessous se trouve dans terraform/ — appliquez-les avec terraform init && terraform apply dans chaque répertoire, dans cet ordre :
| Module | Ce qu'il provisionne |
|---|---|
01_traefik/ |
Contrôleur d'ingress Traefik |
02_cert-manager/ |
cert-manager pour le TLS |
03_cert-cluster-issuer/ |
ClusterIssuer Let's Encrypt de production |
04_redis-operator/ |
Opérateur Redis (mises à jour d'état pub/sub) |
05_postgres-operator/ |
Opérateur PostgreSQL — trois bases de données : relationnelle, pgvector, checkpoints |
06_keycloak-operator/ |
Opérateur Keycloak |
08_vault-instance/ |
Vault pour les secrets |
Instance Keycloak (09_keycloak-instance/), puis récupérez le mot de passe administrateur :
echo "$(kubectl --namespace keycloak get secret/keycloak-initial-admin -o go-template='{{index .data "password" | base64decode}}')"Configurez la connexion OIDC comme décrit dans Authentification avec Keycloak, ou laissez le
module 12_agent-lab-auth-realm/ s'en charger (voir ci-dessous).
Initialisation de Vault (une fois 08_vault-instance/ appliqué) — initialisez et descellez :
kubectl --namespace vault exec vault-0 -- vault operator init \
-key-shares=1 \
-key-threshold=1 \
-format=json > cluster-keys.json
export VAULT_UNSEAL_KEY=$(jq -r ".unseal_keys_b64[]" cluster-keys.json)
kubectl --namespace vault exec vault-0 -- vault operator unseal $VAULT_UNSEAL_KEYObservabilité (facultative mais recommandée) — les plateformes d'observabilité LLM utilisées par la suite de simulation et les backends de traçage :
| Module | Ce qu'il provisionne |
|---|---|
13_langfuse-instance/ |
Langfuse — traces LLM et expériences de simulation |
14_langwatch-instance/ |
LangWatch — simulations et tableaux de bord |
07_elastic-operator/ + 10_elastic-instance/ |
ECK (Elastic) pour les logs et l'APM |
Récupérez les identifiants Elastic :
echo "$(kubectl --namespace elastic get secret elasticsearch-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode)"
echo "$(kubectl --namespace elastic get secret/elastic-eck-apm-server-apm-token \
-o go-template='{{index .data "secret-token" | base64decode}}')"OpenTelemetry Collector (11_otel-instance/) — le point de terminaison OTLP vers lequel l'application exporte
(Observabilité).
Passerelle LiteLLM (17_litellm-instance/) — une passerelle LLM auto-hébergée compatible OpenAI,
avec clés virtuelles, suivi des dépenses et interface d'administration (/ui) :
echo "$(kubectl --namespace litellm get secret/litellm-masterkey -o go-template='{{index .data "masterkey" | base64decode}}')"
curl -s https://<litellm_fqdn>/health/readinessDéployer Agent-Lab
Trois modules assemblent l'ensemble :
| Module | Ce qu'il configure |
|---|---|
12_agent-lab-auth-realm/ |
Le realm Keycloak, le client et le compte de service de l'application |
15_agent-lab-dependencies/ |
Le câblage des dépendances d'exécution (bases de données, broker, clés LANGFUSE_*, …) |
16_agent-lab-instance/ |
L'application Agent-Lab elle-même |
cd terraform/12_agent-lab-auth-realm/ && terraform init && terraform apply
cd terraform/15_agent-lab-dependencies/ && terraform init && terraform apply
cd terraform/16_agent-lab-instance/ && terraform init && terraform apply
Remarque sur les secrets : le déploiement lit sa configuration depuis Vault au démarrage (
secret/app_secrets) — les clés de la charge utile sont répertoriées dans la Référence de configuration.
Chart Helm
Le dépôt fournit également un chart Helm, charts/agent-lab, qui package le déploiement
de l'application avec ses sidecars : Chrome headless (CDP) pour les agents web, un HPA, l'ingress,
la configuration et le compte de service. Utilisez-le si vous exploitez déjà vos propres dépendances et
souhaitez uniquement installer l'application.
Liste de contrôle
Avant de considérer le travail comme terminé, vérifiez que :
-
GET /status/livenessetGET /status/readinessrenvoient 200 -
GET /docss'affiche etGET /agents/listrépond (avec un jeton lorsque l'authentification est activée) - Les traces arrivent sur votre point de terminaison OTLP (voir Observabilité)
- Vault contient
secret/app_secretsavec toutes les clés de la charge utile - Le realm Keycloak dispose d'un client et d'un compte de service