feat: V3桥接Nginx配置 + 合并用户管理到∞工作流 + 部署工作流ZY_BRAIN_HOST注入
Agent-Logs-Url: https://github.com/qinfendebingshuo/guanghulab/sessions/5deef078-5765-44a5-b9bf-03476c0fddce Co-authored-by: qinfendebingshuo <207279273+qinfendebingshuo@users.noreply.github.com>
This commit is contained in:
parent
eab7e2057e
commit
3b4c0a76af
|
|
@ -201,6 +201,14 @@ jobs:
|
||||||
# Nginx中 _ 是标准的catch-all server_name,不匹配任何实际域名
|
# Nginx中 _ 是标准的catch-all server_name,不匹配任何实际域名
|
||||||
sed -i "s/ZY_DOMAIN_PREVIEW_PLACEHOLDER/_/g" /tmp/zhuyuan-sovereign.conf
|
sed -i "s/ZY_DOMAIN_PREVIEW_PLACEHOLDER/_/g" /tmp/zhuyuan-sovereign.conf
|
||||||
fi
|
fi
|
||||||
|
ZY_BRAIN_HOST="${{ secrets.ZY_BRAIN_HOST }}"
|
||||||
|
if [ -n "$ZY_BRAIN_HOST" ]; then
|
||||||
|
sed -i "s/ZY_BRAIN_HOST_PLACEHOLDER/$ZY_BRAIN_HOST/g" /tmp/zhuyuan-sovereign.conf
|
||||||
|
echo "✅ 大脑服务器已注入V3桥接: $ZY_BRAIN_HOST"
|
||||||
|
else
|
||||||
|
echo "⚠️ ZY_BRAIN_HOST 未配置,V3桥接不可用"
|
||||||
|
sed -i '/ZY_BRAIN_HOST_PLACEHOLDER/d' /tmp/zhuyuan-sovereign.conf
|
||||||
|
fi
|
||||||
scp -i ~/.ssh/zy_key \
|
scp -i ~/.ssh/zy_key \
|
||||||
/tmp/zhuyuan-sovereign.conf \
|
/tmp/zhuyuan-sovereign.conf \
|
||||||
${{ secrets.ZY_SERVER_USER }}@${{ secrets.ZY_SERVER_HOST }}:/opt/zhuyuan/config/nginx/zhuyuan-sovereign.conf
|
${{ secrets.ZY_SERVER_USER }}@${{ secrets.ZY_SERVER_HOST }}:/opt/zhuyuan/config/nginx/zhuyuan-sovereign.conf
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ on:
|
||||||
- 'server/proxy/service/bandwidth-pool-agent.js'
|
- 'server/proxy/service/bandwidth-pool-agent.js'
|
||||||
- 'server/proxy/service/swarm-defense-agent.js'
|
- 'server/proxy/service/swarm-defense-agent.js'
|
||||||
- 'server/proxy/service/user-guardian-agent.js'
|
- 'server/proxy/service/user-guardian-agent.js'
|
||||||
|
- 'server/proxy/service/subscription-server-v3.js'
|
||||||
- 'server/proxy/config/release-notes.json'
|
- 'server/proxy/config/release-notes.json'
|
||||||
- 'server/proxy/ecosystem.brain-proxy-v3.config.js'
|
- 'server/proxy/ecosystem.brain-proxy-v3.config.js'
|
||||||
schedule:
|
schedule:
|
||||||
|
|
@ -40,6 +41,10 @@ on:
|
||||||
- monthly-evolution
|
- monthly-evolution
|
||||||
- deploy-infinity
|
- deploy-infinity
|
||||||
- status
|
- status
|
||||||
|
- add-user
|
||||||
|
- remove-user
|
||||||
|
- list-users
|
||||||
|
- send-subscription-v3
|
||||||
- send-monthly-reset
|
- send-monthly-reset
|
||||||
- send-update-notify
|
- send-update-notify
|
||||||
- send-update-notify-single
|
- send-update-notify-single
|
||||||
|
|
@ -55,9 +60,14 @@ on:
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
email:
|
email:
|
||||||
description: '目标邮箱 (send-update-notify-single/send-bandwidth-auth-single时需要 · 可先用list-user-emails查看)'
|
description: '目标邮箱 (add-user/remove-user/send-subscription-v3/send-update-notify-single/send-bandwidth-auth-single时需要)'
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
|
quota_gb:
|
||||||
|
description: '月配额GB (add-user时可选,默认500)'
|
||||||
|
required: false
|
||||||
|
type: string
|
||||||
|
default: '500'
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
@ -89,6 +99,7 @@ jobs:
|
||||||
ACTION: ${{ github.event_name == 'push' && 'deploy-infinity' || github.event.inputs.action || 'monthly-evolution' }}
|
ACTION: ${{ github.event_name == 'push' && 'deploy-infinity' || github.event.inputs.action || 'monthly-evolution' }}
|
||||||
MESSAGE: ${{ github.event.inputs.message || '' }}
|
MESSAGE: ${{ github.event.inputs.message || '' }}
|
||||||
EMAIL: ${{ github.event.inputs.email || '' }}
|
EMAIL: ${{ github.event.inputs.email || '' }}
|
||||||
|
QUOTA: ${{ github.event.inputs.quota_gb || '500' }}
|
||||||
ZY_SMTP_USER: ${{ secrets.ZY_SMTP_USER }}
|
ZY_SMTP_USER: ${{ secrets.ZY_SMTP_USER }}
|
||||||
ZY_SMTP_PASS: ${{ secrets.ZY_SMTP_PASS }}
|
ZY_SMTP_PASS: ${{ secrets.ZY_SMTP_PASS }}
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -98,18 +109,20 @@ jobs:
|
||||||
REMOTE_HOST="${{ secrets.ZY_BRAIN_USER }}@${{ secrets.ZY_BRAIN_HOST }}"
|
REMOTE_HOST="${{ secrets.ZY_BRAIN_USER }}@${{ secrets.ZY_BRAIN_HOST }}"
|
||||||
|
|
||||||
# ── 同步邮件模块到服务器 ──
|
# ── 同步邮件模块到服务器 ──
|
||||||
# 确保服务器上的email-hub.js和release-notes.json是最新版本
|
# 确保服务器上的email-hub.js和相关模块是最新版本
|
||||||
sync_email_files() {
|
sync_email_files() {
|
||||||
echo "📦 同步邮件模块到服务器..."
|
echo "📦 同步邮件模块到服务器..."
|
||||||
$SSH_CMD "mkdir -p $PROXY_DIR/.deploy-tmp $PROXY_DIR/config"
|
$SSH_CMD "mkdir -p $PROXY_DIR/.deploy-tmp $PROXY_DIR/config"
|
||||||
$SCP_CMD \
|
$SCP_CMD \
|
||||||
server/proxy/service/email-hub.js \
|
server/proxy/service/email-hub.js \
|
||||||
server/proxy/service/bandwidth-pool-agent.js \
|
server/proxy/service/bandwidth-pool-agent.js \
|
||||||
|
server/proxy/service/subscription-server-v3.js \
|
||||||
server/proxy/config/release-notes.json \
|
server/proxy/config/release-notes.json \
|
||||||
${REMOTE_HOST}:$PROXY_DIR/.deploy-tmp/
|
${REMOTE_HOST}:$PROXY_DIR/.deploy-tmp/
|
||||||
$SSH_CMD "
|
$SSH_CMD "
|
||||||
cp $PROXY_DIR/.deploy-tmp/email-hub.js $PROXY_DIR/service/
|
cp $PROXY_DIR/.deploy-tmp/email-hub.js $PROXY_DIR/service/
|
||||||
cp $PROXY_DIR/.deploy-tmp/bandwidth-pool-agent.js $PROXY_DIR/service/
|
cp $PROXY_DIR/.deploy-tmp/bandwidth-pool-agent.js $PROXY_DIR/service/
|
||||||
|
cp $PROXY_DIR/.deploy-tmp/subscription-server-v3.js $PROXY_DIR/service/
|
||||||
cp $PROXY_DIR/.deploy-tmp/release-notes.json $PROXY_DIR/config/
|
cp $PROXY_DIR/.deploy-tmp/release-notes.json $PROXY_DIR/config/
|
||||||
rm -rf $PROXY_DIR/.deploy-tmp
|
rm -rf $PROXY_DIR/.deploy-tmp
|
||||||
"
|
"
|
||||||
|
|
@ -133,6 +146,7 @@ jobs:
|
||||||
server/proxy/service/bandwidth-pool-agent.js \
|
server/proxy/service/bandwidth-pool-agent.js \
|
||||||
server/proxy/service/swarm-defense-agent.js \
|
server/proxy/service/swarm-defense-agent.js \
|
||||||
server/proxy/service/user-guardian-agent.js \
|
server/proxy/service/user-guardian-agent.js \
|
||||||
|
server/proxy/service/subscription-server-v3.js \
|
||||||
server/proxy/config/release-notes.json \
|
server/proxy/config/release-notes.json \
|
||||||
server/proxy/ecosystem.brain-proxy-v3.config.js \
|
server/proxy/ecosystem.brain-proxy-v3.config.js \
|
||||||
${{ secrets.ZY_BRAIN_USER }}@${{ secrets.ZY_BRAIN_HOST }}:$PROXY_DIR/.deploy-tmp/
|
${{ secrets.ZY_BRAIN_USER }}@${{ secrets.ZY_BRAIN_HOST }}:$PROXY_DIR/.deploy-tmp/
|
||||||
|
|
@ -144,6 +158,7 @@ jobs:
|
||||||
cp $PROXY_DIR/.deploy-tmp/bandwidth-pool-agent.js $PROXY_DIR/service/
|
cp $PROXY_DIR/.deploy-tmp/bandwidth-pool-agent.js $PROXY_DIR/service/
|
||||||
cp $PROXY_DIR/.deploy-tmp/swarm-defense-agent.js $PROXY_DIR/service/
|
cp $PROXY_DIR/.deploy-tmp/swarm-defense-agent.js $PROXY_DIR/service/
|
||||||
cp $PROXY_DIR/.deploy-tmp/user-guardian-agent.js $PROXY_DIR/service/
|
cp $PROXY_DIR/.deploy-tmp/user-guardian-agent.js $PROXY_DIR/service/
|
||||||
|
cp $PROXY_DIR/.deploy-tmp/subscription-server-v3.js $PROXY_DIR/service/
|
||||||
mkdir -p $PROXY_DIR/config
|
mkdir -p $PROXY_DIR/config
|
||||||
cp $PROXY_DIR/.deploy-tmp/release-notes.json $PROXY_DIR/config/
|
cp $PROXY_DIR/.deploy-tmp/release-notes.json $PROXY_DIR/config/
|
||||||
cp $PROXY_DIR/.deploy-tmp/ecosystem.brain-proxy-v3.config.js $PROXY_DIR/
|
cp $PROXY_DIR/.deploy-tmp/ecosystem.brain-proxy-v3.config.js $PROXY_DIR/
|
||||||
|
|
@ -185,6 +200,71 @@ jobs:
|
||||||
"
|
"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
add-user)
|
||||||
|
if [ -z "$EMAIL" ]; then
|
||||||
|
echo "❌ 请提供目标邮箱 (email字段)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! echo "$EMAIL" | grep -qE '^[^@]+@[^@]+\.[^@]+$'; then
|
||||||
|
echo "❌ 邮箱格式不正确: $EMAIL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "➕ 新增用户: $EMAIL (配额: ${QUOTA}GB/月)"
|
||||||
|
$SSH_CMD "
|
||||||
|
cd $PROXY_DIR
|
||||||
|
node service/user-manager.js add '$EMAIL' '${QUOTA}'
|
||||||
|
"
|
||||||
|
echo ""
|
||||||
|
echo "════════════════════════════════════════"
|
||||||
|
echo "✅ 用户已添加"
|
||||||
|
echo "下一步: 运行 send-subscription-v3 发送V3订阅链接到 $EMAIL"
|
||||||
|
echo "════════════════════════════════════════"
|
||||||
|
;;
|
||||||
|
|
||||||
|
remove-user)
|
||||||
|
if [ -z "$EMAIL" ]; then
|
||||||
|
echo "❌ 请提供目标邮箱 (email字段)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! echo "$EMAIL" | grep -qE '^[^@]+@[^@]+\.[^@]+$'; then
|
||||||
|
echo "❌ 邮箱格式不正确: $EMAIL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "➖ 移除用户: $EMAIL"
|
||||||
|
$SSH_CMD "
|
||||||
|
cd $PROXY_DIR
|
||||||
|
node service/user-manager.js remove '$EMAIL'
|
||||||
|
"
|
||||||
|
;;
|
||||||
|
|
||||||
|
list-users)
|
||||||
|
echo "📋 用户列表:"
|
||||||
|
$SSH_CMD "
|
||||||
|
cd $PROXY_DIR
|
||||||
|
node service/user-manager.js list
|
||||||
|
"
|
||||||
|
;;
|
||||||
|
|
||||||
|
send-subscription-v3)
|
||||||
|
if [ -z "$EMAIL" ]; then
|
||||||
|
echo "❌ 请提供目标邮箱 (email字段)"
|
||||||
|
echo "💡 可先使用 list-users 或 list-user-emails 查看用户"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! echo "$EMAIL" | grep -qE '^[^@]+@[^@]+\.[^@]+$'; then
|
||||||
|
echo "❌ 邮箱格式不正确: $EMAIL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sync_email_files
|
||||||
|
echo "发送V3订阅链接 (含系统介绍+带宽共享邀请) 给: $EMAIL ..."
|
||||||
|
$SSH_CMD "
|
||||||
|
cd $PROXY_DIR
|
||||||
|
export ZY_SMTP_USER='$ZY_SMTP_USER'
|
||||||
|
export ZY_SMTP_PASS='$ZY_SMTP_PASS'
|
||||||
|
node service/email-hub.js send-subscription-v3 '$EMAIL'
|
||||||
|
"
|
||||||
|
;;
|
||||||
|
|
||||||
send-monthly-reset)
|
send-monthly-reset)
|
||||||
sync_email_files
|
sync_email_files
|
||||||
echo "发送月初重置邮件..."
|
echo "发送月初重置邮件..."
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,12 @@ jobs:
|
||||||
else
|
else
|
||||||
sed -i "s/ZY_DOMAIN_PREVIEW_PLACEHOLDER/_/g" /tmp/zhuyuan-sovereign.conf
|
sed -i "s/ZY_DOMAIN_PREVIEW_PLACEHOLDER/_/g" /tmp/zhuyuan-sovereign.conf
|
||||||
fi
|
fi
|
||||||
|
ZY_BRAIN_HOST="${{ secrets.ZY_BRAIN_HOST }}"
|
||||||
|
if [ -n "$ZY_BRAIN_HOST" ]; then
|
||||||
|
sed -i "s/ZY_BRAIN_HOST_PLACEHOLDER/$ZY_BRAIN_HOST/g" /tmp/zhuyuan-sovereign.conf
|
||||||
|
else
|
||||||
|
sed -i '/ZY_BRAIN_HOST_PLACEHOLDER/d' /tmp/zhuyuan-sovereign.conf
|
||||||
|
fi
|
||||||
scp -i $KEY /tmp/zhuyuan-sovereign.conf \
|
scp -i $KEY /tmp/zhuyuan-sovereign.conf \
|
||||||
$USER@$HOST:/opt/zhuyuan/config/nginx/zhuyuan-sovereign.conf 2>&1 || true
|
$USER@$HOST:/opt/zhuyuan/config/nginx/zhuyuan-sovereign.conf 2>&1 || true
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,25 @@ server {
|
||||||
try_files $uri $uri/ /index.html;
|
try_files $uri $uri/ /index.html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ─── 光湖语言世界V3 · 带宽授权桥接 (大脑服务器反向代理) ───
|
||||||
|
# QQ邮箱拦截大脑服务器域名链接,此桥接通过guanghulab.online域名
|
||||||
|
# 将V3授权/订阅请求透传到大脑服务器的V3订阅服务 (端口3805)
|
||||||
|
# 部署时由 workflow 自动将 ZY_BRAIN_HOST_PLACEHOLDER 替换为实际IP
|
||||||
|
location /api/proxy-v3/ {
|
||||||
|
proxy_pass http://ZY_BRAIN_HOST_PLACEHOLDER/api/proxy-v3/;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
# ─── 铸渊 API 反向代理 (端口 3801 · 预览端口) ───
|
# ─── 铸渊 API 反向代理 (端口 3801 · 预览端口) ───
|
||||||
location /api/ {
|
location /api/ {
|
||||||
proxy_pass http://127.0.0.1:3801;
|
proxy_pass http://127.0.0.1:3801;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue