diff --git a/brain/d101-mcp-deploy-guide.md b/brain/d101-mcp-deploy-guide.md new file mode 100644 index 0000000..04fcb33 --- /dev/null +++ b/brain/d101-mcp-deploy-guide.md @@ -0,0 +1,119 @@ +# repo-mcp-server 双实例部署指南 + +## 背景 + +问题:之之用冰朔的MCP令牌操作仓库,结果写到了冰朔的仓库。 + +根因:repo-mcp-server 只有一个实例,硬编码指向 `bingshuo/guanghulab`。 + +方案:部署两个MCP服务器实例,各自绑定不同仓库。 + +## 架构 + +``` +WorkBuddy(冰朔) → https://guanghulab.com/mcp → nginx → 3903 repo-mcp-bs (bingshuo/guanghulab) +WorkBuddy(之之) → https://guanghulab.com/zz-mcp → nginx → 3904 repo-mcp-zz (bingshuo/zhizhi) +``` + +## 部署步骤 + +### 1. 先确认之之的仓库名 + +之之的仓库路径是什么?如果她有自己的Forgejo仓库,路径类似 `bingshuo/zhizhi`。 +如果她的仓库嵌套在冰朔的仓库里(比如 `bingshuo/guanghulab/zhizhi/`), +那MCP服务器需要改为指向子目录——但Gitea API不支持子目录级别的仓库操作。 + +**需要的确认信息:** +- 之之的Gitea用户名和仓库名 +- 之之的Gitea API Token(有写权限的) + +### 2. 更新代码 + +```bash +cd /opt/guanghu/guanghulab +git pull origin main +``` + +`ecosystem.config.js` 已更新,包含两个MCP实例。 + +### 3. 设置环境变量 + +```bash +# 冰朔的 Gitea Token(当前已经在用的) +export GITEA_TOKEN_BS="当前GiteaToken" +export REPO_MCP_SECRET_BS="当前MCP密码" + +# 之之的 Gitea Token(需要之之在Forgejo生成自己的Token) +export GITEA_TOKEN_ZZ="之之的Token" +export REPO_MCP_SECRET_ZZ="之之的MCP密码" +``` + +之之在Forgejo生成Token的路径: +`用户设置 → 应用 → 生成访问令牌` +权限选择:`读写仓库内容` + +### 4. 重启PM2 + +```bash +pm2 start ecosystem.config.js +``` + +检查两个实例都在运行: +```bash +pm2 list +# 应该看到 repo-mcp-bs 和 repo-mcp-zz 都在线 +``` + +### 5. 配置Nginx反向代理 + +在 nginx 配置中添加之之的MCP路由: + +```nginx +# 冰朔的MCP(已有) +location /mcp { + proxy_pass http://127.0.0.1:3903/mcp; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_buffering off; + proxy_request_buffering off; + proxy_http_version 1.1; +} + +# 之之的MCP(新增) +location /zz-mcp { + proxy_pass http://127.0.0.1:3904/mcp; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_buffering off; + proxy_request_buffering off; + proxy_http_version 1.1; +} +``` + +```bash +nginx -t && systemctl reload nginx +``` + +### 6. 之之配置WorkBuddy + +之之的 WorkBuddy mcp.json 应该指向她的专属端点: + +```json +{ + "mcpServers": { + "guanghulab": { + "url": "https://guanghulab.com/zz-mcp", + "headers": { + "Authorization": "Bearer 之之的MCP密码" + }, + "disabled": false + } + } +} +``` + +## 注意 + +- 两个实例使用同一份代码(mcp-servers/repo-mcp-server/index.js),只是环境变量不同 +- 一键升级:代码更新后 `pm2 restart all` 两个都重启 +- 之之的MCP密码和Gitea Token由之之自己保管,冰朔不共享