guanghulab/.forgejo/workflows/deploy-mcp-server.yaml
2026-05-13 08:39:28 +00:00

139 lines
5.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ════════════════════════════════════════════════════════════════
# 光湖 · MCP Server 部署
# 部署铸渊 MCP Server 到 CVM让 WorkBuddy 可以一键连接
# ════════════════════════════════════════════════════════════════
name: 部署 MCP Server
on:
workflow_dispatch:
inputs:
action:
description: '操作: deploy / restart / status'
default: 'deploy'
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 "═══════════════════════════"