Files
Nexus/docs/design/specs/2026-06-24-ip-domain-detect-schedule-design.md
T
r 6859846b7c sync: 主项目全量同步(含 btpanel 一键登录回归修复与前端构建产物)
- bootstrap 失败恢复 SSH 临时登录回退
- ssh_bootstrap 真安装检测与 config 目录自愈
- axs Gitea 发布源切换为 https://axs.kuma1xn.vip
2026-07-08 23:52:40 +08:00

1.8 KiB
Raw Blame History

IP 服务器自动补全站点域名 — 设计

日期: 2026-06-24

背景与目标

部分子机 SSH 地址(servers.domain)登记为 IP,列表「地址」列无法展示可点击站点链接。运维曾用手工脚本写 extra_attrs.site_url;需每日自动补全。

目标:北京时间每天 23:30,对「domain 为 IP 且尚无站点域名」的服务器 SSH 探测 nginx 站点名,写入 extra_attrs.site_url(不改 SSH 连接字段)。

方案对比

方案 优点 缺点
A. SSH 读 Baota/nginx vhost 与 detect-path 一致,无面板依赖 需 SSH 凭据
B. 宝塔 API list_sites 结构化 需先 bootstrap 面板凭据,覆盖不全
C. 仅读 target_path 推断 无 SSH 大量机器 target_path 仍为默认

选定 A:复用现有 SSH 池与 batch job 框架;target_path 仅作优选 hint。

数据模型

  • 输入Server.domain 为 IPv4/IPv6resolve_server_site_host(server) 为空。
  • 输出extra_attrs.site_url = "<hostname>"(裸域名,与现有运维脚本一致)。
  • 不修改domainSSH 仍走 IP)。

接口与任务

  • 新 batch opdetect-domain
  • 新后台 loopip_domain_detect_loop60s 轮询 cron
  • 配置:IP_DOMAIN_DETECT_ENABLED(默认 true)、IP_DOMAIN_DETECT_CRON(默认 30 23 * * *

安全与性能

  • 远程命令经 shlex.quote;只读 nginx 配置。
  • 并发沿用 batch CONCURRENCY=5;每日 Redis 去重一次。
  • 仅 primary worker 执行。

验收标准

  1. cron 30 23 * * * 在北京时间 23:30 触发一次 batch。
  2. IP-only 且无 site_url 的服务器被纳入;已有 site_url 的跳过。
  3. 成功探测后列表 #/servers 地址列 IP 下出现可点击域名。
  4. pytest 覆盖 cron、候选筛选、命令构建。