feat: 支持 v2 插件、独立前端和签名制品发布 (#130)

* feat: 支持 v2 插件、原生扩展与签名发布

* fix: 修复测试

* feat: 增强宿主 SDK、运行观测与制品维护能力

* feat: 增强文件传输、配置观测与本地开发能力

* feat: 支持 SSE 实时事件流并完善开发脚手架

* feat: 完善长连接鉴权复核与关闭回收

* feat: 增强生命周期与任务关闭可靠性

* feat: 收紧健康检查契约并补齐前端与真实网络验收

* feat: 增加SDK溯源与离线更新工具并验证跨版本兼容

* feat: 增加持久化业务示例与受控 Python 交付

* feat: 增加统一运行诊断与多worker状态观测

* feat: 增加固定目标发布等待与自动验收

* fix: 修复多环境插件部署前缀与代理配置不一致

* fix: 修复测试
This commit is contained in:
insistence
2026-10-09 23:49:45 +08:00
committed by GitHub
parent a89aec54aa
commit 4bd83bc7cd
287 changed files with 41945 additions and 331 deletions
+62 -12
View File
@@ -39,30 +39,46 @@ ruoyi --help
### 2.2 安装依赖
MySQL 版本:
使用 Python 3.10–3.13,先进入后端目录,再创建并激活虚拟环境。以下以标准库 `venv` 为例;已有环境也可直接使用,不要求特定环境名称或安装路径。
Windows PowerShell:
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
```
macOS / Linux(Bash、Zsh):
```bash
cd ruoyi-fastapi-backend
pip3 install -r requirements.txt
python3 -m venv .venv
source .venv/bin/activate
```
创建环境时使用已安装的受支持 Python 解释器。激活后,下文统一使用 `python` 和 `python -m pip`,确保安装依赖与执行命令使用同一个环境。每次打开新终端,都应先激活该环境。
以下安装及 `ruoyi` 命令适用于 Windows PowerShell、macOS 和 Linux;只有涉及 Shell 语法的命令才分平台列出。
MySQL 版本(在后端目录执行):
```bash
python -m pip install -r requirements.txt
```
PostgreSQL 版本:
```bash
cd ruoyi-fastapi-backend
pip3 install -r requirements-pg.txt
python -m pip install -r requirements-pg.txt
```
说明:
- `requirements*.txt` 已包含当前项目自身安装项 `.`,因此不需要额外执行 `pip install -e .`
- `requirements*.txt` 已包含当前项目自身安装项 `.`,因此不需要额外执行 `python -m pip install -e .`
- 安装完成后,`ruoyi` 会随当前 Python 环境一起可用
如果本地使用 Conda,推荐先进入项目环境再执行命令:
安装完成后检查 CLI:
```bash
conda activate ruoyi-fastapi
cd ruoyi-fastapi-backend
ruoyi --help
```
@@ -261,6 +277,40 @@ ruoyi plugin test demo --env=dev
`install-deps` 是真实 Python/npm 依赖安装的唯一显式入口。文本 TTY 下可省略 `--yes`,CLI 会先输出依赖安装计划和策略判定,再询问是否执行;非 TTY、JSON 输出或 CI 场景应传 `--yes`,否则会由策略返回确认阻断。
插件诊断包可输出完整 JSON 或保存到文件:
```bash
ruoyi plugin diagnose demo --env=dev --output=json
ruoyi plugin diagnose demo --env=dev --output-file=demo-diagnose.json
```
包中的 `runtime` 汇集发布目标、各 worker 实际加载版本、连接与任务、激活健康历史及配置修订摘要。此命令不启动插件或重新执行健康检查;顶层 `ok` 保持静态诊断含义,运行态结果需单独判断。CLI 从 Redis 读取宿主快照,并保留缺失、过期或不可用状态,不能据此认定服务器没有连接或全部健康。快照范围、时效、脱敏和计数说明见[统一运行诊断](plugin_development.md#122-统一运行诊断)。管理端同一内容位于“诊断包 → 原始数据”。
完成制品目标选择、通过进程管理器启动全部 worker 后,可用固定目标等待命令作为发布流水线门禁:
```bash
ruoyi plugin release wait demo DIGEST --generation SELECTED_GENERATION --expected-workers 2 --timeout 300 --interval 2 --env prod --output json
ruoyi plugin release wait demo DIGEST --generation SELECTED_GENERATION --expected-workers 2 --timeout 0 --env prod --output json
```
插件 ID、`DIGEST`、`--generation` 和 `--expected-workers` 均必填。`DIGEST` 是 64 位小写 SHA256;`SELECTED_GENERATION` 使用最近一次 `select`、`enable` 或 `rollback` 返回的 32 位新代际,不能复用该变更输入的 `--expected-generation`。worker 数量必须与发布记录一致,并填写实际部署要求的数量。命令只读,不需要维护确认,也不会启动进程或切换目标。
`--timeout` 默认为 300 秒,`--interval` 默认为 2 秒;前者必须为有限非负数,后者必须为有限正数。`--timeout 0` 只查询并断言一次,未就绪立即返回 `not_converged`。非零超时约束核心轮询,配置加载和模块导入发生在此前;单次状态查询最多 10 秒,并受剩余轮询预算约束,取消采用异步协作方式。
JSON 只输出一个最终对象,包含固定 `target`、脱敏的 `lastObserved`、查询次数、耗时及 `reason`;没有逐轮进度输出。只有 `converged` 返回 `0`;超时、目标变化、停用、worker 故障或观测不可用返回 `50`,CLI 取消返回 `cancelled` 和 `50`。CLI 参数校验失败返回 `invalid_arguments` 和 `2`;缺少必填参数或未知选项由命令行解析器直接以 `2` 拒绝。`lastObserved` 是最后一次可用观测,超时或查询失败时可能来自此前且已过期的轮次,不能仅依据其中的 `active` 判定成功。自动决策应以最终退出码和 `ok/reason` 为准;`release status` 的 `ok` 仍只表示查询成功,不能代替该门禁。完整判定与原因表见[制品发布与验收](plugin_development.md#153-停机维护准备证据与目标选择)。
独立 v2 bundle 工程可离线检查、更新复制到 `web/vendor` 的桥接 SDK:
```bash
ruoyi plugin sdk check plugin-projects/report_center --output=json
ruoyi plugin sdk update plugin-projects/report_center --dry-run --output=json
ruoyi plugin sdk update plugin-projects/report_center
```
这些命令不接受 `--env`,也不读取宿主数据库配置或执行插件代码。来源默认为相邻前端目录,可用 `--frontend-root PATH` 或 `RUOYI_PLUGIN_FRONTEND_ROOT` 指定。`check` 仅在版本、来源记录及文件摘要与选定宿主一致(`current`)时返回 0;过期副本、本地修改或缺少记录返回非零,适合纳入构建检查。`protocolCompatible` 只比较桥协议,不表示业务功能已经验收。
`update` 是显式写入命令,先备份再替换三个 SDK 文件。默认拒绝覆盖本地 SDK 修改或旧工程的未跟踪副本;需要纳管时先审阅 `update --force --dry-run`,再执行 `update --force`。备份位于工程 `.plugin-sdk-backups/`,业务代码保持原样。更新后应重建 bundle 并执行兼容测试;不会下载依赖、签名发布或改变运行中的插件。完整状态与摘要规则见开发手册第 16.1 节。
### 4.7 Shell Completion 初始化
```bash
@@ -522,7 +572,7 @@ ruoyi tui --env=prod
- 当前 TUI 是只读巡检工作台,页面内的写操作入口会通过确认弹窗或向导二次确认
- 页面切换快捷键为 `D/A/O/B/C/T/G/P/E`,分别对应总览、应用、运维、数据库、缓存、任务、代码生成、参数配置、加密
- 通用快捷键包括 `R` 刷新、`Q` 退出、`S` 聚焦侧栏、`←/→` 切换焦点或区域、`J/K` 滚动、`PgUp/PgDn` 翻页、`Home/End` 首尾跳转
- 若当前 Python 环境缺少 TUI 依赖,`ruoyi tui` 会返回失败结果并提示重新执行 `pip install -r requirements.txt` 或 `pip install -r requirements-pg.txt`
- 若当前 Python 环境缺少 TUI 依赖,`ruoyi tui` 会返回失败结果并提示重新执行 `python -m pip install -r requirements.txt` 或 `python -m pip install -r requirements-pg.txt`
## 6. 危险命令清单
@@ -842,8 +892,8 @@ ruoyi ops health --env=dev --output=json
请依次确认:
- 当前目录是否为 `ruoyi-fastapi-backend`
- 当前 Python 环境是否执行过 `pip install -r requirements.txt` 或 `pip install -r requirements-pg.txt`
- 当前终端是否真的使用了安装依赖的那个 Python/Conda 环境
- 当前 Python 环境是否执行过 `python -m pip install -r requirements.txt` 或 `python -m pip install -r requirements-pg.txt`
- 当前终端是否真的使用了安装依赖的那个 Python 环境
### 8.2 命令报数据库或 Redis 连接失败