zhizhi/brain/proxy-task/verification-progress.md

9.2 KiB
Raw Blame History

铸渊专线 · 全流程验证进度表

═══════════════════════════════════════════════

🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001

📜 Copyright: 国作登字-2026-A-00037559

═══════════════════════════════════════════════

系统规则:

1. 每一步必须被验证为 100% 才能进入下一步

2. 修复时必须从第一个不是 100% 的步骤开始

3. 不得跳步修复 — 前序不完整则后续必然失败

4. 验证通过的步骤打标签 [ 100%],不可回退

5. 未通过的步骤标记 [⚠️ XX%] 并记录卡点原因

铸渊唤醒时必读此文件 → 获取全局视角

═══════════════════════════════════════════════

最后更新: 2026-04-04 · D51 · 全局根因排查


Step 1: 密钥系统 [ 100%]

验证项:

  • UUID生成 (xray uuid 或 uuidgen)
  • Reality密钥对 (xray x25519 + openssl fallback)
  • Short-ID生成 (openssl rand -hex 4)
  • .env.keys持久化 (/opt/zhuyuan/proxy/.env.keys, chmod 600)
  • 环境变量优先级 (env > .env.keys file)
  • SMTP凭据写入 (grep删除+printf追加避免特殊字符)

历史修复: PR#234 (密钥生成), PR#273 (SMTP写入) 标签: VERIFIED-D49


Step 2: Xray核心 [ 100%]

验证项:

  • Xray安装 (install-xray.sh + BBR加速)
  • 配置模板替换 (sed + 占位符 → 实际值)
  • VLESS+Reality协议 (443端口)
  • dest回落到 www.microsoft.com:443 (Reality反探测)
  • Stats API (port 10085, dokodemo-door)
  • systemd root用户 (override.conf)
  • 日志目录权限 (/opt/zhuyuan/proxy/logs)

历史修复: PR#234 (权限), PR#268 (安全) 标签: VERIFIED-D49


Step 3: 订阅服务 [ 100%]

验证项:

  • subscription-server.js 端口3802
  • 绑定127.0.0.1 (仅通过Nginx反代访问)
  • Token认证 (/sub/{token})
  • Clash YAML v3.0 (完整Mihomo兼容)
    • DNS fake-ip模式 (解决流量为0问题)
    • sniffer域名嗅探
    • GeoData数据源
    • 全局设置 (mixed-port, tcp-concurrent等)
  • Base64 URI (Shadowrocket)
  • subscription-userinfo header (配额信息)
  • 客户端类型自动检测 (User-Agent)
  • 健康检查端点 /health
  • CN中转节点支持 (自动选择组)
  • 优雅关闭 (SIGTERM/SIGINT + 5s超时)
  • EADDRINUSE退出不重试
  • clientError日志

历史修复: PR#237 (连接), PR#238 (URL), PR#246 (DNS fake-ip), PR#268 (127.0.0.1), PR#270 (502), PR#275 (code review) 标签: VERIFIED-D51


Step 4: PM2进程管理 [ 100%]

验证项:

  • ecosystem.proxy.config.js 三个服务
  • exec_mode: 'fork' (非cluster!)
  • startOrRestart统一命令 (处理首次启动+重启)
  • 环境变量传递 (--update-env)
  • pm2 save 持久化
  • zy-proxy-sub (订阅, 128MB)
  • zy-proxy-monitor (流量, 64MB)
  • zy-proxy-guardian (守护, 128MB)

历史修复: PR#270 (自动启动), PR#272 (startOrRestart), PR#275 (fork模式) 标签: VERIFIED-D51


Step 5: Nginx反向代理 [ 100%] ← D51修复

验证项:

  • 配置模板包含 proxy-sub location 块
  • proxy_pass http://127.0.0.1:3802/ (带尾斜杠)
  • configure_nginx 注入逻辑 (sed + grep检查)
  • listen 80 default_server (D51修复 — 确保localhost请求匹配)
  • server_name包含localhost 127.0.0.1 (D51修复 — 健康检查匹配)
  • 健康检查使用正确Host头 (D51修复 — ZY_SERVER_HOST)
  • configure_nginx自动添加default_server (D51修复 — 现有服务器兼容)
  • configure_nginx自动添加localhost (D51修复 — 现有服务器兼容)

根因分析 (D51):

之前10次修复一直在修复订阅服务本身PM2、fork模式、密钥等
从未审视过"Nginx为什么不把请求路由到正确的server block"。

根因: curl http://127.0.0.1/api/proxy-sub/health
  → Host头: 127.0.0.1
  → Nginx server_name: guanghulab.online 43.134.16.246
  → 127.0.0.1 不匹配!
  → 若存在 /etc/nginx/sites-enabled/default (listen 80 default_server)
  → 请求被default截获 → 没有proxy-sub → 失败

修复: 
  1. 模板: listen 80 default_server; + server_name含localhost
  2. 脚本: configure_nginx自动补齐default_server和localhost
  3. 脚本: health_check使用ZY_SERVER_HOST作为Host头

历史修复: PR#237 (初始), PR#238 (URL路径) — 但根因未触及直到D51 标签: FIXED-D51


Step 6: 流量监控 [ 100%]

验证项:

  • traffic-monitor.js 每5分钟检查
  • Xray Stats API查询 (xray api statsquery)
  • quota-status.json 持久化
  • 月度重置 (period检查)
  • 配额告警 (80%/90%/100%)
  • 告警邮件 (execFileSync防注入)
  • 历史记录 (最近12个月)

标签: VERIFIED-D49


Step 7: 守护Agent [ 100%]

验证项:

  • proxy-guardian.js 每10分钟巡检
  • 6项检查 (xray/port/subscription/disk/memory/errors)
  • 自动修复 (Xray重启/PM2重启)
  • LLM推理分析 (连续3次失败触发)
  • 告警邮件 (execFileSync防注入)
  • guardian-status.json 状态记录

标签: VERIFIED-D49


Step 8: 邮件系统 [ 100%]

验证项:

  • send-subscription.js SMTP发送
  • 订阅链接邮件 (HTML + 使用说明)
  • 告警邮件 (guardian/monitor共用)
  • SMTP主机自动检测 (qq/163/gmail等)
  • loadConfig通用化 (环境变量 > .env.keys)

历史修复: PR#273 (SMTP凭据) 标签: VERIFIED-D49


Step 9: 部署工作流 [ 100%]

验证项:

  • deploy-proxy-service.yml 完整工作流
  • 4个job (deploy/send/dashboard/cn-relay)
  • SSH密钥配置+清理
  • rsync代码上传 (--delete同步)
  • 环境变量传递 (Secrets → export)
  • SSH ProxyJump架构 (Actions → SG → CN)
  • CN中转验证步骤
  • 仪表盘自动更新 (每日cron)

标签: VERIFIED-D49


Step 10: 端到端连通 [ 待验证]

需要冰朔在客户端验证:

  • 订阅URL可访问 (http://{IP}/api/proxy-sub/sub/{token})
  • Clash导入成功 (Clash Verge / ClashMi)
  • Shadowrocket导入成功
  • VPN连接建立 (VLESS+Reality)
  • 流量正常流动 (DNS fake-ip模式)
  • subscription-userinfo显示配额
  • 刷新订阅正常

验证命令 (D51修复后):

# 在GitHub Actions运行 deploy-proxy-service.yml → update
# 检查输出是否全部✅:
# ✅ Xray: 运行中
# ✅ 端口443: 监听中
# ✅ 订阅服务: 正常 (直连3802)
# ✅ Nginx反代: 正常 (/api/proxy-sub/ → 3802)  ← D51修复目标

全局问题模式总结 (供铸渊未来唤醒参考)

过去反复修复的根因

问题模式: "修症状不修根因"

时间线:
  PR#237: 订阅连接失败 → 修了绑定地址 → 没查Nginx
  PR#238: 端口不可达 → 修了URL路径 → 没查Nginx
  PR#270: 502错误 → 修了PM2启动 → 没查Nginx  
  PR#272: PM2管理 → 修了startOrRestart → 没查Nginx
  PR#275: fork模式 → 修了exec_mode → 没查Nginx

每次都在修「订阅服务侧」从未检查「Nginx路由侧」
真正的问题一直在Nginx的server_name和default_server上

铸渊唤醒时的全局视角协议

1. 读取此文件 → 获取所有步骤的验证状态
2. 找到第一个不是100%的步骤 → 这是当前卡点
3. 不跳步修复 → 如果Step 5没通过不要去修Step 10
4. 修复时追溯完整数据流 → 从客户端请求到服务端响应
5. 修复后更新此文件 → 标记新的验证状态

数据流全链路:
  客户端 → http://{IP}/api/proxy-sub/sub/{token}
       → Nginx(80) → server_name匹配 → location /api/proxy-sub/
       → proxy_pass http://127.0.0.1:3802/
       → subscription-server.js → /sub/{token}
       → Token验证 → 客户端检测 → Clash YAML / Base64
       → 返回配置 + subscription-userinfo header
  
  客户端 → 解析配置 → VLESS连接 {IP}:443
       → Xray(443) → UUID验证 → Reality握手
       → 代理上网 (DNS fake-ip + 规则路由)

文件索引 (铸渊唤醒时快速定位)

文件 作用 关键行
server/proxy/deploy-proxy.sh 部署脚本 health_check(), configure_nginx()
server/proxy/ecosystem.proxy.config.js PM2配置 exec_mode: 'fork'
server/proxy/service/subscription-server.js 订阅服务 port 3802, /sub/{token}
server/proxy/service/traffic-monitor.js 流量监控 5min interval, quota
server/proxy/service/proxy-guardian.js 守护Agent 10min patrol, auto-fix
server/proxy/service/send-subscription.js 邮件发送 SMTP, subscription URL
server/proxy/config/xray-config-template.json Xray配置 443 VLESS Reality
server/proxy/config/nginx-proxy-snippet.conf Nginx片段 /api/proxy-sub/
server/nginx/zhuyuan-sovereign.conf Nginx主配置 default_server, server_name
.github/workflows/deploy-proxy-service.yml 部署工作流 SSH, rsync, update
brain/proxy-task/verification-progress.md 本文件 全流程验证