BAMOE MCP Web服务器
面向分销商(建立和推送图像)
先决条件
- Docker已安装
- 访问quay.io集装箱登记处
- 证书
pamoequay.io上的命名空间
构建和推送图像
只需运行构建脚本:
./build-and-push.sh脚本将:
- 构建Docker镜像
- 将其标记为
quay.io/pamoe/bamoe-mcp-web-app:latest - 提示您登录quay.io(使用凭据:用户名
athirakm) - 将图像推送到注册表
手动步骤(如果愿意):
# Build the image
docker build -t bamoe-mcp-web-app .
# Login to quay.io
docker login quay.io
# Username: athirakm
# Password: [your password]
# Tag the image
docker tag bamoe-mcp-web-app quay.io/pamoe/bamoe-mcp-web-app:latest
# Push to registry
docker push quay.io/pamoe/bamoe-mcp-web-app:latest______________________________________________________________________
一个web服务器应用程序,使用具有AI代理功能的基于React的UI访问BAMOE MCP(模型上下文协议)并与之交互。
特性
- 基于Web的用户界面,用于与BAMOE MCP服务器交互
- 内置Ollama LLM,预装花岗岩3.3:8b模型
- 用于决策和工作流模型的BAMOE MCP服务器
- 使用BeeAI的ReAct代理框架
- 基于WebSocket的实时通信
- 使用Docker Compose进行容器化部署
先决条件
- Docker和Docker Compose
- kubectl已安装并配置为可访问Kubernetes集群
- 具有可访问OpenAPI端点的有效BAMOE部署
- (可选)Node.js 20+和npm(用于本地开发)
Docker Compose快速入门
1.先决条件设置
在开始之前,您需要创建一个特定于Docker的kubeconfig(这会使您的原始配置保持不变):
# Create a Docker-specific kubeconfig
cp ~/.kube/config ~/.kube/config.docker
# Find your cluster's server address(es)
kubectl config view | grep server:
# Replace 127.0.0.1 with host.docker.internal for each cluster
# On macOS:
sed -i '' -e 's|https://127.0.0.1:PORT|https://host.docker.internal:PORT|g' ~/.kube/config.docker
# On Linux:
sed -i 's|https://127.0.0.1:PORT|https://host.docker.internal:PORT|g' ~/.kube/config.docker
# If you have multiple clusters, replace PORT with each actual port number
# Verify the change
grep "server:" ~/.kube/config.docker请参阅 Kubernetes配置 详细说明部分。
2.配置环境变量(可选)
创建一个 .env 示例中的文件:
cp .env.example .env您可以自定义以下设置:
PORT(默认值:3000)K8S_NAMESPACE(默认:本地kie沙盒开发部署)
注:
- 包含Olama with granite3.3:8b型号,可自动运行-无需设置!
- 您不再需要设置
DEPLOYMENT_ID-现在它在UI中动态选择!
3.启动应用程序
使用单个命令运行应用程序:
docker-compose up -d4.访问应用程序并选择部署
打开浏览器并导航到:
http://localhost:3000在UI中:
- 部署下拉列表将显示Kubernetes集群中所有可用的BAMOE部署
- 从下拉列表中选择部署
- MCP服务器将自动为所选部署进行部署
- 开始聊天!
5.停止应用程序
docker-compose down配置
动态部署选择
此应用程序具有以下功能 动态部署选择 -您不再需要硬编码部署ID。相反:
- UI从Kubernetes集群中获取所有可用的BAMOE部署
- 用户从下拉菜单中选择部署
- MCP服务器容器会自动为所选部署进行部署
- 切换部署动态重新部署MCP服务器
注: 部署ID不再通过环境变量设置。它是在运行时在UI中选择的。
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
PORT | Web应用程序端口 | 3000 |
OLLAMA_MODEL | 使用Olama模型 | granite3.3:8b |
BAMOE_HOST | BAMOE服务器主机 | host.docker.internal |
K8S_NAMESPACE | 用于BAMOE部署的Kubernetes命名空间 | local-kie-sandbox-dev-deployments |
注: Ollama以集装箱服务的形式运行,无需手动设置!
Docker的Kubernetes配置
为了使动态部署功能在Docker容器中工作,您需要将kubeconfig配置为可从Docker访问。
先决条件
kubectl在您的主机上安装和配置- 通过BAMOE部署访问Kubernetes集群
- 在配置的命名空间中运行的BAMOE部署
Kubeconfig安装程序,适用于kind或Docker桌面
如果你正在使用 善良的 (Docker中的Kubernetes)或 Docker桌面Kubernetes,群集API服务器通常绑定到 127.0.0.1 (本地主机)。然而在Docker容器中, 127.0.0.1 指的是容器本身,而不是主机。
解决方案: 创建一个特定于Docker的kubeconfig,它使用 host.docker.internal 而不是 127.0.0.1。此方法保持原始kubeconfig不变。
第一步:创建Docker特定的kubeconfig
cp ~/.kube/config ~/.kube/config.docker步骤2:更新服务器地址
替换 127.0.0.1 随着 host.docker.internal 在Docker特定的配置中:
查找您的群集端口:
kubectl config view | grep server:在macOS上:
# For kind cluster (example port: 49558)
sed -i '' 's|https://127.0.0.1:49558|https://host.docker.internal:49558|g' ~/.kube/config.docker
# For Docker Desktop cluster (example port: 64226)
sed -i '' 's|https://127.0.0.1:64226|https://host.docker.internal:64226|g' ~/.kube/config.docker
# If you have multiple clusters, you can update them all at once:
sed -i '' -e 's|https://127.0.0.1:49558|https://host.docker.internal:49558|g' -e 's|https://127.0.0.1:64226|https://host.docker.internal:64226|g' ~/.kube/config.docker在Linux上:
# For kind cluster (example port: 49558)
sed -i 's|https://127.0.0.1:49558|https://host.docker.internal:49558|g' ~/.kube/config.docker
# For Docker Desktop cluster (example port: 64226)
sed -i 's|https://127.0.0.1:64226|https://host.docker.internal:64226|g' ~/.kube/config.docker
# If you have multiple clusters, you can update them all at once:
sed -i -e 's|https://127.0.0.1:49558|https://host.docker.internal:49558|g' -e 's|https://127.0.0.1:64226|https://host.docker.internal:64226|g' ~/.kube/config.docker步骤3:验证更改
grep "server:" ~/.kube/config.docker您应该看到类似以下内容:
server: https://host.docker.internal:49558注: 最初 ~/.kube/config 保持不变,并将继续在您的主机上使用kubectl正常工作。
TLS证书处理
kind/Docker Desktop集群的TLS证书是为特定主机名颁发的(如 kubernetes, localhost, kind-*-control-plane),但不是为了 host.docker.internal.
应用程序通过使用 --insecure-skip-tls-verify 在Docker中运行kubectl命令时的标志。这对于使用kind/Docker Desktop集群的本地开发是安全的。
注: 对于生产部署或远程集群,请考虑使用适当的证书管理或服务帐户令牌。
验证Kubernetes连接
在启动应用程序之前测试Docker特定的kubeconfig:
# Test the Docker config from your host
kubectl --kubeconfig ~/.kube/config.docker get services -n local-kie-sandbox-dev-deployments --insecure-skip-tls-verify启动应用程序后,验证它是否可以连接到Kubernetes集群:
# Check if deployments are being fetched
docker-compose logs web-app | grep "deployments"
# You should see logs like:
# Fetched deployments successfully测试API端点:
curl http://localhost:3000/api/deployments预期响应:
{
"success": true,
"deployments": [
{
"workspaceName": "fiserv-Regulatory-Reporting",
"deploymentId": "qdd901b130",
"workspaceId": "5cdb50be-1b37-48c3-a94c-18d33ea9db9f"
}
]
}传递环境变量
您可以通过多种方式传递环境变量:
选项1:使用.env文件
# Edit .env file with your values
docker-compose up -d选项2:命令行
PORT=3001 docker-compose up -d选项3:导出到shell
export PORT=3001
export K8S_NAMESPACE=my-custom-namespace
docker-compose up -d建筑
该应用程序使用 动态部署架构:
服务
- Ollama LLM服务 (始终运行)
- 预装granite3.3:8b型号的Olama服务器 - 暴露在端口11434上 - 为web应用程序提供LLM功能 - 无需手动设置或模型拉取
- Web应用程序 (始终运行)
- Node.js/Express服务器,带web UI - 暴露在端口3000上(可配置) - 与Ollama集成以实现LLM功能 - 为实时交互提供WebSocket API - 从Kubernetes获取可用部署 - 管理MCP服务器容器生命周期
- BAMOE MCP服务器 (按需部署)
- 当用户选择部署时自动部署 - 暴露在端口18080上 - 已配置所选部署的OpenAPI URL - 当用户切换部署时自动重新部署
动态部署工作流
- 启动时:Ollama和Web应用程序容器自动启动
- 用户操作:用户打开UI,看到从Kubernetes获取的可用部署
- 部署选择:用户从下拉列表中选择部署
- MCP部署:应用程序自动运行
docker run使用所选部署ID部署MCP服务器容器 - 部署交换机:当用户选择其他部署时:
- 旧的MCP服务器容器已停止并删除 - 使用新的部署ID部署新的MCP服务器容器 - 为新部署重新加载工具
Kubernetes集成
- 应用程序连接到Kubernetes集群以获取可用的BAMOE部署
- 部署由与模式匹配的服务名称标识
dev-deployment-* - 工作区名称从Kubernetes服务注释中提取
- kubeconfig从以下位置挂载
~/.kube/config放入集装箱
地方发展
如果你想在没有Docker的情况下运行:
1.安装依赖项
npm install2.配置环境
cp .env.example .env
# Edit .env with your configuration3.启动BAMOE MCP服务器
docker run -it --rm \
--platform linux/amd64 \
-p 18080:8080 \
--name mcp-server \
-e MCP_SERVER_OPENAPI_URLS=http://host.docker.internal/dev-deployment-y95ykp145/docs/openapi.json \
quay.io/yamer/mcp-server:latest4.启动Web应用程序
npm start5.访问应用程序
http://localhost:3000Docker命令
构建web应用程序映像
docker-compose build查看日志
# All services
docker-compose logs -f
# Specific service
docker-compose logs -f web-app
docker-compose logs -f bamoe-mcp-server重新启动服务
docker-compose restart移除容器和卷
docker-compose down -v部署选项
部署此应用程序有两种方法:
选项1:从源部署(推荐)
这是 当前和推荐的方法 因为它允许定制和轻松更新。
要求:
- 完整存储库克隆
- 已安装Docker和Docker Compose
步骤:
- 克隆存储库:
git clone
cd bamoe-mcp- 创建特定于Docker的kubeconfig(请参阅 Kubernetes配置):
cp ~/.kube/config ~/.kube/config.docker
# Follow the sed commands to update server addresses- 创建环境配置(可选):
cp .env.example .env
# Customize settings like PORT, OLLAMA_MODEL, K8S_NAMESPACE if needed- 启动应用程序:
docker-compose up -d这 docker-compose up 命令将自动从源构建映像并启动所有服务。
优势:
- 易于自定义代码和配置
- 可以修改UI、服务器逻辑或添加新功能
- 通过提取最新代码进行简单更新
- 无需管理Docker注册表
选项2:使用预构建的Docker镜像进行部署
如果你想在没有源代码的情况下分发应用程序,你可以构建一个Docker镜像并将其推送到注册表。
创建和推送图像的步骤:
- 使用标签构建Docker镜像:
docker build -t your-dockerhub-username/bamoe-mcp-web-app:latest .- 推送到Docker Hub或任何容器注册表:
docker push your-dockerhub-username/bamoe-mcp-web-app:latest用户部署包:
用户只需要这些文件:
docker-compose.yml(修改为使用图像而不是构建).env.example(作为模板)
修改后的docker-compose.yml:
更换 web-app 服务的 build 部分与 image:
web-app:
image: your-dockerhub-username/bamoe-mcp-web-app:latest # Use image instead of build
container_name: bamoe-web-app
ports:
- "${PORT:-3000}:3000"
environment:
- PORT=${PORT:-3000}
- DEPLOYMENT_ID=${DEPLOYMENT_ID:-y95ykp145}
- BAMOE_HOST=host.docker.internal
- OLLAMA_MODEL=${OLLAMA_MODEL:-granite3.3:8b}
- OLLAMA_BASE_URL=${OLLAMA_HOST:-http://host.docker.internal:11434}
# ... rest of configuration用户部署步骤:
- 创建特定于Docker的kubeconfig(请参阅 Kubernetes配置):
cp ~/.kube/config ~/.kube/config.docker
# Follow the sed commands to update server addresses- (可选)创建
.env自定义文件:
cp .env.example .env
# Customize PORT, OLLAMA_MODEL, K8S_NAMESPACE if needed- 拉取和启动服务:
docker-compose pull
docker-compose up -d- 打开http://localhost:3000并从下拉列表中选择一个部署
优势:
- 较小的部署包(只有docker-compose.yml和.env)
- 部署时没有构建时间
- 更容易分发给非技术用户
- 通过图像标签进行版本控制
缺点:
- 需要访问容器注册表(Docker Hub等)
- 如果不重建和推送图像,则无法轻松自定义
- 用户无法查看或修改源代码
选择哪个选项?
- 使用选项1 如果你正在开发、需要定制或想要简单的代码更新
- 使用选项2 如果您要分发给只需要运行应用程序的最终用户
故障排除
查看日志
查看所有服务的日志:
docker-compose logs -f查看特定服务的日志:
# Web application logs
docker-compose logs -f web-app
# BAMOE MCP server logs
docker-compose logs -f bamoe-mcp-server
# Get last 100 lines
docker-compose logs --tail 100 web-app端口冲突
如果端口3000或18080已在使用中,请在您的 .env 文件:
PORT=3001集装箱问题
检查集装箱状态:
docker-compose ps如果容器不断重新启动,请检查日志中的错误:
docker-compose logs web-app --tail 50从头开始重建容器:
docker-compose down
docker-compose build --no-cache
docker-compose up -dOllama连接问题
症状: 错误如 APICallError, Connection refused,或 404 not found 处理查询时
解决方案:
- 验证Ollama容器是否正在运行:
docker ps --filter "name=bamoe-ollama"- 检查Ollama集装箱日志:
docker-compose logs ollama- 从您的主机测试Ollama API:
curl http://localhost:11434/api/tags- 测试来自web应用程序容器的连接:
docker exec bamoe-web-app wget -qO- http://ollama:11434/api/tags- 验证容器中的环境变量:
docker exec bamoe-web-app sh -c 'env | grep OLLAMA'预期产量:
OLLAMA_BASE_URL=http://ollama:11434/api
OLLAMA_MODEL=granite3.3:8b- 检查Ollama初始化的应用程序日志:
docker-compose logs web-app | grep "Initializing Ollama"预期产量:
Initializing Ollama with model: granite3.3:8b, baseURL: http://ollama:11434/api- 如果Ollama容器未启动,请重新启动所有服务:
docker-compose down
docker-compose up -dBAMOE连接问题
症状: 错误如 fetch failed 或 [BAMOE] Error: fetch failed 执行DMN模型时
解决方案:
- 验证BAMOE部署是否可以从您的主机访问:
# Replace {DEPLOYMENT_ID} with your selected deployment ID from the UI
curl http://localhost/dev-deployment-{DEPLOYMENT_ID}/docs/openapi.json- 检查日志中的BAMOE配置:
docker-compose logs web-app | grep "\[BAMOE\] Configuration"预期产量:
[BAMOE] Configuration: DEPLOYMENT_ID=qdd901b130, BAMOE_HOST=host.docker.internal, BAMOE_BASE_URL=http://host.docker.internal/dev-deployment-qdd901b130重要提示: 这 BAMOE_HOST 必须 host.docker.internal 在Docker中运行时,不 localhost.
- 验证您在UI中选择了部署:
- 打开http://localhost:3000 - 检查部署下拉列表是否显示可用部署 - 如果选择“无”,请选择部署
- 从容器中测试BAMOE端点:
# Replace with your actual deployment ID
docker exec bamoe-web-app wget -qO- http://host.docker.internal/dev-deployment-qdd901b130/docs/openapi.json- 检查MCP服务器容器是否正在运行:
docker ps --filter "name=bamoe-mcp-server"如果未运行,请在UI中选择一个部署以触发部署。
Kubernetes部署获取问题
症状: 部署下拉菜单显示“未找到部署”或“加载部署时出错”
解决方案:
- 验证kubectl是否可以从主机访问集群:
kubectl get services -n local-kie-sandbox-dev-deployments- 检查Docker特定的kubeconfig是否配置正确:
grep "server:" ~/.kube/config.docker
# Should show: server: https://host.docker.internal:
- 验证kubeconfig是否安装在容器中:
docker exec bamoe-web-app ls -la /root/.kube/config- 从容器内部测试kubectl:
docker exec bamoe-web-app kubectl get services -n local-kie-sandbox-dev-deployments --insecure-skip-tls-verify- 检查日志中的部署获取错误:
docker-compose logs web-app | grep -i "deployment\|kubectl"- 验证Kubernetes命名空间是否正确:
- 检查 K8S_NAMESPACE 环境变量 - 确保BAMOE服务存在于该命名空间中
环境变量问题
验证所有环境变量是否设置正确:
# Check in the container
docker exec bamoe-web-app sh -c 'env | grep -E "OLLAMA|BAMOE|K8S"'预期产量:
OLLAMA_BASE_URL=http://ollama:11434/api
OLLAMA_MODEL=granite3.3:8b
BAMOE_HOST=host.docker.internal
K8S_NAMESPACE=local-kie-sandbox-dev-deployments注: DEPLOYMENT_ID 不再设置为环境变量。当用户在UI中选择部署时,它会动态设置。
如果环境变量缺失或不正确:
- 更新您的
.env文件 - 重新启动容器:
docker-compose down
docker-compose up -d调试代理错误
如果AI代理无法处理查询,请检查详细的错误信息:
docker-compose logs web-app --tail 200 | grep -A 20 "Error\|error"常见代理错误:
- ChatModelError:未处理的错误
- 通常表示Ollama连接问题 - 检查Ollama配置和连接
- 代理错误:代理遇到错误
- 检查工具是否正确装载 - 验证BAMOE MCP服务器是否已连接
- 获取失败
- BAMOE端点不可访问 - 检查BAMOE_HOST配置
测试单个组件
直接测试Olama:
# Test if Ollama is running
curl http://localhost:11434/api/tags
# Test chat endpoint
curl -X POST http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "granite3.3:8b",
"messages": [{"role": "user", "content": "test"}],
"stream": false
}'测试BAMOE MCP服务器:
# Note: MCP server only runs after selecting a deployment in the UI
docker ps --filter "name=bamoe-mcp-server"测试web应用程序启动:
docker-compose logs web-app | grep "Server running"预期产量:
Server running at http://localhost:3000
No MCP tools loaded yet. Please select a deployment in the UI.测试Kubernetes部署获取:
curl http://localhost:3000/api/deployments预期产量:
{
"success": true,
"deployments": [
{
"workspaceName": "fiserv-Regulatory-Reporting",
"deploymentId": "qdd901b130",
"workspaceId": "5cdb50be-1b37-48c3-a94c-18d33ea9db9f"
}
]
}强制清理重建
如果您遇到持续存在的问题:
# Stop and remove everything
docker-compose down -v
# Remove the built image
docker rmi bamoe-mcp-web-app
# Rebuild from scratch
docker-compose build --no-cache
# Start fresh
docker-compose up -d
# Watch logs
docker-compose logs -f性能问题
如果Ollama反应缓慢:
- 检查GPU支持是否可用,并在docker-compose.yml中启用它:
ollama:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]- 监控资源使用情况:
docker stats- 检查Ollama容器日志以检测GPU:
docker-compose logs ollama | grep -i gpuMCP服务器配置
该应用程序使用在中配置的BAMOE MCP服务器 mcp-servers.json:
- 巴莫:用于BAMOE决策和工作流模型的自定义MCP服务器
可用的BAMOE工具
BAMOE MCP服务器提供以下工具:
execute_dev_deployment_qx_gh_DMN_model:执行欺诈检测DMN模型fetching_dev_deployment_qx_gh_BPMN_process_workflow_instance:获取BPMN工作流实例update_dev_deployment_qx_gh_BPMN_process_workflow_model:更新BPMN工作流模型delete_dev_deployment_qx_gh_BPMN_process_workflow_model:删除BPMN工作流模型
许可证
ISC
作者
迪利潘Somasundaram
