# 项目交付状态一页纸 这份只看当前状态,不记录开发历史。更详细的背景和概念看 `项目总览.md`。 ## 项目是什么 这是 SimCAE 自动升级、授权、版本发布和崩溃报告服务的一套客户端 SDK + 服务端后台。 ```text update-client/ Launcher / Updater / Bootstrap、SDK 打包、客户端接入文档 update-server/ FastAPI 后端、Vue 管理后台、Docker 离线部署包 ``` ## 当前可以交付什么 - Windows/Linux 客户端升级运行时:`Launcher`、`Updater`、`Bootstrap`。 - 客户端 SDK 包:包含运行程序、配置模板、接入文档、最终客户端打包脚本。 - 服务端 Docker 离线部署包:包含 API 镜像、管理后台、MinIO、compose 文件、配置模板和 Manifest 签名密钥。 - 管理后台:基于 pure-admin-thin / Vue3 / Element Plus / TypeScript / Vite。 - 后端:基于 FastAPI,已经按 routes / services / repositories / schemas / core 分层,并支持 JWT / RBAC。 - 后端自动化测试:pytest,覆盖登录/JWT、License/设备、更新检查、发布和崩溃报告核心流程。 ## 已完成的核心功能 - 应用、渠道、版本发布、策略管理。 - License 授权、设备登记、设备数限制。 - Manifest 生成、SHA-256 文件校验、私钥签名、公钥验签。 - 客户端检查更新、下载、安装、健康检查、失败回滚。 - 升级日志、下载日志、管理员审计日志。 - 发布清单 `发布清单.txt` / `release_manifest.txt`,支持选择发布哪些文件、排除哪些文件。 - 发布压缩包支持 zip、tar.gz、tgz、tar.bz2、tbz2、rar。 - 发布任务后台化:上传完成后,服务端后台继续处理,页面轮询任务状态。 - 崩溃报告上传、查询、文件下载和符号包上传接口。 - Git 标签清单:管理后台策略可控制 Launcher 是否生成 `tags.txt`;服务端用 `GITEA_TOKEN` 拉取仓库 tags,客户端永远拿不到 token,只拿整理后的文本。 ## 当前要特别注意 - `keys/manifest_private_key.pem` 必须在真实服务端部署包里,但不能进 Git、不能给客户端、不能公开传播。 - 客户端 SDK 里的 `manifest_public_key.pem` 必须和服务端私钥配套。 - `config/server_config.json` 会编进客户端程序;改服务端地址后必须重新编译 Launcher / Updater / Bootstrap。 - `GITEA_TOKEN` 只允许放在服务端 `.env`,不要写进客户端配置、不要给 Launcher、不要提交 Git。 - `app_config.json` 首次启动会导入当前用户配置区,非空配置导入后会清空为 `{}`。 - Manifest 缓存和设备身份等运行态文件默认在当前用户数据目录,不再默认写安装目录。 - 公网部署前仍建议改默认 token/password、配置 HTTPS、限制 MinIO 控制台暴露范围、收紧 CORS。 ## 打包入口 客户端 SDK: ```powershell cd update-client .\scripts\package-sdk.ps1 -SourceDir .\out\bin\Release -OutputDir .\dist\UpdateClientSDK -ZipFile .\dist\UpdateClientSDK.zip -SdkVersion 0.1.0 ``` 服务端 Docker 离线包: ```bash cd update-server bash ./scripts/package-offline-server.sh --version 0.1.0 --output-dir ./dist/SimCAEServerDockerPackage ``` 服务端自动化测试: ```bash cd update-server ./venv/bin/python3 -m pytest -q ``` ## 还不算完成的事情 - 真实 Linux 版 SimCAE 主程序还没有交付联调。 - 公网生产级安全加固还未全部自动化,例如登录限流、HTTPS 自动化、默认密钥强制替换。 - 数据库迁移仍是 `tables.sql` + 手写兼容逻辑,长期维护可考虑 Alembic。