2026-07-06 · 阅读版 · 执行真相源 docs/superpowers/plans/2026-07-06-control-plane-tls-tunnel.md(带 checkbox)
http://103.119.13.48:8080 迁到
https://api.yanmeiai.com,经 Cloudflare Tunnel 前置(隐藏源站 IP、白嫖标准 443 + 免证书)。
数据面 sing-box REALITY :443 全程不动。
pangolin1 上跑 cloudflared 出站隧道(不监听任何入站端口 → 与 sing-box 独占的
:443 零冲突),CF 边缘把 api.yanmeiai.com 的请求经隧道回送到
127.0.0.1:8080。客户端(Flutter 四端共享 kApiBaseUrl)默认改 https 域名;
控制面下发给客户端 sing-box 的 .srs 规则集下载基址(PANGOLIN_PUBLIC_URL)
同步改 https。最后一步把 :8080 收回 loopback 并关防火墙,彻底退役明文口——该步有
上线顺序闸(须待现网客户端更新后再做)。
| 用途 | 对外 | 源站/绑定 | 本轮变更 |
|---|---|---|---|
| 控制面 HTTP API | https://api.yanmeiai.com(CF Tunnel) | 127.0.0.1:8080 | 新增 CF Tunnel 前置 + 收 loopback |
| 数据面 sing-box REALITY | :443(节点公网 IP) | 同端口 | 不动 |
| gRPC agent(mTLS) | —(仅节点内) | :9443 | 不动 |
$() 命令替换、禁 set -a/set +a;需捕获输出拆多步或用管道。~/.env/明文配置/git。Cloudflare 用 cf-api 封装(token 内部从 Bitwarden 取)。隧道 token 等密钥一律不入 git,只落 /etc/pangolin/*(已 gitignore)+ Bitwarden。103.119.13.48,ssh 别名 pangolin1。数据面 sing-box REALITY 独占入站 :443,不得触碰;gRPC agent mTLS :9443 不动。http://103.119.13.48:8080。隧道与 https 端点必须加法上线(与旧口并存),客户端切 https 发版后,收 loopback 才能做,否则旧客户端全挂。api.yanmeiai.com → http://localhost:8080)+ 代理 CNAME;pangolin1 装 cloudflared(Debian apt 源)+ committed systemd unit(token 经 EnvironmentFile 注入,不入 unit 本体)。验证:https://api.yanmeiai.com/healthz 与旧的 http://103.119.13.48:8080/healthz 并存可用(加法,不破坏现网)。
kApiBaseUrl 必须 https:// 且不含节点 IP)→ 确认失败 → 把 kApiBaseUrl 默认值改为 https://api.yanmeiai.com(仍保留 String.fromEnvironment 可本地覆盖)→ 测试转绿。同步移除 Android manifest 的 android:usesCleartextTraffic="true"(控制面已 https,不再需要明文豁免;iOS/macOS 无 ATS 配置,无需改动)。跑 flutter analyze + 全量单测。
usesCleartextTraffic="true" 就 CI 失败(防止将来有人把明文开关加回来,退回到 #25 之前的不安全态)。接入 ci.yml 新 job + shellcheck 列表。
PANGOLIN_PUBLIC_URL 切 https.srs 分流规则集下载基址(clientconfig.go)。不改的话新客户端仍去明文 IP 拉。改为 https://api.yanmeiai.com;与 Task 1 隧道并存,对新旧客户端都安全(URL 由服务端下发,客户端只是照着 GET)。pangolin1 上应用 + 重启 server,验证规则集经隧道可 200 下载。
http://103.119.13.48:8080,只有当现网客户端都已更新到 Task 2 的 https 版本后才能执行,执行前需与用户确认「旧客户端可弃」。内容:ADDR 收 127.0.0.1:8080;不再 ufw 放行 8080;deploy-server.sh 健康检查从「runner 远程 curl 公网 IP」改为「ssh 内本地 curl loopback」+「经隧道 curl https 域名」双路验证。验证:明文口不可达、隧道仍活、ss 显示 8080 仅监听 127.0.0.1。
docs/index.html「实现计划」分类;顺带修正 deploy/single-node/deploy.sh 摘要 echo 里残留的旧明文口描述(Task 4/5 落地后的措辞漂移)。
Task 1(隧道加法)→ Task 4(PANGOLIN_PUBLIC_URL,新旧客户端皆安全)→ Task 2(客户端切 https,发版)→
待客户端更新 → Task 5(收口)。Task 3(CI 守护)、Task 6(文档)无顺序耦合,可随时并行推进。