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:
parent
5a42b0a5e3
commit
7d33e49101
|
|
@ -28,6 +28,8 @@ on:
|
||||||
- remove-user
|
- remove-user
|
||||||
- list-users
|
- list-users
|
||||||
- send-subscription
|
- send-subscription
|
||||||
|
- deploy-v3
|
||||||
|
- switch-v3
|
||||||
default: 'status'
|
default: 'status'
|
||||||
email:
|
email:
|
||||||
description: '用户邮箱 (add-user/remove-user/send-subscription时需要)'
|
description: '用户邮箱 (add-user/remove-user/send-subscription时需要)'
|
||||||
|
|
@ -55,7 +57,9 @@ jobs:
|
||||||
github.event.inputs.action == 'install' ||
|
github.event.inputs.action == 'install' ||
|
||||||
github.event.inputs.action == 'update' ||
|
github.event.inputs.action == 'update' ||
|
||||||
github.event.inputs.action == 'status' ||
|
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:
|
steps:
|
||||||
- name: '📥 检出代码'
|
- name: '📥 检出代码'
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
# 📜 Copyright: 国作登字-2026-A-00037559
|
# 📜 Copyright: 国作登字-2026-A-00037559
|
||||||
# ═══════════════════════════════════════════════
|
# ═══════════════════════════════════════════════
|
||||||
# server/proxy/deploy-brain-proxy.sh
|
# server/proxy/deploy-brain-proxy.sh
|
||||||
# 🚀 铸渊专线V2 · 大脑服务器部署脚本
|
# 🚀 铸渊专线V2 + 光湖语言世界V3 · 大脑服务器部署脚本
|
||||||
#
|
#
|
||||||
# 在大脑服务器(ZY-SVR-005)上执行
|
# 在大脑服务器(ZY-SVR-005)上执行
|
||||||
# 部署多用户VPN系统 (独立于面孔服务器的V1)
|
# 部署多用户VPN系统 (独立于面孔服务器的V1)
|
||||||
|
|
@ -17,6 +17,8 @@
|
||||||
# bash deploy-brain-proxy.sh add-user <email> [quota_gb] — 添加用户
|
# bash deploy-brain-proxy.sh add-user <email> [quota_gb] — 添加用户
|
||||||
# bash deploy-brain-proxy.sh remove-user <email> — 移除用户
|
# bash deploy-brain-proxy.sh remove-user <email> — 移除用户
|
||||||
# bash deploy-brain-proxy.sh list-users — 列出用户
|
# 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
|
set -uo pipefail
|
||||||
|
|
@ -196,8 +198,16 @@ deploy_services() {
|
||||||
cp "$REPO_PROXY_DIR"/service/vpn-worker.js "$PROXY_DIR/service/"
|
cp "$REPO_PROXY_DIR"/service/vpn-worker.js "$PROXY_DIR/service/"
|
||||||
cp "$REPO_PROXY_DIR"/ecosystem.brain-proxy.config.js "$PROXY_DIR/"
|
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配置参考
|
# 复制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-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
|
cp "$REPO_PROXY_DIR"/service/send-subscription.js "$PROXY_DIR/service/" 2>/dev/null || true
|
||||||
|
|
@ -377,6 +387,15 @@ health_check() {
|
||||||
echo " ❌ V2订阅服务: 端口3803无响应"
|
echo " ❌ V2订阅服务: 端口3803无响应"
|
||||||
fi
|
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反向代理
|
# Nginx反向代理
|
||||||
if systemctl is-active --quiet nginx 2>/dev/null; then
|
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
|
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
|
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
|
case "$ACTION" in
|
||||||
install) install ;;
|
install) install ;;
|
||||||
|
|
@ -477,8 +639,10 @@ case "$ACTION" in
|
||||||
add-user) add_user "$@" ;;
|
add-user) add_user "$@" ;;
|
||||||
remove-user) remove_user "$@" ;;
|
remove-user) remove_user "$@" ;;
|
||||||
list-users) list_users ;;
|
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
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue