Twee deploymentmodellen
| Model | Wat je krijgt | Waar je heen gaat |
|---|---|---|
| Docker Compose | De referentie-app + de volledige set afhankelijkheden, op je eigen machine, binnen enkele minuten | Handleiding voor ontwikkelaars — De applicatie uitvoeren |
| Kubernetes (Terraform + Helm) | Een referentiedeployment voor productie: operators, databases, authenticatie, secrets, observability, alles erop en eraan | Deze pagina |
Lokaal: Docker Compose
De repository van het framework bevat twee complete stacks — applicatie, PostgreSQL (met pgvector), Redis, Vault en een observability-stack:
docker compose -f compose-grafana.yml up --build # Grafana stack
docker compose -f compose-opensearch.yml up --build # OpenSearch Dashboards stackGescaffolde projecten krijgen een eigen compose.yml (app + postgres + redis + vault) —
zie Je eerste agent.
Productie: Kubernetes met Terraform
Agent-Lab biedt Terraform-scripts die de applicatie en haar afhankelijkheden op Kubernetes deployen. Deze walkthrough gebruikt ter referentie een Minikube-cluster — gebruik voor echte deployments een productieklaar cluster.
Vereisten
Een Kubernetes-cluster opzetten
Minikube (Linux) — wijs voldoende resources toe (de referentiestack is zwaar):
minikube start --memory=20g --cpus=4Bepaal het IP-adres van het cluster en koppel de servicedomeinen eraan:
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) — schakel de meegeleverde Kubernetes in:

Met Docker Desktop worden domeinen via localhost geresolved:
127.0.0.1 vault.my-domain.com kibana.my-domain.com elasticsearch.my-domain.com agent-lab.my-domain.com litellm.my-domain.comAfhankelijkheden provisionen
Elke module hieronder staat in terraform/ — pas ze toe met terraform init && terraform apply in elke directory, in deze volgorde:
| Module | Wat het provisiont |
|---|---|
01_traefik/ |
Traefik-ingresscontroller |
02_cert-manager/ |
cert-manager voor TLS |
03_cert-cluster-issuer/ |
Let's Encrypt-ClusterIssuer voor productie |
04_redis-operator/ |
Redis-operator (pub/sub-statusupdates) |
05_postgres-operator/ |
PostgreSQL-operator — drie databases: relationeel, pgvector, checkpoints |
06_keycloak-operator/ |
Keycloak-operator |
08_vault-instance/ |
Vault voor secrets |
Keycloak-instantie (09_keycloak-instance/), haal daarna het beheerderswachtwoord op:
echo "$(kubectl --namespace keycloak get secret/keycloak-initial-admin -o go-template='{{index .data "password" | base64decode}}')"Configureer de OIDC-verbinding volgens Authenticatie met Keycloak, of laat de
module 12_agent-lab-auth-realm/ dat doen (zie hieronder).
Vault initialiseren (08_vault-instance/ toegepast) — initialiseer en 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_KEYObservability (optioneel maar aanbevolen) — de platforms voor LLM-observability die worden gebruikt door de simulatiesuite en de tracing-backends:
| Module | Wat het provisiont |
|---|---|
13_langfuse-instance/ |
Langfuse — LLM-traces & simulatie-experimenten |
14_langwatch-instance/ |
LangWatch — simulaties & dashboards |
07_elastic-operator/ + 10_elastic-instance/ |
ECK (Elastic) voor logs & APM |
Haal de Elastic-inloggegevens op:
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/) — het OTLP-endpoint waarnaar de app exporteert
(Observability).
LiteLLM-gateway (17_litellm-instance/) — een zelf gehoste, OpenAI-compatibele LLM-gateway
met virtuele sleutels, bijhouden van uitgaven en een beheer-UI (/ui):
echo "$(kubectl --namespace litellm get secret/litellm-masterkey -o go-template='{{index .data "masterkey" | base64decode}}')"
curl -s https://<litellm_fqdn>/health/readinessAgent-Lab deployen
Drie modules verbinden alles met elkaar:
| Module | Wat het configureert |
|---|---|
12_agent-lab-auth-realm/ |
De Keycloak-realm, client en het serviceaccount voor de app |
15_agent-lab-dependencies/ |
Koppeling van runtime-afhankelijkheden (databases, broker, LANGFUSE_*-sleutels, …) |
16_agent-lab-instance/ |
De Agent-Lab-applicatie zelf |
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
Opmerking over secrets: de deployment leest bij het opstarten zijn configuratie uit Vault (
secret/app_secrets) — de sleutels van de payload staan in de Configuratiereferentie.
Helm-chart
De repository bevat ook een Helm-chart, charts/agent-lab, die de deployment van de applicatie
verpakt met haar sidecars: headless Chrome (CDP) voor webagents, een HPA, ingress,
configuratie en serviceaccount. Gebruik deze als je je eigen afhankelijkheden al beheert en
alleen de app wilt installeren.
Checklist
Controleer het volgende voordat je het als afgerond beschouwt:
-
GET /status/livenessenGET /status/readinessgeven 200 terug -
GET /docswordt weergegeven enGET /agents/listreageert (met een token als authenticatie aan staat) - Traces komen aan bij je OTLP-endpoint (zie Observability)
- Vault bevat
secret/app_secretsmet alle payloadsleutels - Keycloak-realm heeft een client en een serviceaccount