feat: 完善服务端工程化、发布流程和自动化测试

This commit is contained in:
2026-07-16 08:36:12 +00:00
parent 0b71e8d024
commit 5d7aa560e5
29 changed files with 822 additions and 7987 deletions
@@ -40,6 +40,16 @@ bash ./scripts/package-offline-server.sh --version 0.1.0 --output-dir ./dist/Sim
- admin-ui/:新版管理后台前端源码。
- scripts/package-offline-server.sh:生成服务端 Docker 离线部署包。
本地自动化测试:
```bash
cd update-server
./venv/bin/pip install -r requirements-dev.txt
./venv/bin/python3 -m pytest -q
```
当前测试会自动创建临时数据库、临时签名密钥和临时存储目录,不会改动本地 `mini.db`、`.env` 或真实上传文件。覆盖范围包括管理员登录/JWT、应用创建、License 创建设备登记、更新检查、发布入库/文件存储回退、崩溃报告上传幂等和管理员查询。
本地源码启动:
```bash
@@ -301,6 +301,8 @@ CLIENT_API_TOKEN=SimCAEClientToken2026
2. 上传压缩发布包,支持 zip、tar.gz、tgz、tar.bz2、tbz2、rar
```
点击“发布版本”后,浏览器会先把文件上传到服务端。上传完成后,服务端会创建后台发布任务,继续执行解压、Manifest 校验、数据库写入和 MinIO 上传;管理页面会轮询并显示任务状态。这样可以减少大版本发布时长时间占用同一个 HTTP 请求的问题。
压缩发布包上传到服务器后,服务端会先解压,再校验是否包含 `.env``RELEASE_MAIN_EXECUTABLE` 指定的主程序路径。Windows 默认是:
```text
+28
View File
@@ -12,7 +12,9 @@
- 运行服务:Uvicorn。
- 请求模型和参数校验:FastAPI 自带的 Pydantic 体系。
- 管理后台前端:GitHub 上的 pure-admin-thin / vue-pure-admin 生态,技术栈是 Vue3、Element Plus、TypeScript、Vite。
- 前端包管理:统一使用 npm 和 package-lock.json,不再维护 pnpm-lock.yaml。
- 对象存储:MinIO。
- 自动化测试:pytest。测试用例会在临时目录里创建隔离数据库、临时 Manifest 私钥、临时上传目录和崩溃报告目录。
后端工程化参考方向:
@@ -113,9 +115,35 @@ app/
- `app/repositories/`:管理后台已迁移接口的数据库读写层,route 不再直接拼 SQL 或打开数据库连接。
- `app/api/router.py`:统一注册基础路由。
- `main.py`:已经压缩为服务入口,只保留生命周期、MinIO 初始化、静态挂载和全局客户端鉴权。
- `tests/`:自动化测试入口,覆盖管理员登录/JWT、License/设备登记、更新检查、版本发布、崩溃报告上传幂等和管理员查询。
当前业务接口路径保持不变,避免影响 Launcher、Updater 和已部署管理页面。
## 自动化测试
第一次运行测试前安装开发依赖:
```bash
cd update-server
./venv/bin/pip install -r requirements-dev.txt
```
运行测试:
```bash
./venv/bin/python3 -m pytest -q
```
当前测试不连接真实 MinIO,也不使用真实 `mini.db`。测试夹具会自动创建临时数据库和临时目录,并生成临时 RSA 私钥,因此适合在提交前快速回归。
当前覆盖范围:
- 管理员默认账号初始化、用户名密码登录、JWT 签发。
- 应用创建、License 创建、设备登记和设备数占用。
- 客户端更新检查和版本策略响应。
- 版本发布事务、文件 hash 入库、MinIO 不可用时本地存储回退。
- 崩溃报告上传、同一 `clientReportId` 幂等重复上传、管理员查询。
## 后续迁移路线
后续不建议一次性重写全部后端,而是按下面顺序迁移: