Files

324 lines
11 KiB
Markdown
Raw Permalink Normal View History

# Nexus 6.0 — 全站功能清单(SSOT
> **更新**: 2026-05-23
> **读者**: 产品、运维、接续开发的 AI
> **HTML 版**: [`docs/Nexus-功能说明书.html`](../Nexus-功能说明书.html)
> **接续开发**: [`AI-HANDOFF-2026-05-23.md`](AI-HANDOFF-2026-05-23.md)
---
## 0. 全站页面地图(18 页)
| 页面 | 路径 | 功能摘要 |
|------|------|----------|
| 安装向导 | `/app/install.html` | 无 `.env` 时 5 步安装中心机 |
| 登录 | `/app/login.html` | JWT + TOTP + 防暴破 |
| 仪表盘 | `/app/index.html` | 统计、WebSocket 刷新、告警计数 |
| 服务器 | `/app/servers.html` | CRUD、详情、Agent 安装/升级、时钟漂移 |
| 资产管理 | `/app/assets.html` | Platform / Node 树 |
| 文件管理 | `/app/files.html` | SSH 浏览、删/改名/建目录 |
| 推送 | `/app/push.html` | rsync 批量、dry-run 预览、历史 |
| 脚本库 | `/app/scripts.html` | 脚本 CRUD、直接执行、$DB_* |
| 执行历史 | `/app/script-executions.html` | 停止/重试/日志/卡住检测 |
| 凭据 | `/app/credentials.html` | DB 凭据 + 密码预设 |
| 定时调度 | `/app/schedules.html` | Cron 推送 **或** 脚本执行 |
| 重试队列 | `/app/retries.html` | 推送失败指数退避重试 |
| 命令日志 | `/app/commands.html` | WebSSH 会话/命令 + **推送日志** |
| 告警中心 | `/app/alerts.html` | 告警历史、统计、时间过滤 |
| 审计 | `/app/audit.html` | 操作审计、时间/用户/类型过滤 |
| 设置 | `/app/settings.html` | 品牌、阈值、Telegram、TOTP、IP 白名单 |
| WebSSH | `/app/terminal.html` | xterm.js 终端(独立页) |
共享:`layout.js`(侧栏)、`api.js`JWT、toast、全局搜索)
---
## 1. 网络与通道模型
| 通道 | 端口 | 用途 |
|------|------|------|
| 子机 → 中心 | **443 出站** | Agent 心跳、长任务完成回调 |
| 中心 → 子机 | **22 入站** | 推送、文件、**脚本**、手动健康检查、Agent 安装/升级 |
| 子机本机 | **127.0.0.1:8601** | Agent HTTP(可不暴露公网) |
---
## 2. 认证与访问控制
- JWT 登录 / 刷新 / 登出(`POST /api/auth/*`
- TOTP:启用、禁用、**重绑**(设置页)
- 登录防暴破:5 次/15 分钟 → 429
- 会话:8 小时无操作退出;刷新令牌重用检测
- **登录 IP 白名单**:总开关、手动 IP、**代理订阅 URL 解析**(2h 自动刷新)、与登录防暴破联动
- WebSSH 专用短票:`POST /api/auth/webssh-token`(绑定 server_id
**不可改密钥**(仅 `.env`):`SECRET_KEY``API_KEY``ENCRYPTION_KEY``DATABASE_URL`
---
## 3. 仪表盘(index.html
- 服务器总数 / 在线 / 离线 / 告警中(Redis 实时)
- WebSocket:告警/恢复时**刷新统计**(浏览器不响铃、不弹告警列表)
- 最近推送记录摘要
---
## 4. 告警中心(alerts.html)— 新增模块
- MySQL `alert_logs` 持久化告警与恢复记录
- 列表:按服务器、类型、是否恢复、**日期范围**分页
- 统计:近 N 日 Top 服务器、按日计数
- API`GET /api/alert-history/``GET /api/alert-history/stats`
**实时告警路径**Agent 心跳超阈值 → Redis + WebSocket Pub/Sub + Telegram5 分钟防抖)
---
## 5. 服务器管理(servers.html
- 分页列表;Redis 覆盖 `is_online``system_info`、**时钟漂移**warn/crit 徽章)
- CRUDSSH 密钥/密码(Fernet)、`platform_id`/`node_id``target_path``agent_port`
- 每机 **Agent API Key**`nxs-*`,一次性展示)
- **Agent 安装**:复制 curl 命令 / **一键 SSH 远程安装**(实时日志)
- 安装后 **轮询在线状态**
- **Agent 升级**`POST /api/servers/{id}/upgrade-agent`SSH 拉 agent.py + restart
- **健康检查**`POST /api/servers/check`**SSH 探测**,非 8601
- 详情:系统信息、同步日志、WebSSH 入口
- 推送:`POST /api/servers/push`;日志:`GET /api/servers/logs`
**未实现**CSV 批量导入
---
## 6. 资产管理(assets.html
- Platform 模板 CRUD
- Node 树形分组 CRUD
- SSH 会话列表、命令日志查询(与 commands.html 数据同源)
API`/api/assets/platforms``/api/assets/nodes``/api/assets/ssh-sessions``/api/assets/command-logs`
---
## 7. WebSSHterminal.html
- xterm.js + Koko 协议 + asyncssh 连接池
- `webssh-token` 15 分钟、**绑定 server_id**(越权关闭码 4003
- 全屏、自动 resize
- 会话与命令写入 `ssh_sessions` / `command_logs`
**未实现**:断线自动重连(需刷新页面)
---
## 8. 命令日志(commands.html
- **会话视图**:WebSSH 会话列表、过滤
- **命令视图**:逐条命令、危险命令高亮
- **推送日志视图**:rsync 批量推送历史、分页、服务器/状态/模式/触发源过滤
---
## 9. 批量推送(push.html
- SyncEngineV2`sync_files` rsync-over-SSH
- 模式:增量 / 全量(--delete) / 校验和 / inplace
- 分批 50、并发 10;失败 → `push_retry_jobs`
- **dry-run 预览**(方案 D):首台 `--dry-run --stats`,可选 `-v` 前 200 行
- 推送历史列表
API`POST /api/sync/files``POST /api/sync/preview`
---
## 10. Sync 引擎其他能力(API,部分无独立页)
| 模式 | API | 说明 |
|------|-----|------|
| 命令批量 | `POST /api/sync/commands` | SSH 批量执行命令 |
| 配置推送 | `POST /api/sync/config` | 批量写配置项 |
| 配置回滚 | `POST /api/sync/config/rollback` | 回滚 |
| SFTP | `POST /api/sync/sftp` | 上传/下载 |
| 目录浏览 | `POST /api/sync/browse` | 文件页也用 |
| 文件操作 | `POST /api/sync/file-ops` | 删/改名/mkdir |
---
## 11. 脚本与执行历史
### 脚本库(scripts.html
- 脚本 CRUD(分类:ops/deploy/check/cleanup
- **直接执行命令**(无需入库)
- 批量选机执行;危险命令中心拦截(400)
- **执行通道:SSH 22**(结果 `channel: ssh`
- $DB_* 凭据替换(中心替换后 SSH 下发)
### 执行历史(script-executions.html
- 列表 / 详情 / 停止 / 重试 / 标记卡住
- 长任务:nohup + 子机 `curl` 回调 `POST /api/agent/script-callback`
- Redis 热数据 2h + 60s 刷 MySQL
API`POST /api/scripts/exec``GET /api/scripts/executions/*`
---
## 12. 远程文件管理(files.html
- SSH `ls -la` 浏览、面包屑、目录优先排序
- 删除文件/目录、重命名、新建目录(confirm/二次确认)
**未实现**:上传、在线预览、树形侧栏
---
## 13. 定时调度(schedules.html
- **类型**`push`(文件推送)或 `script`(脚本执行)
- 5 字段 Cron`schedule_runner` 60s 检查;仅 Primary Worker
- 脚本调度:关联 `script_id` 或内联 `script_content`、超时、长任务标志
---
## 14. 凭据管理(credentials.html
- **数据库凭据**MySQL/PG 等,Fernet 加密,供 $DB_*
- **密码预设**:SSH 密码模板(推送场景)
脚本页也可管理 DB 凭据(`/api/scripts/credentials`
---
## 15. 重试队列(retries.html
- 推送失败自动入队;`retry_runner` 5 分钟指数退避
- 手动立即重试 / 删除任务
---
## 16. 全局搜索
- 侧栏搜索框:`GET /api/search/` 跨服务器/脚本/凭据/调度
---
## 17. 系统设置(settings.html
| 模块 | 功能 |
|------|------|
| 品牌 | system_name、title |
| 监控 | CPU/内存/磁盘阈值 |
| 连接 | redis_url、pool_size |
| Telegram | Token、Chat ID、**测试发送**、**getUpdates 解析 Chat ID** |
| 告警开关 | 各类型 Telegram 通知独立开关 |
| 安全 | 改密码、TOTP 启用/禁用/重绑、API Key 二次验证查看 |
| 登录白名单 | 开关、订阅 URL、手动 IP 列表、解析预览 |
配置三写:安装时 `.env` + `settings` 表 + `web/data/config.php`PHP 兼容)
---
## 18. 审计日志(audit.html
- 全站 CUD 与关键操作写入 `audit_logs`
- 过滤:**日期起止**、管理员用户名、操作类型(分组下拉)
- 分页 50 条/页
**未实现**:导出 CSV/JSON(已否决)
---
## 19. 安装向导(install.html
-`.env` → 安装模式(其他 API 503)
- 步骤:环境 → DB/Redis → 管理员/品牌 → 完成
- 生成密钥、写三处配置、Nginx 模板、cron 提示
- 完成后 install API 锁定(403
---
## 20. 子机 Agentweb/agent/
| 能力 | 说明 |
|------|------|
| 心跳 | 60s → `POST /api/agent/heartbeat`;变化>10% 或超阈值加急 |
| 时钟漂移 | `agent_time` vs 中心;warn/crit + Telegram |
| IP 白名单 | `allowed_ips` 限制访问 Agent HTTP |
| 安装 | `install.sh`python3.12 venv、127.0.0.1:8601 |
| 端点 | `/health``/exec*`(中心脚本已改 SSH,子机端点保留) |
---
## 21. 后台任务(仅 Primary Worker
| 任务 | 间隔 | 文件 |
|------|------|------|
| heartbeat_flush | 10min | Redis → MySQL |
| self_monitor | 30s | Redis/MySQL/WS 自检 |
| schedule_runner | 60s | Cron 调度 |
| retry_runner | 5min | 推送重试 |
| ip_allowlist_refresh | 2h | 订阅 IP 刷新 |
| script_execution_flush | 60s | 执行记录刷盘 |
| asyncssh 清理 | 60s | 空闲 SSH 连接 |
---
## 22. 三层守护
1. Supervisor — 进程崩溃重启
2. Python self_monitor — 30sRedis/MySQL 异常 Telegram
3. Shell `health_monitor.sh` — 1min,连续 3 次 `/health` 失败重启
---
## 23. 未实现(待开发)
| 功能 | 优先级 |
|------|--------|
| WebSSH 断线重连 | P1 |
| 服务器 CSV 批量导入 | P1 |
| Agent upgrade 与 venv install 对齐 | P1 |
| 仪表盘历史趋势图 | P2 |
| 远程文件上传 / 内容预览 | P2 |
| 宝塔 API 监控增强 | 可选 |
| Agent mTLS | 可选 |
---
## 24. 已否决(不做)
文件编辑器、RBAC、移动端、会话录像、审计导出、邮件报告、Redis Cluster、Docker(当前阶段)
---
## 25. 标准与验收(必查 · 与团队同等严谨)
| 文档 | 路径 |
|------|------|
| **标准转接包(全量)** | [`standards-transfer-package.md`](standards-transfer-package.md) |
| 开发验收 L0L5 | [`development-acceptance-standard.md`](development-acceptance-standard.md) |
| 系统开发标准 | [`standards/system-development-standard.md`](../../standards/system-development-standard.md) |
| 逐行审计 v2 | [`standards/line-walk-audit-standard-v2.md`](../../standards/line-walk-audit-standard-v2.md) |
| 审计原则 | [`standards/audit-core-principles.md`](../../standards/audit-core-principles.md) |
| Cursor 规则 | `.cursor/rules/*.mdc`(含 `audit-line-review.mdc` |
**逐行审查**8 步/文件、Closure 全表、FINDING 必须 `文件:行号`、单回复 ≤5 文件 — **不可降级**
| 层级 | 说明 |
|------|------|
| L0 | 完美实现 + 全部 mdc + system-development-standard |
| L2 | `pytest` + `local_integration_smoke.sh` |
| L3 | 逐行 DoD(同 standards-transfer-package §2 |
| L4 | 脚本 T-SE、告警策略、T1T5 |
| L5 | `production-verification-checklist.md` |
---
## 26. 待验证(非功能缺失)
- 首次部署 E2E`docs/project/production-verification-checklist.md`
- 脚本 T-SE18`docs/project/script-execution.md`
- 本地代码向:`docs/project/local-integration-test.md`