服务器运维管理平台 — 全站功能说明书 · 2026-05-23
Markdown 维护版:docs/project/nexus-full-site-features.md ·
AI 接续:docs/project/AI-HANDOFF-2026-05-23.md
| 页面 | 路径 | 功能 |
|---|---|---|
| 安装向导 | /app/install.html | 无 .env 时安装中心机 |
| 登录 | /app/login.html | JWT + TOTP + 防暴破 |
| 仪表盘 | /app/index.html | 统计、WS 刷新统计 |
| 服务器 | /app/servers.html | CRUD、Agent 安装/升级、漂移徽章 |
| 资产管理 | /app/assets.html | Platform / Node |
| 文件管理 | /app/files.html | SSH 浏览与文件操作 |
| 推送 | /app/push.html | rsync 批量 + dry-run |
| 脚本库 | /app/scripts.html | 脚本 CRUD、直接执行 |
| 执行历史 | /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 |
| WebSSH | /app/terminal.html | xterm 终端 |
共享:layout.js(侧栏/移动适配)、api.js(JWT、toast、全局搜索)
| 方向 | 端口 | 用途 | 必须 |
|---|---|---|---|
| 子机 → 中心 | 443 出站 | Agent 心跳、长任务 curl 回调 | ✅ |
| 中心 → 子机 | 22 入站 | 推送、文件、脚本、健康检查、Agent 安装 | ✅ |
| 子机本机 | 127.0.0.1:8601 | Agent HTTP(可不暴露公网) | 可选 |
脚本执行与手动健康检查已改走 SSH,不依赖公网 8601。宝塔环境请用系统 Python 3.12 + install.sh venv,勿用面板 Python 项目管理器托管 Agent。
管理员通过用户名+密码登录,获取 Access Token(30 分钟)和 Refresh Token(7 天)。前端到期前 2 分钟自动换新 Token,无感续期。
/app/login.html,输入管理员账号密码localStorage,关闭浏览器后 7 天内免登录可选启用 Google Authenticator 兼容的 TOTP。登录时先验密码,再验 6 位动态码(30 秒窗口)。
同一 IP + 用户名 15 分钟内失败 5 次,账号自动锁定并返回 HTTP 429。
锁定基于 IP + 用户名组合,更换 IP 可绕过。适合防自动化爆破,不防分布式攻击。
可在设置中开启「仅允许白名单 IP 登录」。支持手动 IP/CIDR,以及从代理订阅 URL解析节点 IP(每 2 小时自动刷新,与手动列表合并)。
首页展示服务器总数、在线数、离线数、告警中台数、最近推送记录。数据来源 Redis(实时)+ MySQL(历史),通过 WebSocket 触发刷新。
heartbeat:{id},子机 60s 上报一次alerts:* key 数量CPU / 内存 / 磁盘超过阈值(默认 80%)时,通过 Telegram Bot 推送告警;恢复后发送恢复通知。同服务器同指标 5 分钟内不重复推送。
TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID将 CPU/内存/磁盘告警与恢复事件持久化到 alert_logs,支持分页、按服务器/类型/日期筛选,以及近 7 日统计图表数据。
GET /api/alert-history/、GET /api/alert-history/stats设置页可单独关闭某类告警的 Telegram 推送(告警/恢复/系统/时钟漂移等),便于后续扩展通道。
增删改查服务器配置,支持 SSH 密钥 / 密码双认证,可按平台类型(Platform)和节点(Node 树)分组。
platform_id / node_id 分组归类手动触发 POST /api/servers/check:经 SSH 执行 Python 采集 CPU/内存/磁盘(remote_probe),不需要公网 8601。
列表「在线」主要来自 Agent 443 心跳;健康检查用于即时 SSH 探活与指标快照。
服务器详情「Agent 安装」:复制 install.sh 命令或一键 SSH 安装(带日志);安装后轮询在线。升级通过 SSH 拉取最新 agent.py 并 restart。
127.0.0.1:8601,无需公网放行 8601agent_time,列表显示 warn/crit 徽章为每台服务器单独生成 Agent API Key(格式 nxs-xxx),用于该服务器子机与中心通信的专属认证。
config.jsonassets.html 管理资产类型模板(Platform)与树形节点(Node),服务器表单可关联分组。
API:/api/assets/platforms、/api/assets/nodes(含 tree)
同页或「命令日志」可查询 ssh_sessions、command_logs(WebSSH 产生)。
基于 xterm.js + asyncssh,在浏览器内打开远程服务器 SSH 会话,支持全屏、自动 resize、彩色输出。
/app/terminal.html?server_id=Xcommands.html:会话列表、命令列表(危险命令高亮)、按服务器过滤。数据来自 WebSSH,直接 SSH 不记录。
同页「推送日志」Tab:rsync 批量推送历史,支持服务器/状态/同步模式/触发方式过滤与分页。
将源目录通过 rsync-over-SSH 推送到选定的服务器列表,支持 4 种同步模式,内置分批(50 台/批)并发(10 路)控制。
| 同步模式 | rsync 参数 | 适用场景 |
|---|---|---|
| 增量同步 | -az | 日常更新,只同步有变动的文件 |
| 全量同步 | -az --delete | 强制目标与源完全一致,会删除目标多余文件 |
| 校验和 | -az --checksum | 按文件内容而非时间戳判断差异 |
| 直接覆盖 | -az --inplace | 不用临时文件,直接覆盖(大文件节省空间) |
选中全量/覆盖模式时,页面显示橙色警告,引导先对首台服务器运行 rsync --dry-run --stats,查看待传输/删除文件数量后再决定是否推送。
推送失败的服务器自动进入 push_retry_jobs 队列,后台每 5 分钟按指数退避重试(60s → 120s → 240s...,最大 64 分钟)。
最多重试 100 次。可在「重试」页手动强制立即重试或删除任务。
维护可复用 Shell 脚本库(按 ops/deploy/check/cleanup 分类),一键下发到选定的服务器。
短任务:同步等待结果(默认 30s 超时)。长任务:nohup 后台运行,完成后 curl 回调中心记录结果。
channel: ssh),无需子机公网 8601NEXUS_API_BASE_URL)rm -rf / 等危险命令被中心拦截(400),但仅匹配预设规则NEXUS_API_BASE_URL(必须配置且使用 HTTPS)脚本中使用 $DB_USER / $DB_PASS / $DB_HOST / $DB_PORT / $DB_NAME 占位符,执行时自动替换为选定的数据库凭据,密码不出现在脚本文本或日志中。
替换在中心机完成后发往子机,子机接收到的已是明文命令;传输通过 HTTPS,子机侧无加密保护。
通过 SSH exec(ls -la)浏览指定服务器的远程目录,支持面包屑导航和目录点击进入。
ls 输出的字节数,大文件不友好鼠标悬停文件/目录行显示操作按钮,通过 SSH exec 在远程执行操作。
| 操作 | 命令 | 触发方式 |
|---|---|---|
| 删除文件 | rm -f path | 悬停 → 🗑 → confirm 弹窗 |
| 删除目录 | rm -rf path | 悬停 → 🗑 → 额外警告弹窗 |
| 重命名 | mv src dst | 悬停 → ✏ → prompt 输入新名 |
| 新建目录 | mkdir -p path | 右上角 📁+ → prompt 输入名 |
支持两种 schedule_type:文件推送 或 脚本执行。5 字段 Cron,后台每 60s 检查(仅 Primary Worker)。
0 2 * * * = 每天凌晨 2 点retries.html 管理推送失败任务:retry_runner 每 5 分钟指数退避;可手动立即重试或删除。
侧栏搜索框调用 GET /api/search/,跨服务器、脚本、凭据、定时任务关键字匹配。
存储 MySQL/PostgreSQL 连接信息,密码 Fernet 加密,API 响应不含密码(仅元数据)。供脚本执行时通过 $DB_* 变量引用。
凭据只加密存储,子机接收到的命令已含明文连接信息(仅在中心→子机的 HTTPS 传输中受保护)。
存储 SSH 密码模板(Fernet 加密),可在推送配置中引用,避免重复输入常用密码。
密码预设不能用于脚本 $DB_PASS 替换,只用于推送密码模板。
| 设置项 | 说明 | 是否可改 |
|---|---|---|
| 系统名称 / 标题 | 品牌展示名称 | ✅ 可改 |
| 告警阈值(CPU/内存/磁盘) | 超过阈值触发 Telegram 告警,默认 80% | ✅ 可改 |
| Redis URL | Redis 连接地址 | ✅ 可改 |
| 数据库连接池大小 | pool_size / max_overflow | ✅ 可改 |
| Telegram Bot Token / Chat ID | 告警推送配置 | ✅ 可改 |
| SECRET_KEY / API_KEY / ENCRYPTION_KEY | 核心安全密钥 | ❌ 不可改(需改 .env 重启) |
| DATABASE_URL | 数据库连接 | ❌ 不可改 |
配置 Bot Token / Chat ID;测试发送;通过 getUpdates 检测 Chat ID;各告警类型独立开关。
TOTP 启用/禁用/重新绑定;全局 API Key 需密码二次验证后查看(记审计)。
总开关、订阅 URL(2h 刷新)、手动 IP、解析预览(见「认证」章节)。
所有 CUD 操作(创建/更新/删除服务器、推送、执行脚本、登录、改密码等)自动写入 audit_logs,记录操作人、IP、目标、详情。
无 .env 文件时系统进入安装模式,访问 /app/install.html 完成 5 步配置:欢迎 → 数据库 → Redis → 管理员账号 → 完成。自动生成 API Key / Secret Key / Encryption Key。
.env 自动生成,安装 API 除 GET /status 外全部锁定(返回 403).env 并重启| 层级 | 机制 | 触发条件 | 动作 |
|---|---|---|---|
| Layer 1 | Supervisor | Python 进程崩溃 | 自动重启 |
| Layer 2 | Python self_monitor(30s) | Redis/MySQL 不可达 | 发 Telegram 告警/恢复 |
| Layer 3 | Shell cron(1 分钟) | 连续 3 次 /health 失败 | supervisorctl restart + Telegram |
Shell cron 依赖宝塔/系统 crontab 配置,部署时需手动添加定时任务。
部署在每台被管服务器上的轻量服务:心跳走 443 出站;HTTP 仅本机 127.0.0.1:8601。中心侧脚本已改 SSH,/exec 端点保留供兼容。
| 能力 | 说明 |
|---|---|
| 心跳 | POST 中心 /api/agent/heartbeat,写 Redis,智能加急 |
| 时钟漂移 | agent_time 与中心比对,warn/crit + Telegram |
| IP 白名单 | allowed_ips 限制访问本机 Agent HTTP |
| 长任务回调 | POST /api/agent/script-callback |
| 安装 | web/agent/install.sh — python3.12 venv + systemd |
| 任务 | 间隔 | 说明 |
|---|---|---|
| heartbeat_flush | 10min | Redis 心跳 → MySQL |
| self_monitor | 30s | Redis/MySQL/WS 自检 + Telegram |
| schedule_runner | 60s | Cron 调度 |
| retry_runner | 5min | 推送重试 |
| ip_allowlist_refresh | 2h | 订阅 IP 刷新 |
| script_execution_flush | 60s | 执行记录 Redis→MySQL |
全量标准转接:docs/project/standards-transfer-package.md — 含 Cursor 规则、standards/ 三件套、逐行八步 DoD、设计/上线清单。下一任 AI 不得降低执行力度。
| 类别 | 权威路径 |
|---|---|
| 标准转接包 | docs/project/standards-transfer-package.md |
| 验收 L0~L5 | development-acceptance-standard.md |
| 系统开发 | standards/system-development-standard.md |
| 逐行审计 v2 | standards/line-walk-audit-standard-v2.md |
| 审计原则 | standards/audit-core-principles.md |
| Cursor | .cursor/rules/*.mdc(含 audit-line-review) |
逐行审查:8 步/文件、Closure 全表含 SAFE、FINDING 必须 文件:行号、单回复 ≤5 文件。AI 接续:HANDOFF + 全站功能 + 标准转接包。
| 功能 | 状态 | 原因 / 替代方案 |
|---|---|---|
| 文件编辑器(Monaco/ACE) | 已否决 | 运维场景用 WebSSH + vim/nano;嵌入编辑器增加复杂度无实质收益 |
| 会话录像(asciicast) | 已否决 | 命令日志已满足审计需求 |
| RBAC 权限体系 | 已否决 | 鉴权即信任,单管理员模型;增加 RBAC 代价远超收益 |
| 移动端适配 | 已否决 | 2000 台服务器运维不会用手机操作 |
| 批量服务器导入(CSV) | 未实现 | 可通过 API 批量 POST /api/servers/ 实现 |
| 文件上传到远程服务器 | 未实现 | 可用 WebSSH scp / 推送功能代替 |
| 文件内容预览 | 未实现 | 可通过 WebSSH cat 查看 |
| WebSSH 断线自动重连 | 未实现 | 当前需刷新页面;计划自动重试+按钮 |
| 仪表盘历史趋势图 | 未实现 | 仅实时 Redis 指标 |
| 宝塔 API 监控集成 | 未实现 | 可选;参考 btpanel-skills |
| Agent mTLS | 讨论中 | 未实现 |
| 首次部署 E2E(T1~T5、T-SE) | 待验证 | 见 production-verification-checklist.md |