部署平台:MCP服务器和网站目录内建部署功能
Unyly(一个MCP服务器目录)的作者为其添加了完整的部署平台,允许用户将GitHub仓库部署为子域名上的网站或MCP服务器。系统自动生成Dockerfile,运行受限容器,并处理路由、健康检查和通过webhook的自动部署。文章详细介绍了架构,并分享了开发过程中遇到的陷阱。
作者此前在 Habr 上构建了一个 MCP 服务器目录,从九个来源汇总了八万条条目。用户询问这些服务器在哪里运行,因为其中许多是 GitHub 仓库,需要配置和托管。为解决这一问题,作者在 Unyly 中增加了一个部署部分,使用户能够连接 GitHub 仓库,并在 slug.unyly.org 上获得一个实时项目,且能在推送时自动重建。它支持静态网站、前端构建、Next.js 以及基于 Node 和 Python 的 MCP 服务器。部署流程包括:一个 GitHub webhook 发送到 Next.js API,并进行 HMAC 验证,然后入队到 SQLite;一个工作进程克隆仓库,根据项目类型生成 Dockerfile,构建并运行容器并设置资源限制;以及一个反向代理在 3900 端口上根据 Host 头进行路由。代理和工作进程是独立进程,在 pm2 下运行,以避免阻塞。Dockerfile 生成包括针对 Node MCP 服务器(通过 supergateway 包装为 HTTP)、Python MCP 服务器、静态网站、前端构建和 Next.js 的配方。容器运行时有内存、CPU 和进程数限制,并且除 nginx 站点外,所有能力都会被移除。健康检查会检查网站是否返回 HTTP 状态码,并对 MCP 服务器执行真实的 JSON-RPC initialize 调用。路由使用带有负向先行断言的 regex server_name,以排除服务子域名。自动部署包括拉取请求预览,这些预览会自动构建和清理。管理控制台位于 deploy.unyly.org,免费套餐允许一个项目,Pro 套餐允许十个。作者分享了几个陷阱:同步的 docker 构建会阻塞事件循环、Dockerfile 中的 printf 会破坏 nginx、通配符子域名会捕获管理子域名、跨子域名 cookie 问题通过 SSO 桥解决,以及必须包装 stdio 服务器,因为不这样做就无法通过 HTTP 访问它们。
来源: Habr — хаб ИИ —
原文
