6859846b7c
- bootstrap 失败恢复 SSH 临时登录回退 - ssh_bootstrap 真安装检测与 config 目录自愈 - axs Gitea 发布源切换为 https://axs.kuma1xn.vip
1.8 KiB
1.8 KiB
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/IPv6;resolve_server_site_host(server)为空。 - 输出:
extra_attrs.site_url = "<hostname>"(裸域名,与现有运维脚本一致)。 - 不修改:
domain(SSH 仍走 IP)。
接口与任务
- 新 batch op:
detect-domain - 新后台 loop:
ip_domain_detect_loop(60s 轮询 cron) - 配置:
IP_DOMAIN_DETECT_ENABLED(默认 true)、IP_DOMAIN_DETECT_CRON(默认30 23 * * *)
安全与性能
- 远程命令经
shlex.quote;只读 nginx 配置。 - 并发沿用 batch
CONCURRENCY=5;每日 Redis 去重一次。 - 仅 primary worker 执行。
验收标准
- cron
30 23 * * *在北京时间 23:30 触发一次 batch。 - IP-only 且无 site_url 的服务器被纳入;已有 site_url 的跳过。
- 成功探测后列表
#/servers地址列 IP 下出现可点击域名。 - pytest 覆盖 cron、候选筛选、命令构建。