-
Notifications
You must be signed in to change notification settings - Fork 1.5k
ja deploy langbot kubernetes
Warning
事前に以下を理解しておく必要があります:
- Kubernetes クラスタの基本操作(
kubectl、Namespace、Deployment、Service、PVC) - コンテナ間ネットワークと永続ストレージの設定方法
LangBot リポジトリの docker/ ディレクトリには、すぐに使える Kubernetes マニフェスト kubernetes.yaml が用意されています。本ページはこのマニフェストのデプロイガイドで、Docker Compose デプロイと最も異なる部分である Box サンドボックスランタイム に焦点を当てます。
マニフェストは langbot ネームスペースに以下のコンポーネントを作成します:
| コンポーネント | 説明 | ポート |
|---|---|---|
langbot |
メインアプリ(WebUI + webhook) | 5300 / 2280-2290 |
langbot-plugin-runtime |
プラグインランタイム | 5400 |
langbot-box |
Box サンドボックスランタイム(任意) | 5410 |
永続ストレージ:langbot-data、langbot-plugins、langbot-plugin-runtime-data の 3 つの PVC。Box ワークスペースのルートは PVC ではなくノード上の hostPath(/app/data/box)を使用します。
# リポジトリをクローン
git clone https://github.com/langbot-app/LangBot
cd LangBot/docker
# すべてのコンポーネントをデプロイ
kubectl apply -f kubernetes.yaml
# 状態を確認
kubectl get all -n langbotポートフォワードで WebUI にアクセスできます:
kubectl port-forward -n langbot svc/langbot 5300:5300
# http://localhost:5300 にアクセス本番環境では Ingress + TLS での公開を推奨します(マニフェストにはコメントアウトされた Ingress / LoadBalancer / NodePort の例が含まれているので、必要に応じてコメントを解除してください)。
langbot-box は LangBot にコードサンドボックス機能を提供し、サンドボックスツール(exec / read / write / edit / glob / grep)、スキルの activate ツールと追加・編集、および stdio モードの MCP サーバーを支えます。これは任意のコンポーネントです:デプロイしなくても LangBot は動作し、ダッシュボードとスキル一覧は読み取り専用で表示されますが、上記の機能は無効になります。その場合は langbot に BOX__ENABLED=false を設定してください。
LangBot 公式イメージには Docker CLI のみが含まれています(dockerd も nsjail も含まれません)。そのため Box ランタイムは、マウントされたノードの Docker socket(/var/run/docker.sock)経由でサンドボックスコンテナを作成します。Pod 内で dockerd を実行するわけではありません。
ここから重要な制約が生じます:実際にサンドボックスコンテナを作成するのはノード上の Docker デーモンであり、bind-mount のパスをノードのファイルシステム視点で解決します。したがって Box ワークスペースのルートは、以下の 3 か所で同一の絶対パスでなければなりません:
- ノード上の実際のパス
-
langbot-boxコンテナ内のマウントパス - それが作成する各サンドボックスコンテナ内のマウントパス
これがマニフェストで通常の PVC ではなく hostPath(/app/data/box に固定)を使う理由です:PVC のパスは Pod の mount namespace 内にしか存在せず、ノードの dockerd からは見えません。また langbot と langbot-box は podAffinity によって同一ノードにスケジュールされ、この hostPath を共有します。
Warning
hostPath + 同一ノードアフィニティに依存するため、langbot は複数レプリカの水平スケーリングをサポートしません(ReadWriteOnce PVC と同じ制約)。高可用性が必要な場合は別のアーキテクチャを検討してください。
-
langbotは WebSocket で Box ランタイムに接続します。エンドポイントは ConfigMap のBOX__RUNTIME__ENDPOINT: ws://langbot-box:5410で指定します。
Note
コンテナ内のデフォルトホスト名は langbot_box(アンダースコア付き)ですが、アンダースコアは有効な Kubernetes DNS 名ではありません。そのためマニフェストでは、有効な Service 名 langbot-box を使ってエンドポイントを明示的に指定する必要があり、コンテナ内のデフォルト値に依存できません。
- Box ランタイムは自身の
box.local.*/BOX__*環境変数を読み取りません。設定はlangbotがBOX__LOCAL__*を読み取り、INIT RPC で渡します。したがってBOX__LOCAL__HOST_ROOT/DEFAULT_WORKSPACE/SKILLS_ROOT/ALLOWED_MOUNT_ROOTSはすべてlangbotDeployment に設定し、HOST_ROOTは両側のbox-rootマウントパス(/app/data/box)と一致させる必要があります。
ノードの Docker socket をマウントすると、Box ランタイム(およびサンドボックス内で実行される任意のコード)にノードへの実質的な root 権限を与えることになります。Box はこのワークロードを信頼できるノードにのみデプロイし、できればテイント/トレラレーションで隔離した専用ノードプールを使用してください。より強い隔離境界が必要な場合は、box.backend を e2b に切り替え(E2B_API_KEY を設定)、docker.sock のマウントと hostPath を削除します。詳細はサンドボックス設定を参照してください。
# Box ランタイムのログ(選択された backend が表示されるはず、例: "using backend: docker")
kubectl logs -n langbot -l app=langbot-box -f
# langbot が Box ランタイムに接続したことを確認
kubectl logs -n langbot -l app=langbot | grep -i "box runtime"サンドボックス機能が不要な場合は、マニフェストから langbot-box の Deployment / Service を削除し、langbot Deployment に BOX__ENABLED=false を設定して接続失敗の警告ログを回避してください。
- Docker デプロイ
- サンドボックスドキュメント と サンドボックス設定
- スキルシステムドキュメント
- マニフェストのソースファイル:リポジトリ内の
docker/kubernetes.yaml
Automatically synchronized from langbot-app/langbot-wiki.
简体中文
指南
开发者
- 插件开发
- 插件 SDK API
- 核心开发
API 参考
- Service API
English
Guides
Developers
-
Plugin Development
- Plugin Development Tutorial
- Completing Plugin Configuration Information
- Plugin Directory Structure
- Component Development
- Code Style Guide
- Migration Guide
- Publish Plugin
- Plugin SDK API
- Core Development
API Reference
- Service API