2 つのデプロイモデル
| モデル | 得られるもの | 参照先 |
|---|---|---|
| Docker Compose | リファレンスアプリと依存関係一式を、手元のマシンで数分で起動 | 開発者ガイド — アプリケーションの実行 |
| Kubernetes (Terraform + Helm) | 本番向けのリファレンスデプロイ:オペレーター、データベース、認証、シークレット、オブザーバビリティなど一式 | このページ |
ローカル:Docker Compose
フレームワークのリポジトリには、2 つの完全なスタック(アプリケーション、PostgreSQL(pgvector 付き)、 Redis、Vault、オブザーバビリティスタック)が同梱されています。
docker compose -f compose-grafana.yml up --build # Grafana stack
docker compose -f compose-opensearch.yml up --build # OpenSearch Dashboards stackスキャフォールドで生成したプロジェクトには、独自の compose.yml(app + postgres + redis + vault)が含まれます。最初のエージェントを参照してください。
本番:Terraform による Kubernetes
Agent-Lab は、アプリケーションとその依存関係を Kubernetes にデプロイする Terraform スクリプトを提供しています。このウォークスルーでは参考として Minikube クラスターを使用します。実際のデプロイでは本番運用に対応したクラスターを使用してください。
前提条件
Kubernetes クラスターのセットアップ
Minikube (Linux):十分なリソースを割り当ててください(リファレンススタックは重量級です)。
minikube start --memory=20g --cpus=4クラスターの IP を確認し、サービスのドメインをその IP にマッピングします。
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):同梱の Kubernetes を有効にします。

Docker Desktop では、ドメインは 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.com依存関係のプロビジョニング
以下のモジュールはすべて terraform/ にあります。各ディレクトリで terraform init && terraform apply を、次の順序で実行してください。
| モジュール | プロビジョニングされるもの |
|---|---|
01_traefik/ |
Traefik イングレスコントローラー |
02_cert-manager/ |
TLS 用の cert-manager |
03_cert-cluster-issuer/ |
Let's Encrypt の本番用 ClusterIssuer |
04_redis-operator/ |
Redis オペレーター(Pub/Sub によるステータス更新) |
05_postgres-operator/ |
PostgreSQL オペレーター:3 つのデータベース(リレーショナル、pgvector、チェックポイント) |
06_keycloak-operator/ |
Keycloak オペレーター |
08_vault-instance/ |
シークレット管理用の Vault |
Keycloak インスタンス(09_keycloak-instance/)を作成し、管理者パスワードを取得します。
echo "$(kubectl --namespace keycloak get secret/keycloak-initial-admin -o go-template='{{index .data "password" | base64decode}}')"OIDC 接続は Keycloak による認証に従って設定するか、後述の 12_agent-lab-auth-realm/ モジュールに任せます。
Vault の初期化(08_vault-instance/ の適用後):初期化とアンシールを行います。
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_KEYオブザーバビリティ(任意ですが推奨):シミュレーションスイートとトレーシングバックエンドで使用する LLM オブザーバビリティプラットフォームです。
| モジュール | プロビジョニングされるもの |
|---|---|
13_langfuse-instance/ |
Langfuse:LLM のトレースとシミュレーション実験 |
14_langwatch-instance/ |
LangWatch:シミュレーションとダッシュボード |
07_elastic-operator/ + 10_elastic-instance/ |
ログと APM 用の ECK (Elastic) |
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/):アプリのエクスポート先となる OTLP エンドポイントです(オブザーバビリティ)。
LiteLLM ゲートウェイ(17_litellm-instance/):仮想キー、利用額の追跡、管理 UI(/ui)を備えた、セルフホスト型の OpenAI 互換 LLM ゲートウェイです。
echo "$(kubectl --namespace litellm get secret/litellm-masterkey -o go-template='{{index .data "masterkey" | base64decode}}')"
curl -s https://<litellm_fqdn>/health/readinessAgent-Lab のデプロイ
3 つのモジュールですべてを結び付けます。
| モジュール | 設定されるもの |
|---|---|
12_agent-lab-auth-realm/ |
アプリ用の Keycloak レルム、クライアント、サービスアカウント |
15_agent-lab-dependencies/ |
ランタイムの依存関係の配線(データベース、ブローカー、LANGFUSE_* キーなど) |
16_agent-lab-instance/ |
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
シークレットに関する注意: デプロイされたアプリは起動時に Vault(
secret/app_secrets)から設定を読み込みます。 ペイロードのキーは設定リファレンスに一覧があります。
Helm チャート
リポジトリには Helm チャート charts/agent-lab も同梱されています。これはアプリケーションのデプロイをサイドカー(Web エージェント用のヘッドレス Chrome(CDP))、HPA、イングレス、設定、サービスアカウントとともにパッケージ化したものです。依存関係をすでに自前で運用しており、アプリだけをインストールしたい場合に使用してください。
チェックリスト
完了とする前に、次の点を確認してください。
-
GET /status/livenessとGET /status/readinessが 200 を返す -
GET /docsが表示され、GET /agents/listが応答する(認証が有効な場合はトークンを付与) - トレースが OTLP エンドポイントに届いている(オブザーバビリティを参照)
- Vault に、すべてのペイロードキーを含む
secret/app_secretsが存在する - Keycloak レルムにクライアントとサービスアカウントが存在する