预订API MCP捆绑包
该捆绑包提供了一个完整的Docker Compose设置,用于运行Book API及其MCP(模型上下文协议)服务器,以及所有所需的基础设施。
仓库
- 预订API MCP服务器:
- API书:
概述
这 docker-compose.yml file协调了四个服务,它们协同工作以提供完整的Book API生态系统:
- 时序数据库 -一个带有TimescaleDB扩展的PostgreSQL数据库用于数据存储
- pgAdmin -基于Web的数据库管理工具
- BookApi -主要的ASP。NET核心REST API用于管理书籍
- bookapi mcp服务器 -向Claude Desktop公开Book API的MCP服务器
服务
时序数据库
PostgreSQL 17上运行的具有TimescaleDB扩展的PostgreSQL数据库。
- 图像:
timescale/timescaledb-ha:pg17 - 数据库:
propertydb(注:BookApi连接到bookapi数据库) - 用户:
admin - 密码:空(未设置密码)
- 健康检查:每10秒监控一次数据库准备情况
- 数据持久层:使用Docker卷(
postgres-data)保存数据
pgAdmin
用于管理数据库的基于Web的PostgreSQL管理界面。
- 图像:
dpage/pgadmin4 - 访问: http://localhost:5050
- 电子邮件:
admin@admin.com - 密码:空(未设置密码)
- 依赖项:等待TimescaleDB准备就绪
使用pgAdmin:
- 跑吧
books-data.sql用于设置数据库模式的脚本 - 创建
bookapi数据库 - 管理和查询账簿数据
BookApi
从 ../BookApi 目录。
- 构建上下文:
../BookApi - 环境:发展
- 连接字符串:连接到TimescaleDB
timescaledb:5432使用bookapi数据库 - 依赖项:等待TimescaleDB准备就绪
API提供了用于管理书籍(CRUD操作)的端点。
bookapi mcp服务器
将Claude Desktop与Book API连接起来的MCP服务器。
- 构建上下文:
../book-api-mcp-server-dotnet - 环境:将书籍API基本URL配置为
http://bookapi:8080 - 依赖项:等待BookApi准备就绪
该服务通过模型上下文协议公开了书籍API功能,允许Claude Desktop与书籍数据库进行交互。
用法
启动服务
docker-compose up -d这将以分离模式启动所有服务。服务将按依赖顺序启动:
- TimescaleDB优先
- pgAdmin(等待TimescaleDB)
- BookApi(等待TimescaleDB)
- bookapi-mcp服务器(等待bookapi)
设置数据库
- 访问pgAdminhttp://localhost:5050
- 使用登录
admin@admin.com(无密码) - 添加新的服务器连接:
- 主持人: timescaledb - 端口: 5432 - 数据库: propertydb (初始连接) - 用户名: admin - 密码:(留空)
- 创建
bookapi数据库(或使用SQL脚本) - 跑吧
books-data.sql脚本在bookapi用于创建模式和示例数据的数据库
停止服务
docker-compose down还要删除卷(⚠️ 这将删除所有数据):
docker-compose down -v查看日志
查看所有服务的日志:
docker-compose logs -f查看特定服务的日志:
docker-compose logs -f bookapi配置
环境变量
- 时序数据库:使用默认的PostgreSQL环境变量
- BookApi:连接字符串是通过配置的
ConnectionStrings__DefaultConnection - bookapi mcp服务器:书籍API URL通过配置
BookApi__BaseUrl
卷
创建了两个命名卷:
postgres-data:存储TimescaleDB数据(在容器重新启动时保持不变)pgadmin_data:存储pgAdmin配置和设置
网络
所有服务都在默认的Docker Compose网络上运行。, timescaledb, bookapi).
备注
- 默认情况下,数据库密码为空。对于生产使用,请在环境变量中设置安全密码。
- BookApi服务连接到名为的数据库
bookapi,但TimescaleDB初始化为propertydb。您需要创建bookapi手动或通过SQL脚本创建数据库。 - 端口上可以访问pgAdmin界面
5050在您的主机上。
使用Skaffold和Minikube(Kubernetes)运行
1.创建自签名TLS证书和私钥
在Kubernetes中运行Envoy之前,生成用于服务加密的TLS证书:
openssl req -x509 -newkey rsa:4096 -nodes -sha256 -days 365 \
-keyout privkey.pem -out cert.pem -extensions san \
-config \
<(echo "[req]";
echo distinguished_name=req;
echo "[san]";
echo subjectAltName=DNS:bookapi-mcp-server.default.svc.cluster.local
) \
-subj '/CN=bookapi-mcp-server.default.svc.cluster.local'这产生 cert.pem 和 privkey.pem 供Envoy用于终止TLS。
2.为Envoy创建Kubernetes Secret
将这些文件存储为Kubernetes TLS密钥,以便Envoy挂载:
kubectl create secret tls envoy-certs \
--key privkey.pem --cert cert.pem \
--dry-run=client --output yaml | kubectl apply --filename -3.启动Minikube(如果尚未运行)
minikube start通过以下方式检查状态:
minikube status要使用Minikube的内部Docker注册表进行本地构建,请执行以下操作:
eval $(minikube docker-env)4.使用Skaffold构建和部署所有服务
从项目根:
skaffold run --tail这将构建所有服务(TimescaleDB、BookApi、MCP Server、Envoy等)并将其部署到Minikube集群中。
5.通过LoadBalancer和隧道暴露Envoy
Envoy作为Kubernetes LoadBalancer服务公开。要从本地计算机访问它,请运行:
minikube tunnel此命令继续运行并公开 LoadBalancer 本地IP上的服务。
隧道运行后,找到Envoy服务的外部IP和端口:
kubectl get svc寻找 envoy 服务——通常在端口443上公开。
6.停止Minikube并清理
完成后:
minikube stop…停止集群。要删除所有群集资源,请执行以下操作:
minikube delete附加说明
- 除非在Kubernetes清单中使用持久卷,否则数据库不会持久化在Minikube中。
- 如果你在本地进行测试,你可能需要使用以下命令转发特定的服务(如TimescaleDB或pgAdmin)
kubectl port-forward用于本地调试。 - 确保数据库连接或API URL的任何环境变量反映Kubernetes服务名称(例如。,
bookapi,timescaledb).
请参阅 k8s/ 用于配置和根据本地环境的需要进行自定义的目录。
