Files
meida/docs/前置开通清单-云资源与资质.md

148 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 前置开通清单:云资源与资质(个人开发者版 v2)
> 创建日期:2026-08-14 | **v2 修订:2026-08-15(需求变更:个人开发者主体降级路线)**
>
> **v2 变更原因**:App 为个人开发,腾讯云短信签名需要企业/个人主体资质材料,办不下来;前期用户量小,COS 对象存储暂无必要。整体策略从"腾讯云全家桶"降级为"**华为 AGC + 一个发信邮箱**",其余全部本机/本地承载。
>
> **v2 三项需求变更**:
> 1. **登录兜底通道:短信验证码 → 邮箱验证码**(个人邮箱 SMTP 授权码即可,零成本、零审核)
> 2. **主登录通道维持华为账号登录**(已查证:个人开发者可用"标准登录",见 §1)
> 3. **对象存储:COS 四桶 → 服务器本地磁盘**(文件存后端 data 目录,后端生成访问 URL)
>
> **数据库说明**(原清单本就不含云数据库):PostgreSQL 16 已运行在 WSL 内,零云依赖、零费用,**无需任何动作**。不切 SQLite 的理由见 §4。
---
## 0. 总览:现在真正要办的外部事项只剩两件
| # | 事项 | 成本 | 审核周期 | 状态 |
| --- | --- | --- | --- | --- |
| A | 华为开发者账号 + AGC 创建应用 + 开通 Account Kit | 免费 | 实名认证 1~3 天 | ⬜ |
| B | 一个发信邮箱的 SMTP 授权码(QQ/163/Gmail 均可) | 免费 | 即时(5 分钟) | ⬜ |
**已从清单移除**(原 v1 的 §1、§2 整节):腾讯云账号/实名/短信套餐包/短信签名/验证码模板/CAM 子账号/COS 四桶 —— 全部后移到"有真实用户量、需要公网部署"时再评估(见 §5)。
---
## 1. 华为开发者后台 + Account Kit 🔴 主登录通道(唯一必办外部事项)
**对应**:`T-P1-12/13`(华为账号登录)、用户系统 §2.1。
**个人开发者可用性结论(2026-08 查证)**:Account Kit 权限分级——
| 能力 | 个人开发者 |
| --- | --- |
| **华为账号标准登录**(获取 UnionID / 昵称 / 头像) | ✅ 可用 |
| 静默登录(自动授权) | ✅ 可用 |
| 一键登录(获取手机号)+ UnionID | ❌ 仅企业 |
| 获取收货地址等高级权限 | ❌ 仅企业 |
我们只需要 UnionID 做账号映射(`id_user_identity`,后端 `packages/identity/huawei.py` 已实现),**标准登录完全够用,不需要手机号**。
| # | 事项 | 要点 | 完成 |
| --- | --- | --- | :---: |
| 1.1 | 注册华为开发者账号(个人类型) | 身份证实名认证;审核 1~3 天 | ⬜ |
| 1.2 | AGC 创建应用 | 包名用最终包名 `com.xiangsilian.app`(上架后难改);拿到 App ID | ⬜ |
| 1.3 | 开通 Account Kit | AGC「我的项目 → 添加服务」,选华为账号(标准登录即可,**不要**申请"获取手机号"权限——那是企业专属,申请必拒) | ⬜ |
| 1.4 | **证书指纹录入** | 调试证书 SHA256 必须配到 AGC(DevEco Studio 自动签名后,在 AGC「应用信息 → 证书指纹」处粘贴),否则真机拉不起授权页 | ⬜ |
| 1.5 | 发布证书指纹 | 上架时再办(发布证书申请时一并录入 AGC)——**注意漏配的表现是"调试包登录正常、发布包登录失败"** | ⬜ 后置 |
| 1.6 | Push Kit | 继续后置(通知授权默认关闭,`TD-17`),联调期再开 | ⬜ 后置 |
**验收**:用调试证书签名的 App 能拉起华为授权登录页,授权后拿到 UnionID 并映射到 `id_user_identity`。
---
## 2. 邮箱验证码(兜底登录通道,替代原短信方案)🟡 5 分钟办完
**对应**:`T-P1-12b/12c` 需求改写(原短信任务 → 邮箱任务)、`FR-ACC-14`。
**方案**:任一个人邮箱开启 SMTP 服务拿"授权码",后端用它发验证码邮件。
| # | 事项 | 要点 | 完成 |
| --- | --- | --- | :---: |
| 2.1 | 选一个发信邮箱 | 推荐 QQ 邮箱或 163(国内到达率高、授权码机制成熟);Gmail 也行但国内服务器投递慢 | ⬜ |
| 2.2 | 开启 SMTP 拿授权码 | QQ:设置 → 账号 → 开启 SMTP 服务 → 生成授权码;163 同理 | ⬜ |
| 2.3 | 授权码落位 | **只写后端仓库 `.env`**(已 gitignore):`SMTP_HOST` / `SMTP_PORT(465)` / `SMTP_USER` / `SMTP_PASS`(授权码)/ `MAIL_FROM` | ⬜ |
**量级评估**:个人邮箱 SMTP 每日发信上限约百封级(QQ/163),验证码场景(每用户登录 1~2 封)前期绰绰有余;日发信超限或到达率不稳时,再换免费档邮件 API(Resend/SendGrid/阿里邮件推送),代码侧只是换一个 `EmailSender` 实现。
**防刷参数不变**(`FR-ACC-14` 原样沿用,键前缀从 `sms:` 改 `email:`):同邮箱 60s 内 1 条、1 小时 ≤5、24h ≤10;同 IP 24h ≤20;同设备 24h ≤10。
**验收**:后端 `.env` 配好后,向自己的另一个邮箱发一封验证码邮件,能收到。
---
## 3. 文件存储:服务器本地磁盘(替代 COS 四桶)—— 无需办理,代码侧改造
**方案**:四桶变四个本地目录,上传走后端、下载 URL 由后端签发:
```
/home/xsl/meida_data/
├── temp/ # 用户原图:2 小时定时清理(CR-02,celery beat 已有 io 队列可挂)
├── user/ # 用户内容
├── kb/ # 知识素材(白底图等)
└── report/ # 报告产物(长图等)
```
- **上传**:客户端 `POST /api/v1/storage/upload`(multipart,带鉴权)——不再"直传+预签名",应用服务器中转;前期流量小,无压力
- **下载**:后端签发短期带签名 URL(复用现有 `CosSigner` Protocol 的位置换 `LocalStorageDriver` 实现,业务代码零改动)
- **回迁路径**:`CosSigner` Protocol 保留,未来用户量上来切回 COS 只需换实现 + 搬数据,业务代码不动
**v1 骨架不受影响**:FE 当前照片键本来就是模拟的(`report_photo/{userId}/{随机}.jpg`),本地驱动下这些键直接对应 `meida_data/` 下的文件路径,行为一致。
---
## 4. 数据库:无需任何动作(且不建议切 SQLite)
- PostgreSQL 16 + pgvector **已经在 WSL 内运行**,承载全部迁移(0001~0006)与 32 维检索,零云依赖、零费用
- **不切 SQLite**:检索域(`packages/retrieval`)依赖 pgvector 做向量近邻搜索,SQLite 无等价物——切换等于大重构 + 检索能力回退成暴力扫描;而本机 PG 不产生任何费用,切了没有任何收益
- 真要减负的时机是公网部署时:CVM 自托管 PG 或云数据库,到时再议
---
## 5. 移除/后移项汇总(对照 v1)
| 原 v1 清单项 | 处置 | 理由 |
| --- | --- | --- |
| 腾讯云账号 + 实名认证 | **移除** | 随短信/COS 整体暂缓 |
| 短信套餐包 / 签名 / 模板 | **移除,需求变更为邮箱验证码**(§2) | 个人主体办不下签名 |
| 子账号 + CAM 最小授权 | 后移 Phase 5 | 腾讯云暂缓后无对象可授权 |
| COS 四桶 + temp 桶 2 小时生命周期实测 | **后移,需求变更为本地磁盘**(§3) | 前期用户量小;2 小时清理改 celery 定时任务 |
| AGC 应用 / 证书指纹 / Account Kit | **保留**(§1,唯一必办) | 华为账号是主登录通道 |
| Push Kit | 保留后置 | 不变 |
---
## 6. 需求变更引发的代码任务(后续排期,不在本清单内办)
| 任务 | 内容 | 影响面 |
| --- | --- | --- |
| E1 后端:邮箱登录 | `sms_login.py` → `email_login.py`:`SmsSender` Protocol → `EmailSender`(SMTP 实现 + `FakeEmailSender`);手机号正则 → 邮箱正则;`union_id` 前缀 `"phone:"` → `"email:"`;Redis 键 `sms:*` → `email:*`;路由与错误码文案同步 | `packages/identity`,设计上零耦合华为通道,改动封闭 |
| E2 后端:本地存储驱动 | `QcloudCosSigner` → `LocalStorageDriver`(同 Protocol);新增 multipart 上传端点;temp 目录 2 小时清理任务挂 celery beat | `packages/storage` |
| E3 FE:登录页邮箱输入 | 登录页手机号输入框 → 邮箱输入框 + 验证码(当前 FE 只有 dev-token 调试登录,正式登录 UI 本就是待办) | `pages/LoginPage` |
| E4 文档同步 | Sprint 执行计划 v1.1 / 开发任务拆解 v1.5 中 `T-P1-12b/12c`(短信)、`T-P1-04/27`(COS)的任务表述按本变更改写 | `docs/` |
---
## 办理顺序与完成标志
```
今天 :2.1 → 2.2 → 2.3(邮箱授权码,5 分钟)
今天 :1.1(华为开发者注册提交,等审核 1~3 天)
审核通过后:1.2 → 1.3 → 1.4(AGC 应用 + Account Kit + 调试指纹)
```
**整体完成标志**(两条全绿即本清单关闭):
- [ ] 调试证书 App 拉起华为授权页,拿到 UnionID
- [ ] 测试邮箱收到验证码邮件
---
## 附:办理记录(办理时填写)
| 日期 | 事项 | 结果 / 备注 |
| --- | --- | --- |
| 2026-08-15 | 1.2 AGC 创建应用 | ✅ App ID `6917613748100335131`,包名 `com.xiangsilian.app`(与工程 `AppScope/app.json5` 核对一致)。App ID 无需写入代码,登记备查(后续接 Push Kit 时才用于 module.json5 的 client_id 配置) |
| 2026-08-15 | 工程签名现状核查 | ⚠️ `build-profile.json5` 的 signingConfigs 为空(从未做过 IDE 自动签名,CLI 构建均为 unsigned 包)。**开通 Account Kit 前必须先做自动签名**:DevEco Studio → File → Project Structure → Signing Configs → 勾选 Automatically generate signature(需登录华为开发者账号)→ 生成调试证书后提取 SHA256 指纹录入 AGC |
| | | |