Files
Nexus/docs/design/specs/2026-06-20-btpanel-module-design.md
T
r 82426b1941 feat(btpanel): 独立宝塔模块与 SSH 自动获取 API
新增侧栏「宝塔面板」菜单、代理 API 与连接配置页;通过 SSH 读写子机
api.json 自动写入凭据,5 分钟后台重试,含审计修复、检测缓存与并发锁。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-21 09:13:14 +08:00

3.3 KiB
Raw Blame History

宝塔面板独立模块 — 设计文档

日期:2026-06-20
状态:已批准实施

背景与目标

用户在 Nexus 管理 2000+ 台装宝塔的子机,需要独立菜单操作宝塔能力(一键登录、监控、网站/库/任务/服务),不与现有服务器页、文件、调度等功能合并 UI。

方案选定

方案
凭据 每台 servers.extra_attrs.bt_panelbase_urlapi_key_encFernet)、verify_ssl
登录 A1/A5 优先 POST /config?action=set_temp_login;失败则 SSH tools.py get_temp_login_ipv4
其它能力 中心 HTTP 代理宝塔 API(签名 + Redis Cookie 复用)
前端 新导航分组「宝塔面板」+ 9 个子路由,共享服务器选择器

功能映射

编号 Nexus 路由 宝塔 API / 方式
A1/A5 /btpanel/login set_temp_login / SSH tmp_token
B1B3 /btpanel/monitor GetSystemTotal / GetDiskInfo / GetNetWork
C1,C6 /btpanel/sites getData sites / SiteStart SiteStop
C4 /btpanel/sites/create AddSite + GetPHPVersion
C10 /btpanel/domains getData domain / AddDomain / DelDomain
C15 /btpanel/ssl 站点 SSL 字段 + SetSSL / apply_cert
D1D4 /btpanel/databases getData databases / AddDatabase / ResDatabasePassword / ToBackup
F1 /btpanel/crontab GetCrontab(只读)
H1 /btpanel/services ServiceAdmin
配置 /btpanel/settings 读写 extra_attrs.bt_panel

安全

  • 所有路由 Depends(get_current_admin)
  • API Key 仅写入加密字段;响应 api_key_set: bool
  • 生成登录链接、建站、删库等写操作记 audit_logs
  • 中心机 IP 须在各子机宝塔 API 白名单;SSH Bootstrap 可自动追加 limit_addr(见下节)

SSH Bootstrap2026-06-20 增补)

子机 Linux 宝塔 API 配置位于 /www/server/panel/data/api.json。中心通过 root SSH 执行 ssh_bootstrap.py

  1. 无面板目录 → bt_not_installed(状态 installing5min 重试)
  2. 读/写 api.json:保留 token、开启 API、追加中心 IP 到 limit_addr
  3. 原子写 + bt reloadstdout JSON → 加密写入 api_key_enc + base_url

状态机(extra_attrs.bt_panel

bootstrap_state 含义 5min 重试
pending 等待首次/下次
installing 宝塔尚未装好
ready 已写入凭据
failed SSH 认证失败等
disabled 用户关闭自动

Background Loop

  • server/background/bt_panel_bootstrap_loop.pyprimary worker,默认 300s
  • 每轮最多 BT_PANEL_BOOTSTRAP_BATCH20)台
  • 触发:创建服务器、凭据轮询成功、UI「立即 SSH 获取」、批量 bt-panel-bootstrap

API

方法 路径
POST /api/btpanel/servers/{id}/bootstrap
POST /api/btpanel/servers/batch-bootstrap
GET/PUT /api/btpanel/settings(中心 IP、全局开关)

验收

  1. 侧栏见独立「宝塔面板」分组及子项,与「运维」分组分离
  2. 配置 API 后可一键打开 tmp_token 登录页
  3. 各子页选定服务器后能拉取对应宝塔数据或执行操作
  4. pytest tests/test_btpanel*.py + vite build 通过