diff --git a/docs/ci-runner-domain-registration-plan.html b/docs/ci-runner-domain-registration-plan.html new file mode 100644 index 0000000..ef696c8 --- /dev/null +++ b/docs/ci-runner-domain-registration-plan.html @@ -0,0 +1,240 @@ + + +
+ + +gitea Actions self-hosted runner · 注册地址统一 https://git.51yanmei.com · 复用 pangolin 私有分流(private-split)达成家/外无感 · 2026-09-07
act_runner 现在能直接连域名,relay 淘汰。runner 一律注册到域名 https://git.51yanmei.com;git.51yanmei.com 早已在 pangolin 的 PANGOLIN_PRIVATE_SPLIT_DOMAINS 里,靠 dns-system(底层物理网络 DNS)解析 —— 在家局域网 DNS 覆盖成 192.168.3.200 → 命中「LAN 直连」规则直达 NAS;在外公网 DNS 返回 ali 锚点 182.92.213.171 → 命中「私有域名走隧道」→ 经 pangolin1 出口 → ali frp → NAS。同一个域名、同一份配置,家/外自动切换。
+com.pangolin.pangolin.PacketTunnel 系统扩展 + pangolin_vpn.app 在跑;无 Shadowrocket。GET https://git.51yanmei.com/ 与 /api/v1/version 均 HTTP 200(解析 182.92.213.171,~1.8s,走隧道→pangolin1→ali→frp→NAS)。relay 已不再必要。/etc/pangolin/server.env 第 31 行 PANGOLIN_PRIVATE_SPLIT_DOMAINS=nas,git,win,brain.51yanmei.com。零改动/etc/nginx/conf.d/git.conf = git.51yanmei.com 443(LE 证书) → proxy_pass 127.0.0.1:3000(frp→NAS),无 IP 白名单(不像 brain 限 103.119.13.48),任意来源可达。git.51yanmei.com 都得 182.92.213.171;群晖 DNS Server 套件未安装(/var/packages/DNSServer 不存在)。baize domains.yaml 里 nas/win/git 的「家内覆盖 192.168.3.200 待做」正是此项。0.0.0.0:443,但需 sudo 才能确认是否有 git.51yanmei.com→gitea:3000 的反代 + 有效证书。局域网直达 https://git.51yanmei.com(=192.168.3.200:443)必须它成立。nas)、注册到直连公网域名(Shadowrocket 时代坏);jiu 的 mac-runner(id=3)仓库级、经 relay。均待收口成一个用户级 mac runner 走域名。两条腿只有 DNS 解析结果不同驱动分叉:家内被 dns-system 解成私网 IP → 先命中 route 里更靠前的「LAN 直连」;在外解成公网锚点 → 落到「私有域名 → auto(隧道)」。runner 侧完全不感知,永远只认 https://git.51yanmei.com。
核心在 server/internal/httpapi/clientconfig.go,PANGOLIN_PRIVATE_SPLIT_DOMAINS 非空时注入三处,顺序即优先级:
| # | 位置 | 作用 |
|---|---|---|
| ① | DNS server dns-system(type=local,line 370-373) | 私有域名不走公共 DNS(223.5.5.5/8.8.8.8),改用底层物理网络 DNS——在家=路由器/NAS 下发的局域网 DNS(含覆盖),在外=所在网络 DNS(公网记录)。 |
| ② | DNS rule {domain: 私有域名, server: dns-system}(line 383-385) | 把私有域名的解析定向到 ①。排在 geosite-cn 之前,优先级最高。 |
| ③ | route rule {domain: 私有域名, outbound: auto}(line 239-242)+ 前置 LAN 直连 {ip_cidr:[10/8,172.16/12,192.168/16,127/8], outbound:direct}(line 230-233) | 在家:DNS 解出私网 IP → LAN 直连规则先命中(更靠前)→ 直达 NAS,不进隧道。在外:解出公网 IP → 落到私有域名规则 → auto(隧道) → pangolin1 出口。dns.reverse_mapping=true 补回域名元数据,使按 IP 发起的连接仍能命中该规则。 |
这正是 私有服务 ACL 设计 / 实现计划 已落地的家庭内网穿透机制(nas/win/brain 同款)。git 只是复用它,无新代码。
+ +| # | 工作项 | 动谁 | 状态 |
|---|---|---|---|
| W1 | pangolin 把 git 纳入 private-split | pangolin1 server.env | 已完成 |
| W2 | ali 外网入口(git nginx 443→frp→NAS,开放) | ali | 已就绪 |
| W3 | 家内分光 DNS:git/nas/win → 192.168.3.200 / .88 | NAS(装 DNS Server)+ 路由器 DHCP | 待做 |
| W4 | NAS 443 TLS 反代 git → gitea:3000(+证书) | NAS(DSM 反向代理) | 待证实/建 |
| W5 | runner 收口:1 个用户级 mac runner 走域名;退役 id=7/id=3;删 relay | dev mac(launchd)+ gitea | 待做 |
| W6 | 验证 + 回写 baize 台账 | — | 待做 |
降级路径(若暂不做 W3/W4):runner 现在就能改注册到域名并删 relay(W5 单独可行)——在家会走「隧道→pangolin1→ali→NAS」的回环路径(实测 ~1.8s/请求,能用但慢)。W3+W4 是把在家这条腿从「回环」优化成「局域网直达(~ms)」,即你要的「局域网域名直接解析成局域网地址」。建议:W5 先落地拿掉 relay,W3/W4 作为随后的直连优化。
+目标:局域网内解析 git/nas/win.51yanmei.com → 私网 IP;其余照常公网。方案(二选一):
51yanmei.com(或用「解析区域 + A 记录覆盖」)→ 加 A:git 192.168.3.200、nas 192.168.3.200、win 192.168.3.88;开启 forwarders 把其余查询转公网(223.5.5.5)。再在路由器 DHCP 把下发 DNS 指向 NAS 192.168.3.200。注意:装 DNS Server / 改 DHCP = 机器与网络改动,按规矩先经你确认再动。dns-system(type=local)吃的是 OS resolver → 路由器 DHCP 下发的 DNS,所以 DHCP 那一步不可省。
局域网直达 https://git.51yanmei.com 即打到 192.168.3.200:443,须 NAS 在 443 用 git.51yanmei.com 有效证书反代到 gitea:3000。步骤:
git.51yanmei.com 条目;sudo ss -tlnp | grep :443 看谁占 443。git.51yanmei.com:443 → localhost:3000,勾 HTTP/2、WebSocket;client_max_body_size 0 等价项在 DSM 里放开大包(git push)。git.51yanmei.com 配 LE 证书。家内无 80 端口暴露→用 DNS-01(阿里云 DNS,AK 在 Bitwarden「ali dev」),或从 ali /etc/letsencrypt/live/git.51yanmei.com/ 定期同步导入。绑到反代条目。gitea 的 ROOT_URL 已是 https://git.51yanmei.com(外网就这么跑),Host 头一致,反代到 3000 无需改 gitea。
act_runner 的标签在首次注册即固定,改配置不重注册无效——所以必须重注册。目标态:一个用户级 mac runner。
+instance = https://git.51yanmei.com(域名,不是 127.0.0.1:13000,不是 IP),labels mac,self-hosted,macos,name mac。com.yanmei.act-runner(用户级常驻,配置目录 ~/.act_runner_mac_config.yaml);卸载 com.pangolin.act-runner(mac-pangolin-2) 与 com.jiu.act-runner。com.jiu.act-runner 的 start 脚本里附带拉起 ~/bin/tcp_relay.py——runner 走域名后 relay 无用,随该 launchd 一并退休(脚本、plist、13000 监听全清)。mac;如 jiu workflow 用 runs-on: mac 直接兼容,否则补标签)。relay(tcp_relay.py 127.0.0.1:13000 → NAS 192.168.3.200:3000)当初只为绕开 Shadowrocket 拦 act_runner 这个 Go 二进制的直连(Python 进程不被 Shadowrocket 拦)。现在 daily 代理是 pangolin 全局 TUN,TUN 不做按-App 拦截、对 Go 二进制透明,实测域名直连 200 通。relay 已淘汰,随 W5 删除。
W3 与 W4 是一对:只做 W3 不做 W4,家内会打到 192.168.3.200:443 但无有效 TLS → 失败;两者同批上。
+ +# 在家(局域网)——应直达私网、无隧道回环 +dig +short git.51yanmei.com # 期望 192.168.3.200 +curl -sS -o /dev/null -w "%{remote_ip} %{time_total}\n" https://git.51yanmei.com/api/v1/version + # 期望 ip=192.168.3.200,time≈ms 级 + +# 在外(手机热点/换网)——应回落公网锚点、经隧道 +dig +short git.51yanmei.com # 期望 182.92.213.171 +curl ... /api/v1/version # 200,ip=182.92.213.171 + +# runner 状态 +launchctl list | grep act-runner # 只剩 com.yanmei.act-runner +lsof -i :13000 # 空(relay 已死) ++
gitea 网页 Runners:只余 windows(id=8) / mac(新,用户级) / nas(id=2,实例级不动)。触发一次 pangolin build-macos 确认被 mac runner 接走、跑绿。
| 项 | 属于 | 需要你 |
|---|---|---|
| 用户级 runner 注册 token(网页 Create new Runner 取) | W5 | 提供 token |
| 装群晖 DNS Server + 改路由器 DHCP DNS | W3 | 确认动手(装套件+改网络) |
| NAS DSM 反向代理 + 证书(DNS-01 或同步 ali 证书) | W4 | 确认动手 / 或授权 sudo 让我先证实现状 |
卸载 com.jiu.act-runner / com.pangolin.act-runner、删 relay | W5 | 确认(会短暂影响 jiu CI,直到新 runner 接管) |
相关台账:~/code/baize/data/hosts.yaml ci_runners 段(relay_note、mac runner state)+ domains.yaml(nas/win/git「家内覆盖 待做」)。W3/W5 落地后回写。
关联:私有服务 ACL 设计 · 私有服务 ACL 实现计划 · 控制面 TLS(Tunnel 前置) · ← 文档索引
+ +docs/superpowers/plans/2026-07-05-cicd.md(含 checkbox)。三期 11 任务:Phase1 基座+官网+服务端(无签名可立即上线,服务端固化 F3/F4 备份/迁移/回滚) → Phase2 Android(接 release keystore 签名,解锁下载链接) → Phase3 macOS 公证 dmg + Windows 安装包。runner 混合 nas/mac/windows;密钥已建(对齐 jiu)。设计见 cicd-design.html。https://git.51yanmei.com。git 早在 PANGOLIN_PRIVATE_SPLIT_DOMAINS,靠 dns-system 解析:在家局域网 DNS 覆盖成 192.168.3.200 → LAN 直连规则先命中直达 NAS;在外公网锚点 182.92.213.171 → 私有域名走隧道 → pangolin1 出口 → ali frp → NAS。已就绪(pangolin配置/ali入口/域名实测200);待补 W3 家内分光 DNS(群晖 DNS Server+DHCP)+W4 NAS 443 TLS 反代+W5 runner 收口成一个用户级 mac runner 并删 relay。机制复用私有服务 ACL。docs/superpowers/plans/2026-06-29-device-session-management.md(含 checkbox)。P1 设备注册打通 → P2 sessions表+在线/最后登录 → P3 强制退出/清除 → P4 每设备流量 → P5 2FA信任(future) → P6 UI重做。