Sync: add ses and networking notes

This commit is contained in:
2026-04-24 20:38:20 +08:00
parent e4f6f463cb
commit 7903d703b9
12 changed files with 925 additions and 9 deletions

View File

@@ -82,5 +82,74 @@ fonrey/
## 7. 外部服务 (External Services)
- **监控**Sentry (已配置用于错误追踪) 。
- **对象存储**Cloudflare R2 (用于房源/客源图片与附件) 。
- **地图服务**:待规划 (本期不涉及底层地图建设) 。
- **对象存储**Cloudflare R2 (用于房源/客源图片与附件;同时用于客户端安装包存储与分发) 。
- **地图服务**:待规划 (本期不涉及底层地图建设) 。
---
## 8. 客户端发布技术栈 (Desktop Client Stack)
> 本节对应 PRD`Project/fonrey/PRD/发布管理/客户端发布管理模块PRD.md`
> 所有决策均已在 PRD 中完成选型论证,此处为最终结论,直接执行。
### 8.1 客户端框架
- **框架**[Electron](https://www.electronjs.org/)(当前稳定版)
- **内核**Electron 捆绑的 Chromium版本随 Electron 版本固定,不依赖系统浏览器)
- **主进程语言**Node.jsJavaScript / TypeScript
- **渲染层**:直接加载 Fonrey Web 应用 URL100% 复用现有 HTMX + Alpine.js + Tailwind CSS 技术栈,**渲染层不新增任何框架**
### 8.2 自动更新
- **更新库**`electron-updater``electron-builder` 生态,成熟方案)
- **更新包存储**Cloudflare R2复用现有存储账号新增 `releases` bucket
- **更新包分发**Cloudflare CDN 加速(复用现有 CDN 配置)
- **更新检测端点**Django 后端新增 `/api/client/updates/latest/`GET公开接口无需登录
- **检测时机**:客户端启动时 + 每 4 小时轮询一次
- **更新模式**:后台静默下载,下载完成后提示用户重启;服务端可将版本标记为"强制更新",客户端不可跳过
### 8.3 安装包构建与签名
- **构建工具**`electron-builder`(输出 NSIS 安装包 `.exe` + 便携版 `.zip`
- **目标平台**Windows x64优先ARM64 按需支持
- **代码签名**EV 代码签名证书DigiCert 或 Sectigo由 CI/CD 在构建时自动签名,消除 Windows SmartScreen 警告
- **CI/CD**待确认平台GitHub Actions / Jenkins构建流水线负责编译 → 签名 → 上传 R2 → 调用发布 API
### 8.4 Django 后端新增模块
在现有 `fonrey/apps/` 目录下新增:
```
apps/
└── release/ # 客户端发布管理
├── models.py # ClientRelease版本号、类型、状态、下载URL、SHA256、更新日志
├── views.py # 公开更新检测 API + 管理后台 CRUD 视图
├── urls.py
└── admin.py
```
**`ClientRelease` 模型关键字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| `version` | CharField | SemVer 格式,如 `1.2.3`,唯一索引 |
| `platform` | CharField | 平台标识,如 `win32` |
| `arch` | CharField | CPU 架构,如 `x64` |
| `release_type` | CharField | `normal` / `force`(强制更新) |
| `status` | CharField | `draft` / `published` / `archived` |
| `download_url` | URLField | EXE 安装包 Cloudflare R2 URL |
| `portable_url` | URLField | ZIP 便携版 URL可选 |
| `checksum_sha256` | CharField | 安装包 SHA256 校验值 |
| `min_required_version` | CharField | 低于此版本的客户端强制升级(可选) |
| `release_notes` | TextField | Markdown 格式更新日志 |
| `published_at` | DateTimeField | 发布时间 |
**`ClientRelease` 属于 `shared_apps`(公共 Schema**,不属于租户隔离范围,所有租户共享同一套客户端版本。
### 8.5 客户端关键约定
- **❌ Do NOT** 在 Electron 渲染进程中使用 `nodeIntegration: true`,保持 Web 沙箱安全
- **❌ Do NOT** 在客户端内嵌任何业务逻辑或本地数据库,所有业务数据由服务端提供
- **❌ Do NOT** 在客户端内新开多个 `BrowserWindow` 加载内部页面,所有导航在单窗口 SPA 内完成(外部链接除外,需在系统浏览器打开)
- 客户端版本号必须与服务端 `ClientRelease.version` 严格一致,通过 `package.json``version` 字段统一管理
- 更新包下载完成后,必须校验 SHA256 与服务端返回值一致后才能执行安装,防止下载损坏或中间人攻击