🔧 邮件SMTP凭据注入+部署脚本补全∞版本服务文件
- 邮件错误提示优化: 隐藏内部SMTP配置细节,显示友好的"邮件服务维护中" - 部署脚本: 新增inject_smtp_credentials函数,deploy-v3/deploy-infinity自动注入SMTP到.env.keys - 部署脚本: 补全∞版本服务文件部署(email-hub.js/bandwidth-pool-agent.js/user-guardian-agent.js/auto-evolution.js) - 部署workflow: 传递ZY_SMTP_USER/ZY_SMTP_PASS到大脑服务器部署步骤 Agent-Logs-Url: https://github.com/qinfendebingshuo/guanghulab/sessions/a6f72ab2-7227-4382-920c-0e1aa91dba2e Co-authored-by: qinfendebingshuo <207279273+qinfendebingshuo@users.noreply.github.com>
This commit is contained in:
parent
7ce2b51090
commit
ffd9b8c803
|
|
@ -109,6 +109,8 @@ jobs:
|
|||
ZY_SVR_SV_REALITY_PUBLIC_KEY: ${{ secrets.ZY_SVR_SV_REALITY_PUBLIC_KEY }}
|
||||
ZY_SVR_SV_REALITY_SHORT_ID: ${{ secrets.ZY_SVR_SV_REALITY_SHORT_ID }}
|
||||
ZY_SVR_SV_PORT: ${{ secrets.ZY_SVR_SV_PORT }}
|
||||
ZY_SMTP_USER: ${{ secrets.ZY_SMTP_USER }}
|
||||
ZY_SMTP_PASS: ${{ secrets.ZY_SMTP_PASS }}
|
||||
run: |
|
||||
ACTION="${{ github.event.inputs.action }}"
|
||||
ssh -i ~/.ssh/id_brain \
|
||||
|
|
@ -118,6 +120,8 @@ jobs:
|
|||
export ZY_SVR_SV_REALITY_PUBLIC_KEY=${ZY_SVR_SV_REALITY_PUBLIC_KEY:-} && \
|
||||
export ZY_SVR_SV_REALITY_SHORT_ID=${ZY_SVR_SV_REALITY_SHORT_ID:-} && \
|
||||
export ZY_SVR_SV_PORT=${ZY_SVR_SV_PORT:-443} && \
|
||||
export ZY_SMTP_USER='${ZY_SMTP_USER:-}' && \
|
||||
export ZY_SMTP_PASS='${ZY_SMTP_PASS:-}' && \
|
||||
cd /opt/zhuyuan-brain/proxy-deploy && \
|
||||
bash deploy-brain-proxy.sh ${ACTION}"
|
||||
|
||||
|
|
|
|||
|
|
@ -186,6 +186,14 @@ EOF
|
|||
echo "ZY_SVR_SV_PORT=${ZY_SVR_SV_PORT:-443}" >> "$KEYS_FILE"
|
||||
fi
|
||||
|
||||
# 保存SMTP邮件凭据 (带宽共享验证码·邮件通知)
|
||||
if [ -n "${ZY_SMTP_USER:-}" ] && [ -n "${ZY_SMTP_PASS:-}" ]; then
|
||||
echo "" >> "$KEYS_FILE"
|
||||
echo "# SMTP邮件凭据 (带宽共享验证码·邮件通知)" >> "$KEYS_FILE"
|
||||
echo "ZY_SMTP_USER=${ZY_SMTP_USER}" >> "$KEYS_FILE"
|
||||
echo "ZY_SMTP_PASS=${ZY_SMTP_PASS}" >> "$KEYS_FILE"
|
||||
fi
|
||||
|
||||
chmod 600 "$KEYS_FILE"
|
||||
|
||||
echo ""
|
||||
|
|
@ -198,6 +206,33 @@ EOF
|
|||
echo " ═══════════════════════════════════"
|
||||
}
|
||||
|
||||
# ── 注入SMTP邮件凭据到.env.keys ──────────────
|
||||
# 如果环境变量中有SMTP凭据且.env.keys中没有,自动追加
|
||||
inject_smtp_credentials() {
|
||||
local KEYS_FILE="$PROXY_DIR/.env.keys"
|
||||
if [ ! -f "$KEYS_FILE" ]; then
|
||||
echo " ⚠️ .env.keys不存在,跳过SMTP注入"
|
||||
return
|
||||
fi
|
||||
if [ -z "${ZY_SMTP_USER:-}" ] || [ -z "${ZY_SMTP_PASS:-}" ]; then
|
||||
echo " ℹ️ ZY_SMTP_USER/ZY_SMTP_PASS未提供,跳过SMTP注入"
|
||||
return
|
||||
fi
|
||||
# 如果.env.keys已有SMTP配置,更新之
|
||||
if grep -q "ZY_SMTP_USER" "$KEYS_FILE" 2>/dev/null; then
|
||||
# 移除旧的SMTP行并重新追加
|
||||
sed -i '/^ZY_SMTP_USER=/d' "$KEYS_FILE"
|
||||
sed -i '/^ZY_SMTP_PASS=/d' "$KEYS_FILE"
|
||||
sed -i '/^# SMTP邮件凭据/d' "$KEYS_FILE"
|
||||
fi
|
||||
echo "" >> "$KEYS_FILE"
|
||||
echo "# SMTP邮件凭据 (带宽共享验证码·邮件通知)" >> "$KEYS_FILE"
|
||||
echo "ZY_SMTP_USER=${ZY_SMTP_USER}" >> "$KEYS_FILE"
|
||||
echo "ZY_SMTP_PASS=${ZY_SMTP_PASS}" >> "$KEYS_FILE"
|
||||
chmod 600 "$KEYS_FILE"
|
||||
echo " ✅ SMTP凭据已注入到 .env.keys"
|
||||
}
|
||||
|
||||
# ── 部署V2服务代码 ────────────────────────────
|
||||
deploy_services() {
|
||||
mkdir -p "$PROXY_DIR"/{service,data,logs,config}
|
||||
|
|
@ -217,6 +252,12 @@ deploy_services() {
|
|||
cp "$REPO_PROXY_DIR"/service/proxy-guardian.js "$PROXY_DIR/service/"
|
||||
cp "$REPO_PROXY_DIR"/ecosystem.brain-proxy-v3.config.js "$PROXY_DIR/"
|
||||
|
||||
# 复制∞版本服务文件 (邮件·带宽共享·守护·自动进化)
|
||||
cp "$REPO_PROXY_DIR"/service/email-hub.js "$PROXY_DIR/service/" 2>/dev/null || true
|
||||
cp "$REPO_PROXY_DIR"/service/bandwidth-pool-agent.js "$PROXY_DIR/service/" 2>/dev/null || true
|
||||
cp "$REPO_PROXY_DIR"/service/user-guardian-agent.js "$PROXY_DIR/service/" 2>/dev/null || true
|
||||
cp "$REPO_PROXY_DIR"/service/auto-evolution.js "$PROXY_DIR/service/" 2>/dev/null || true
|
||||
|
||||
# 复制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
|
||||
|
|
@ -595,6 +636,9 @@ deploy_v3() {
|
|||
echo "部署V3生产环境 (V2继续可用)..."
|
||||
deploy_services
|
||||
|
||||
# 注入SMTP凭据到.env.keys (如果环境变量中有且.env.keys中没有)
|
||||
inject_smtp_credentials
|
||||
|
||||
# 清理 sites-enabled/ 中残留的备份文件(防止 duplicate default_server)
|
||||
clean_stale_nginx_backups
|
||||
|
||||
|
|
@ -771,6 +815,9 @@ deploy_infinity() {
|
|||
echo "部署 ∞ 版本 (在V3基础上添加自主进化能力)..."
|
||||
deploy_services
|
||||
|
||||
# 注入SMTP凭据到.env.keys (如果环境变量中有且.env.keys中没有)
|
||||
inject_smtp_credentials
|
||||
|
||||
# 确保V3进程已在运行
|
||||
if ! pm2 list 2>/dev/null | grep -q "zy-proxy-v3-sub"; then
|
||||
echo " ⚠️ V3进程未运行,先部署V3..."
|
||||
|
|
|
|||
|
|
@ -2223,13 +2223,16 @@ async function submitCode(e) {
|
|||
} else {
|
||||
const errDetail = result.error || '未知原因';
|
||||
console.error('[bandwidth-send-code] 邮件发送失败:', errDetail);
|
||||
// 对用户隐藏内部配置细节,只显示友好提示
|
||||
const userMsg = errDetail.includes('SMTP') ? '邮件服务维护中' : errDetail;
|
||||
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
|
||||
res.end(JSON.stringify({ success: false, message: `📧 邮件发送失败(${errDetail}),请稍后重试或联系冰朔获取验证码` }));
|
||||
res.end(JSON.stringify({ success: false, message: `📧 ${userMsg},请稍后重试或联系冰朔获取验证码` }));
|
||||
}
|
||||
}).catch((err) => {
|
||||
console.error('[bandwidth-send-code] 邮件发送异常:', err.message || err);
|
||||
const userMsg = (err.message || '').includes('SMTP') ? '邮件服务维护中' : (err.message || '发送异常');
|
||||
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
|
||||
res.end(JSON.stringify({ success: false, message: `📧 邮件发送异常(${err.message}),请稍后重试或联系冰朔获取验证码` }));
|
||||
res.end(JSON.stringify({ success: false, message: `📧 ${userMsg},请稍后重试或联系冰朔获取验证码` }));
|
||||
});
|
||||
} catch {
|
||||
// Email module not available - code was still created
|
||||
|
|
|
|||
Loading…
Reference in New Issue