7.6 KiB
7.6 KiB
2026-05-27 批量按钮修复 + 审计日志中文化 + terminal断开反馈 + 远程安装按钮修复 + Agent安装sudo兼容
变更摘要
- 修复 servers.html 批量"安装 Agent"按钮:hasAgent 判断从
agent_api_key_set改为agent_version,解决未安装 Agent 的服务器按钮不可用的问题 - 所有后端 AuditLog detail 字段统一为中文(此前混杂英文如
name=xxx、WebSSH to xxx等) - audit.html 操作列和目标类型列显示中文映射(
create_server→添加服务器) - audit.html 新增 ACTION_NAMES 覆盖所有已知 action 类型(含 webssh_token、refresh_token_mismatch 等)
- mcp/Nexus_server.py deploy 流程修复:git pull 先于 gate check + origin/main 替代 origin/master
- 修复详情面板"远程安装"按钮始终禁用的 bug:
s._base_url不存在于服务器对象,改为从新 APIGET /api/servers/meta/api_base_url获取全局NEXUS_API_BASE_URL api_base_url加入 DB_OVERRIDE_MAP,可在设置页面管理- 安装向导新增
api_base_url写入 MySQL settings 表 - 启动时自动迁移:若 MySQL 缺
api_base_url但.env有值,自动插入 - Agent install.sh 非 root 用户兼容:自动检测当前用户,非 root 时使用
sudo执行mkdir/apt-get/systemctl/tee等特权操作,解决 Ubuntu 等非 root SSH 用户无法写入/opt的问题 - 后端 _sudo_wrap 辅助函数:
servers.py新增_sudo_wrap(cmd, ssh_user)— 非 root 用户自动配置 NOPASSWD sudo(写入/etc/sudoers.d/nexus-agent),命令执行后自动清理;应用于 install-agent / batch-install / upgrade-agent / batch-upgrade 共 4 个端点 - install.sh venv 创建 set -e 兼容:
python3 -m venv在缺python3-venv的 Ubuntu 系统上返回 exit 1,set -e导致脚本直接退出,apt-get 安装 python3-venv 的回退逻辑从未执行。修复:首次 venv 创建加|| true允许失败,然后检查 activate 是否存在再走回退路径
动机
- 批量操作中,
agent_api_key_set=True不等于 Agent 已安装(只代表生成了 Key),导致武汉市风莞溪服务器(有 Key 但无 Agent)的"安装"按钮被错误禁用 - 审计日志详情混合中英文,运维人员阅读不便
- MCP deploy 工具先执行 gate check 再 git pull,导致 changelog/audit 文件不在磁盘上被 BLOCK
- 详情面板"远程安装"按钮始终禁用:
s._base_url是前端代码中的错误引用(API_BASE_URL是全局设置,不是服务器的字段),导致所有服务器都无法远程安装 Agent - 非 root 用户远程安装 Agent 失败:Ubuntu 等系统默认用户(如
ubuntu)无/opt写权限,install.sh 直接mkdir -p /opt/nexus-agent报Permission denied - install.sh venv 创建被 set -e 终止:Ubuntu 24.04 默认未安装
python3-venv,python3 -m venv返回 exit 1,set -e导致脚本直接退出,apt-get 安装 python3-venv 的回退逻辑从未执行
涉及文件
前端
web/app/servers.html— updateBatchBar() hasAgent 从s.agent_api_key_set改为s.agent_version;loadAgentInstall() base_url_conf 从s._base_url改为_apiBaseUrl(从新 API 加载);新增loadApiBaseUrl()函数web/app/audit.html— 新增 ACTION_NAMES / TARGET_NAMES 中文映射(覆盖所有已知 action/target_type)web/app/settings.html— 基础设施区块新增api_base_url(主站对外 URL)
Agent 安装脚本
web/agent/install.sh— 新增非 root 用户 sudo 兼容:id -u检测 →$SUDO变量 →mkdir/apt-get/chown/tee/systemctl全部走 sudo;venv 创建加|| true兼容 set -e
后端
server/api/servers.py— 新增GET /api/servers/meta/api_base_url端点(返回settings.API_BASE_URL)server/config.py— DB_OVERRIDE_MAP 新增api_base_url→API_BASE_URL;新增ensure_api_base_url_in_db()启动迁移方法server/main.py— 启动时调用settings.ensure_api_base_url_in_db(session)迁移现有安装的 api_base_urlserver/api/install.py— 安装向导 settings_kv 新增api_base_urlserver/api/auth.py— 修改密码详情server/api/servers.py— 服务器创建/更新/删除/Agent操作详情server/api/scripts.py— 凭据/脚本操作详情server/api/assets.py— 平台/节点操作详情server/api/settings.py— 设置/调度/预设/重试操作详情server/api/webssh.py— WebSSH 连接/断开详情server/api/sync_v2.py— 文件操作详情server/api/agent.py— 长任务回调详情server/background/script_execution_flush.py— 执行刷新详情server/application/services/auth_service.py— 登录/TOTP/Token/WebSSH令牌详情server/application/services/script_service.py— 脚本/凭据/执行详情server/application/services/sync_engine_v2.py— 文件推送详情
MCP
mcp/Nexus_server.py— deploy: git pull 先于 gate check + origin/main
技术细节
agent_version由 Agent 心跳时写入(如"2.0.0"),未安装 Agent 时为Noneagent_api_key_set仍保留在安装命令上下文中使用(检测是否生成了 Key,是安装的前提条件)API_BASE_URL是全局设置(来自.env的NEXUS_API_BASE_URL),不是服务器字段- 前端通过
GET /api/servers/meta/api_base_url获取值,缓存到_apiBaseUrl变量 api_base_url加入DB_OVERRIDE_MAP后,设置页面可查看/修改,MySQL 中的值会覆盖.env- 启动迁移逻辑:若 MySQL settings 表无
api_base_url行但有.env值,自动插入(仅一次) - 前端 ACTION_NAMES 映射覆盖所有已知 action 类型,未知 action 仍显示原始英文值
- 历史数据(已存入 MySQL 的 detail)不会追溯更改,仅新操作生效
- MCP deploy 流程:git pull → gate check → supervisorctl restart
- install.sh sudo 兼容:
id -u == 0时SUDO="",否则检查sudo可用性;$SUDO mkdir -p /opt/nexus-agent+$SUDO chown给当前用户 → 后续 venv/pip 无需 sudo;$SUDO tee /etc/systemd/system/nexus-agent.service+$SUDO systemctl处理 systemd 操作 - install.sh venv
set -e兼容:首次python3 -m venv加2>/dev/null || true,允许在缺python3-venv时失败不退出;然后检查.venv/bin/activate是否存在,不存在则$SUDO apt-get install python3-venv后重试
需要迁移/重启
- 是:后端 Python 需重启(新端点 + 启动迁移逻辑 + DB_OVERRIDE_MAP 变更)
- 否:无数据库 schema 迁移(仅向 settings 表插入一行)
验证方式
- 选择未安装 Agent 的服务器 → "安装 Agent" 按钮可点击 ✅
- 选择已安装 Agent 的服务器 → "升级 Agent" 按钮可点击 ✅
- 审计日志页面操作列显示中文 ✅
- 新操作审计日志详情显示中文 ✅
- MCP deploy 工具流程正确(git pull 先于 gate check)✅
- 详情面板:有 agent_api_key 的服务器 → "远程安装"按钮可用 ✅
- 详情面板:无 API Key 的服务器 → 显示"请先生成 Key"警告 ✅
- 设置页面 → 基础设施区块显示"主站对外 URL" ✅
- 启动日志 → 显示 "Migrated api_base_url to MySQL settings table" ✅
- 非 root 用户远程安装 Agent → install.sh 自动使用 sudo,
/opt/nexus-agent创建成功 ✅ - root 用户远程安装 Agent → install.sh 无 sudo 前缀,行为不变 ✅
- 缺 python3-venv 的 Ubuntu → install.sh 自动 apt-get install python3-venv 后重试 ✅
进度条
☑实现 ☑WSL验证 ☑审计8步 ☑部署 ☑健康检查 ☑浏览器验证 ☑changelog