Dos modelos de despliegue
| Modelo | Qué obtienes | Dónde ir |
|---|---|---|
| Docker Compose | La aplicación de referencia + el conjunto completo de dependencias, en tu ordenador, en minutos | Guía para desarrolladores — Ejecutar la aplicación |
| Kubernetes (Terraform + Helm) | Un despliegue de referencia para producción: operadores, bases de datos, autenticación, secretos, observabilidad y todo lo demás | Esta página |
Local: Docker Compose
El repositorio del framework incluye dos stacks completos: aplicación, PostgreSQL (con pgvector), Redis, Vault y un stack de observabilidad:
docker compose -f compose-grafana.yml up --build # Grafana stack
docker compose -f compose-opensearch.yml up --build # OpenSearch Dashboards stackLos proyectos generados con el scaffold tienen su propio compose.yml (app + postgres + redis + vault);
consulta Tu primer agente.
Producción: Kubernetes con Terraform
Agent-Lab proporciona scripts de Terraform que despliegan la aplicación y sus dependencias en Kubernetes. Este recorrido utiliza un clúster de Minikube con fines de referencia; usa un clúster preparado para producción en despliegues reales.
Requisitos previos
Configurar un clúster de Kubernetes
Minikube (Linux): asigna suficientes recursos (el stack de referencia es pesado):
minikube start --memory=20g --cpus=4Obtén la IP del clúster y asígnale los dominios de los servicios:
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): habilita el Kubernetes integrado:

Con Docker Desktop, los dominios se resuelven a través de 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.comAprovisionar las dependencias
Todos los módulos siguientes se encuentran en terraform/; aplícalos con terraform init && terraform apply en cada directorio, en este orden:
| Módulo | Qué aprovisiona |
|---|---|
01_traefik/ |
Controlador de ingress Traefik |
02_cert-manager/ |
cert-manager para TLS |
03_cert-cluster-issuer/ |
ClusterIssuer de producción de Let's Encrypt |
04_redis-operator/ |
Operador de Redis (actualizaciones de estado pub/sub) |
05_postgres-operator/ |
Operador de PostgreSQL: tres bases de datos: relacional, pgvector y checkpoints |
06_keycloak-operator/ |
Operador de Keycloak |
08_vault-instance/ |
Vault para los secretos |
Instancia de Keycloak (09_keycloak-instance/); después, obtén la contraseña de administrador:
echo "$(kubectl --namespace keycloak get secret/keycloak-initial-admin -o go-template='{{index .data "password" | base64decode}}')"Configura la conexión OIDC según Autenticación con Keycloak, o deja que lo haga el
módulo 12_agent-lab-auth-realm/ (más abajo).
Inicialización de Vault (con 08_vault-instance/ aplicado): inicializa y desprecinta (unseal):
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_KEYObservabilidad (opcional, pero recomendada): las plataformas de observabilidad de LLM que utilizan la batería de simulaciones y los backends de trazas:
| Módulo | Qué aprovisiona |
|---|---|
13_langfuse-instance/ |
Langfuse: trazas de LLM y experimentos de simulación |
14_langwatch-instance/ |
LangWatch: simulaciones y paneles |
07_elastic-operator/ + 10_elastic-instance/ |
ECK (Elastic) para logs y APM |
Obtén las credenciales de 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/): el endpoint OTLP al que exporta la
aplicación (Observabilidad).
Gateway LiteLLM (17_litellm-instance/): un gateway de LLM autoalojado y compatible con OpenAI,
con claves virtuales, seguimiento del gasto y una interfaz de administración (/ui):
echo "$(kubectl --namespace litellm get secret/litellm-masterkey -o go-template='{{index .data "masterkey" | base64decode}}')"
curl -s https://<litellm_fqdn>/health/readinessDesplegar Agent-Lab
Tres módulos lo conectan todo:
| Módulo | Qué configura |
|---|---|
12_agent-lab-auth-realm/ |
El realm, el cliente y la cuenta de servicio de Keycloak para la aplicación |
15_agent-lab-dependencies/ |
Conexión de las dependencias de ejecución (bases de datos, broker, claves LANGFUSE_*, …) |
16_agent-lab-instance/ |
La propia aplicación Agent-Lab |
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
Nota sobre los secretos: el despliegue lee su configuración de Vault al arrancar (
secret/app_secrets); las claves de la carga se enumeran en la Referencia de configuración.
Chart de Helm
El repositorio también incluye un chart de Helm, charts/agent-lab, que empaqueta el despliegue
de la aplicación con sus sidecars: Chrome headless (CDP) para agentes web, un HPA, ingress,
configuración y cuenta de servicio. Úsalo cuando ya gestiones tus propias dependencias y
solo quieras instalar la aplicación.
Lista de comprobación
Antes de darlo por terminado, verifica que:
-
GET /status/livenessyGET /status/readinessdevuelven 200 -
GET /docsse muestra yGET /agents/listresponde (con un token cuando la autenticación está activada) - Las trazas llegan a tu endpoint OTLP (consulta Observabilidad)
- Vault contiene
secret/app_secretscon todas las claves de la carga - El realm de Keycloak tiene un cliente y una cuenta de servicio