Skip to content

ja deploy langbot kubernetes

langbot-wiki-sync[bot] edited this page Jul 29, 2026 · 1 revision

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-datalangbot-pluginslangbot-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 の例が含まれているので、必要に応じてコメントを解除してください)。

Box サンドボックスランタイム

langbot-box は LangBot にコードサンドボックス機能を提供し、サンドボックスツール(exec / read / write / edit / glob / grep)、スキルの activate ツールと追加・編集、および stdio モードの MCP サーバーを支えます。これは任意のコンポーネントです:デプロイしなくても LangBot は動作し、ダッシュボードとスキル一覧は読み取り専用で表示されますが、上記の機能は無効になります。その場合は langbotBOX__ENABLED=false を設定してください。

仕組みと重要な制約

LangBot 公式イメージには Docker CLI のみが含まれています(dockerd も nsjail も含まれません)。そのため Box ランタイムは、マウントされたノードの Docker socket(/var/run/docker.sock)経由でサンドボックスコンテナを作成します。Pod 内で dockerd を実行するわけではありません。

ここから重要な制約が生じます:実際にサンドボックスコンテナを作成するのはノード上の Docker デーモンであり、bind-mount のパスをノードのファイルシステム視点で解決します。したがって Box ワークスペースのルートは、以下の 3 か所で同一の絶対パスでなければなりません:

  1. ノード上の実際のパス
  2. langbot-box コンテナ内のマウントパス
  3. それが作成する各サンドボックスコンテナ内のマウントパス

これがマニフェストで通常の PVC ではなく hostPath/app/data/box に固定)を使う理由です:PVC のパスは Pod の mount namespace 内にしか存在せず、ノードの dockerd からは見えません。また langbotlangbot-boxpodAffinity によって同一ノードにスケジュールされ、この 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__* 環境変数を読み取りません。設定は langbotBOX__LOCAL__* を読み取り、INIT RPC で渡します。したがって BOX__LOCAL__HOST_ROOT / DEFAULT_WORKSPACE / SKILLS_ROOT / ALLOWED_MOUNT_ROOTS はすべて langbot Deployment に設定し、HOST_ROOT は両側の box-root マウントパス(/app/data/box)と一致させる必要があります。

セキュリティに関する注意

ノードの Docker socket をマウントすると、Box ランタイム(およびサンドボックス内で実行される任意のコード)にノードへの実質的な root 権限を与えることになります。Box はこのワークロードを信頼できるノードにのみデプロイし、できればテイント/トレラレーションで隔離した専用ノードプールを使用してください。より強い隔離境界が必要な場合は、box.backende2b に切り替え(E2B_API_KEY を設定)、docker.sock のマウントと hostPath を削除します。詳細はサンドボックス設定を参照してください。

Box の準備完了を確認する

# 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 を設定して接続失敗の警告ログを回避してください。

関連ドキュメント

LangBot Documentation

Home

简体中文
指南
开发者
API 参考
Other pages
English
Guides
Developers
API Reference
Other pages
日本語
ガイド
開発者
API リファレンス
Other pages

Clone this wiki locally