V3升级Phase3: 更新deploy-brain-proxy.sh支持deploy-v3/switch-v3, 更新工作流添加V3操作选项

Agent-Logs-Url: https://github.com/qinfendebingshuo/guanghulab/sessions/226aae4f-48b7-4668-850c-7858729e6aa0

Co-authored-by: qinfendebingshuo <207279273+qinfendebingshuo@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-04-05 15:48:04 +00:00 committed by GitHub
parent 5a42b0a5e3
commit 7d33e49101
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 171 additions and 3 deletions

View File

@ -28,6 +28,8 @@ on:
- remove-user
- list-users
- send-subscription
- deploy-v3
- switch-v3
default: 'status'
email:
description: '用户邮箱 (add-user/remove-user/send-subscription时需要)'
@ -55,7 +57,9 @@ jobs:
github.event.inputs.action == 'install' ||
github.event.inputs.action == 'update' ||
github.event.inputs.action == 'status' ||
github.event.inputs.action == 'restart'
github.event.inputs.action == 'restart' ||
github.event.inputs.action == 'deploy-v3' ||
github.event.inputs.action == 'switch-v3'
steps:
- name: '📥 检出代码'

View File

@ -4,7 +4,7 @@
# 📜 Copyright: 国作登字-2026-A-00037559
# ═══════════════════════════════════════════════
# server/proxy/deploy-brain-proxy.sh
# 🚀 铸渊专线V2 · 大脑服务器部署脚本
# 🚀 铸渊专线V2 + 光湖语言世界V3 · 大脑服务器部署脚本
#
# 在大脑服务器(ZY-SVR-005)上执行
# 部署多用户VPN系统 (独立于面孔服务器的V1)
@ -17,6 +17,8 @@
# bash deploy-brain-proxy.sh add-user <email> [quota_gb] — 添加用户
# bash deploy-brain-proxy.sh remove-user <email> — 移除用户
# bash deploy-brain-proxy.sh list-users — 列出用户
# bash deploy-brain-proxy.sh deploy-v3 — 部署V3测试环境
# bash deploy-brain-proxy.sh switch-v3 — 切换V2→V3 (用户刷新即升级)
# ═══════════════════════════════════════════════
set -uo pipefail
@ -196,8 +198,16 @@ deploy_services() {
cp "$REPO_PROXY_DIR"/service/vpn-worker.js "$PROXY_DIR/service/"
cp "$REPO_PROXY_DIR"/ecosystem.brain-proxy.config.js "$PROXY_DIR/"
# 复制V3服务文件 (独立运行·不影响V2)
cp "$REPO_PROXY_DIR"/service/subscription-server-v3.js "$PROXY_DIR/service/"
cp "$REPO_PROXY_DIR"/service/llm-router.js "$PROXY_DIR/service/"
cp "$REPO_PROXY_DIR"/service/reverse-boost-agent.js "$PROXY_DIR/service/"
cp "$REPO_PROXY_DIR"/service/proxy-guardian.js "$PROXY_DIR/service/"
cp "$REPO_PROXY_DIR"/ecosystem.brain-proxy-v3.config.js "$PROXY_DIR/"
# 复制V2 Nginx配置参考
cp "$REPO_PROXY_DIR"/config/nginx-brain-proxy-snippet.conf "$PROXY_DIR/config/" 2>/dev/null || true
cp "$REPO_PROXY_DIR"/config/nginx-brain-proxy-v3-snippet.conf "$PROXY_DIR/config/" 2>/dev/null || true
# 复制共用文件(发邮件等)
cp "$REPO_PROXY_DIR"/service/send-subscription.js "$PROXY_DIR/service/" 2>/dev/null || true
@ -377,6 +387,15 @@ health_check() {
echo " ❌ V2订阅服务: 端口3803无响应"
fi
# V3订阅服务 (如果已部署)
if curl -sf http://127.0.0.1:3805/health >/dev/null 2>&1; then
HEALTH3=$(curl -sf http://127.0.0.1:3805/health)
USERS3=$(echo "$HEALTH3" | grep -o '"users_count":[0-9]*' | cut -d: -f2)
echo " ✅ V3订阅服务: 正常 (${USERS3:-0}个用户) · 光湖语言世界"
else
echo " ⚠️ V3订阅服务: 端口3805无响应 (未部署或未启动)"
fi
# Nginx反向代理
if systemctl is-active --quiet nginx 2>/dev/null; then
if curl -sf http://127.0.0.1:80/api/proxy-v2/health >/dev/null 2>&1; then
@ -468,6 +487,149 @@ list_users() {
node "$PROXY_DIR/service/user-manager.js" list
}
# ── deploy-v3: 部署V3测试环境 ──────────────────
# V2继续运行·V3独立启动·通过/api/proxy-v3/测试
deploy_v3() {
echo "部署V3测试环境 (V2继续运行)..."
deploy_services
# 加载密钥作为环境变量
if [ -f "$PROXY_DIR/.env.keys" ]; then
set -a
# shellcheck source=/dev/null
source "$PROXY_DIR/.env.keys"
set +a
fi
# 启动V3 PM2进程
cd "$PROXY_DIR" || { echo "❌ 无法进入 $PROXY_DIR"; return 1; }
pm2 startOrRestart ecosystem.brain-proxy-v3.config.js --update-env
pm2 save
# 添加V3 Nginx测试路径
NGINX_CONF=""
for candidate in /etc/nginx/sites-enabled/zhuyuan-brain.conf /etc/nginx/sites-enabled/default; do
if [ -f "$candidate" ]; then
NGINX_CONF="$candidate"
break
fi
done
if [ -n "$NGINX_CONF" ] && ! grep -q "proxy-v3" "$NGINX_CONF" 2>/dev/null; then
echo " 添加V3测试路径..."
sed -i '/^}/i\
# ─── 光湖语言世界V3测试 (端口 3805) ───\
location /api/proxy-v3/ {\
proxy_pass http://127.0.0.1:3805/;\
proxy_http_version 1.1;\
proxy_set_header Host $host;\
proxy_set_header X-Real-IP $remote_addr;\
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
proxy_set_header X-Forwarded-Proto $scheme;\
proxy_connect_timeout 10s;\
proxy_read_timeout 30s;\
proxy_send_timeout 30s;\
add_header X-Content-Type-Options nosniff always;\
add_header X-Frame-Options DENY always;\
add_header Cache-Control "no-store, no-cache, must-revalidate" always;\
}' "$NGINX_CONF" || true
echo " ✅ V3测试路径已添加"
else
echo " proxy-v3配置已存在或Nginx配置未找到"
fi
if nginx -t 2>/dev/null; then
nginx -s reload 2>/dev/null || systemctl reload nginx 2>/dev/null || true
echo " ✅ Nginx已重载"
fi
echo ""
echo "════════════════════════════════════════"
echo "✅ V3测试环境已就绪"
echo ""
echo "测试方法:"
echo " V3订阅: https://域名/api/proxy-v3/sub/{token}"
echo " V3仪表盘: https://域名/api/proxy-v3/dashboard/{token}"
echo " V3健康: https://域名/api/proxy-v3/health"
echo ""
echo "V2继续运行在 /api/proxy-v2/ (端口3803)"
echo "V3测试运行在 /api/proxy-v3/ (端口3805)"
echo ""
echo "测试通过后执行: bash deploy-brain-proxy.sh switch-v3"
echo "════════════════════════════════════════"
# V3健康检查
sleep 2
if curl -sf http://127.0.0.1:3805/health >/dev/null 2>&1; then
HEALTH=$(curl -sf http://127.0.0.1:3805/health)
echo " ✅ V3订阅服务: 正常"
echo " $HEALTH"
else
echo " ⚠️ V3订阅服务(3805)尚未就绪,请稍等几秒后检查"
fi
}
# ── switch-v3: 切换V2→V3 ──────────────────────
# 用户刷新订阅即获取V3配置
switch_v3() {
echo "切换 /api/proxy-v2/ → V3 (端口3805)..."
NGINX_CONF=""
for candidate in /etc/nginx/sites-enabled/zhuyuan-brain.conf /etc/nginx/sites-enabled/default; do
if [ -f "$candidate" ]; then
NGINX_CONF="$candidate"
break
fi
done
if [ -z "$NGINX_CONF" ]; then
echo "❌ 未找到Nginx配置文件"
exit 1
fi
# 验证V3服务是否运行
if ! curl -sf http://127.0.0.1:3805/health >/dev/null 2>&1; then
echo "❌ V3服务(3805)未运行!请先执行 deploy-v3"
exit 1
fi
# 备份当前Nginx配置
cp "$NGINX_CONF" "${NGINX_CONF}.v2-backup"
echo " ✅ 已备份Nginx配置到 ${NGINX_CONF}.v2-backup"
# 将 /api/proxy-v2/ 的 proxy_pass 从 3803 改为 3805
if grep -q "proxy_pass.*127\.0\.0\.1:3803" "$NGINX_CONF" 2>/dev/null; then
sed -i 's|proxy_pass[[:space:]]*http://127\.0\.0\.1:3803|proxy_pass http://127.0.0.1:3805|g' "$NGINX_CONF"
echo " ✅ /api/proxy-v2/ 已切换到V3 (3803→3805)"
else
echo " ⚠️ 未找到3803端口配置可能已切换"
fi
# 重载Nginx
if nginx -t 2>/dev/null; then
nginx -s reload 2>/dev/null || systemctl reload nginx 2>/dev/null || true
echo " ✅ Nginx已重载"
else
echo " ❌ Nginx配置验证失败回滚..."
cp "${NGINX_CONF}.v2-backup" "$NGINX_CONF"
nginx -s reload 2>/dev/null || systemctl reload nginx 2>/dev/null || true
echo " ✅ 已回滚到V2配置"
exit 1
fi
echo ""
echo "════════════════════════════════════════"
echo "✅ V2→V3 切换完成!"
echo ""
echo "现在 /api/proxy-v2/sub/{token} 指向V3 (端口3805)"
echo "用户刷新订阅即可获取「光湖语言世界」配置"
echo ""
echo "回滚方法 (如有问题):"
echo " cp ${NGINX_CONF}.v2-backup $NGINX_CONF"
echo " nginx -s reload"
echo "════════════════════════════════════════"
}
# ── 执行 ──────────────────────────────────────
case "$ACTION" in
install) install ;;
@ -477,8 +639,10 @@ case "$ACTION" in
add-user) add_user "$@" ;;
remove-user) remove_user "$@" ;;
list-users) list_users ;;
deploy-v3) deploy_v3 ;;
switch-v3) switch_v3 ;;
*)
echo "用法: bash deploy-brain-proxy.sh {install|update|status|restart|add-user|remove-user|list-users}"
echo "用法: bash deploy-brain-proxy.sh {install|update|status|restart|add-user|remove-user|list-users|deploy-v3|switch-v3}"
exit 1
;;
esac