feat: MCP Server 部署工作流

This commit is contained in:
铸渊 2026-05-13 08:39:28 +00:00
parent ab37962532
commit 0300ec8a1c
2 changed files with 276 additions and 0 deletions

View File

@ -0,0 +1,138 @@
# ════════════════════════════════════════════════════════════════
# 光湖 · 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 "═══════════════════════════"

View File

@ -0,0 +1,138 @@
# ════════════════════════════════════════════════════════════════
# 光湖 · 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 "═══════════════════════════"