139 lines
5.0 KiB
YAML
139 lines
5.0 KiB
YAML
# ════════════════════════════════════════════════════════════════
|
||
# 光湖 · MCP Server 部署
|
||
# 部署铸渊 MCP Server 到 CVM,让 WorkBuddy 可以一键连接
|
||
# ════════════════════════════════════════════════════════════════
|
||
name: 🔧 MCP 服务部署
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
inputs:
|
||
action:
|
||
description: '操作: 部署 / 重启 / 查看状态'
|
||
default: '部署'
|
||
|
||
jobs:
|
||
deploy-mcp:
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: 同步最新代码
|
||
run: |
|
||
cd /data/guanghulab/repo
|
||
git fetch origin
|
||
git reset --hard origin/main
|
||
echo "✅ 代码已同步"
|
||
|
||
- name: 安装 MCP Server 依赖
|
||
run: |
|
||
cd /data/guanghulab/repo/server/mcp-server
|
||
if [ -d "node_modules" ]; then
|
||
npm install --production 2>/dev/null || true
|
||
else
|
||
npm install --production
|
||
fi
|
||
echo "✅ 依赖已安装"
|
||
|
||
- name: 配置并启动 MCP Server
|
||
env:
|
||
ZY_REPO_TOKEN: ${{ secrets.ZY_REPO_TOKEN }}
|
||
run: |
|
||
ACTION="${{ github.event.inputs.action }}"
|
||
|
||
# 注入 Gitea 令牌到 PM2 配置
|
||
cd /data/guanghulab/repo/server/mcp-server
|
||
if [ -n "$ZY_REPO_TOKEN" ]; then
|
||
# 更新 ecosystem.config.js 中的 GITEA_TOKEN
|
||
sed -i "s/GITEA_TOKEN: ''/GITEA_TOKEN: '$ZY_REPO_TOKEN'/" ecosystem.config.js
|
||
echo "✅ Gitea 令牌已注入"
|
||
else
|
||
echo "⚠️ ZY_REPO_TOKEN 未配置"
|
||
fi
|
||
|
||
# 创建运行时目录
|
||
mkdir -p /data/guanghulab/mcp-server
|
||
mkdir -p /data/guanghulab/.runtime/logs
|
||
|
||
case "$ACTION" in
|
||
deploy)
|
||
# 检查是否已有进程
|
||
if pm2 describe guanghulab-mcp-server &>/dev/null; then
|
||
pm2 restart guanghulab-mcp-server
|
||
echo "✅ MCP Server 已重启"
|
||
else
|
||
pm2 start ecosystem.config.js
|
||
echo "✅ MCP Server 已启动"
|
||
fi
|
||
pm2 save
|
||
;;
|
||
restart)
|
||
pm2 restart guanghulab-mcp-server
|
||
pm2 save
|
||
echo "✅ MCP Server 已重启"
|
||
;;
|
||
status)
|
||
pm2 describe guanghulab-mcp-server || echo "MCP Server 未运行"
|
||
;;
|
||
esac
|
||
|
||
- name: 更新 Nginx 配置
|
||
run: |
|
||
# 检查是否已有 /mcp 配置
|
||
if ! grep -q "location /mcp" /etc/nginx/sites-enabled/guanghulab* 2>/dev/null && \
|
||
! grep -q "location /mcp" /etc/nginx/conf.d/guanghulab* 2>/dev/null; then
|
||
echo "⚠️ Nginx 中尚未配置 /mcp 代理,需要手动添加"
|
||
echo " 参考配置: server/nginx/guanghulab-cvm.conf"
|
||
else
|
||
echo "✅ Nginx /mcp 代理已配置"
|
||
fi
|
||
|
||
# 测试并重载 Nginx
|
||
nginx -t 2>/dev/null && nginx -s reload 2>/dev/null && echo "✅ Nginx 已重载" || echo "⚠️ Nginx 重载失败(可能需要手动操作)"
|
||
|
||
- name: 验证部署
|
||
run: |
|
||
sleep 2
|
||
|
||
echo "═══ MCP Server 部署验证 ═══"
|
||
|
||
# 检查进程
|
||
if pm2 describe guanghulab-mcp-server &>/dev/null; then
|
||
STATUS=$(pm2 jlist | python3 -c "
|
||
import json,sys
|
||
procs=json.load(sys.stdin)
|
||
for p in procs:
|
||
if p.get('name')=='guanghulab-mcp-server':
|
||
print(p.get('pm2_env',{}).get('status','?'))
|
||
" 2>/dev/null || echo "unknown")
|
||
echo "PM2 状态: $STATUS"
|
||
else
|
||
echo "❌ PM2 中未找到 guanghulab-mcp-server"
|
||
fi
|
||
|
||
# 检查健康端点
|
||
if curl -sf http://127.0.0.1:8083/health > /dev/null 2>&1; then
|
||
echo "✅ 健康检查通过"
|
||
curl -s http://127.0.0.1:8083/health | python3 -m json.tool 2>/dev/null
|
||
else
|
||
echo "❌ 健康检查失败"
|
||
fi
|
||
|
||
# 显示访问密钥
|
||
if [ -f "/data/guanghulab/mcp-server/.access-key" ]; then
|
||
KEY=$(cat /data/guanghulab/mcp-server/.access-key)
|
||
echo ""
|
||
echo "═══ MCP 连接信息 ═══"
|
||
echo "URL: https://guanghulab.com/mcp"
|
||
echo "密钥: ${KEY:0:8}...${KEY: -8}"
|
||
echo ""
|
||
echo "WorkBuddy 配置:"
|
||
echo '{'
|
||
echo ' "mcpServers": {'
|
||
echo ' "guanghulab": {'
|
||
echo ' "url": "https://guanghulab.com/mcp",'
|
||
echo " \"headers\": { \"Authorization\": \"Bearer \$KEY\" }"
|
||
echo ' }'
|
||
echo ' }'
|
||
echo '}'
|
||
fi
|
||
|
||
echo "═══════════════════════════"
|