docs: 前置开通清单 v2——个人开发者降级路线

需求变更(个人主体办不了短信签名、前期无 COS 必要):
- 登录兜底通道:短信验证码 → 邮箱验证码(个人邮箱 SMTP 授权码,
  零成本零审核;防刷参数 FR-ACC-14 原样沿用,键前缀 sms:→email:)
- 主登录通道维持华为账号:查证 Account Kit 权限分级——个人开发者
  可用标准登录(UnionID/昵称/头像),仅"一键登录取手机号"企业专属;
  我们只需 UnionID,标准登录够用
- COS 四桶 → 服务器本地磁盘(meida_data/ 四目录,上传走后端 multipart,
  下载走短期签名 URL;CosSigner Protocol 保留,回迁只换实现)
- 数据库:PG 已在 WSL 运行零费用,无需动作;明确不切 SQLite
  (retrieval 依赖 pgvector,切换=重构+能力回退)

清单从"腾讯云全家桶"收缩为两件必办:华为 AGC + 发信邮箱授权码。
登记代码侧后续任务 E1~E4(邮箱登录/本地存储驱动/FE 登录 UI/文档同步)
This commit is contained in:
xsl
2026-08-15 18:49:55 +08:00
parent 33624a7650
commit 67d906248b
+109 -54
View File
@@ -1,85 +1,140 @@
# 前置开通清单:云资源与资质(本机开发期间并行办理)
# 前置开通清单:云资源与资质(个人开发者版 v2)
> 创建日期:2026-08-14 | 性质:**行动清单**(照着办,办完打勾)
> 创建日期:2026-08-14 | **v2 修订:2026-08-15(需求变更:个人开发者主体降级路线)**
>
> **为什么有这份清单**:开发策略是"本机开发完成、腾讯云部署放最后"。但以下三项**有审核周期或属于边开发边对接的配置**,必须现在启动,否则会在 Sprint 0 出口(双登录通道)和 Sprint 4(真机联调)反向卡住开发进度。
> 它们只是"开通 + 拿到凭证",**不涉及任何应用部署**,成本接近零。
> **v2 变更原因**:App 为个人开发,腾讯云短信签名需要企业/个人主体资质材料,办不下来;前期用户量小,COS 对象存储暂无必要。整体策略从"腾讯云全家桶"降级为"**华为 AGC + 一个发信邮箱**",其余全部本机/本地承载。
>
> **不在本清单内的**(避免混淆范围):
> - CVM/TKE、CLB、域名 + HTTPS、CDN 全量、CLS、压测 —— 全部归 Phase 5 部署
> - 真实环境红线验证(临时桶 2 小时实测、AI 标识元数据经 CDN 存活、天御误杀率)—— 归 Sprint 1/5 的专项验证任务
> - 本机开发的一切(PG/Redis/GPU/LLM 调用)—— 不需要任何云资源
> **v2 三项需求变更**:
> 1. **登录兜底通道:短信验证码 → 邮箱验证码**(个人邮箱 SMTP 授权码即可,零成本、零审核)
> 2. **主登录通道维持华为账号登录**(已查证:个人开发者可用"标准登录",见 §1)
> 3. **对象存储:COS 四桶 → 服务器本地磁盘**(文件存后端 data 目录,后端生成访问 URL)
>
> **数据库说明**(原清单本就不含云数据库):PostgreSQL 16 已运行在 WSL 内,零云依赖、零费用,**无需任何动作**。不切 SQLite 的理由见 §4。
---
## 1. 腾讯云账号 + 实名 + 短信签名/模板审核 🔴 最先办(有审核周期)
## 0. 总览:现在真正要办的外部事项只剩两件
**对应**:`T-P1-12b/12c`、`TD-32`(短信是 V1 登录兜底通道,且是被刷时唯一直接现金损失项)
| # | 事项 | 成本 | 审核周期 | 状态 |
| --- | --- | --- | --- | --- |
| 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.2 | 购买国内短信套餐包 | 最小档即可(验证码短信一条几分钱),目的是拿到发送资格 | ⬜ |
| 1.3 | **申请短信签名** | 签名内容与主体资质材料一致(App 名称/公司名等,以腾讯云审核要求为准);**审核有周期,被驳回按驳回原因补材料重提** | ⬜ |
| 1.4 | 申请验证码模板 | 登录验证码类型;模板变量只留 `{1}`(验证码),不含营销语 | ⬜ |
| 1.5 | 创建子账号 + CAM 最小授权 | 只授 SMS 与 COS 相关权限;**不用主账号密钥** | ⬜ |
| 1.6 | SecretId/SecretKey 落位 | **只写后端仓库 `.env`**(已 gitignore + CI 双密钥扫描);文档仓库 `reference/` 禁止出现密钥 | ⬜ |
| 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`),联调期再开 | ⬜ 后置 |
**验收**:用测试手机号在腾讯云控制台试发一条模板短信,能收到。
**开发对接参数**(实现 `T-P1-12c` 防刷时按此配置,源:`FR-ACC-14`):同号 60s 内 1 条、1 小时 ≤5、24h ≤10;同 IP 24h ≤20;同设备 24h ≤10。
**验收**:用调试证书签名的 App 能拉起华为授权登录页,授权后拿到 UnionID 并映射到 `id_user_identity`。
---
## 2. COS 四桶创建 🔴 一并办(空桶成本 ≈ 0)
## 2. 邮箱验证码(兜底登录通道,替代原短信方案)🟡 5 分钟办完
**对应**:`T-P1-04`(开通部分)、`TD-03`、`T-P1-27`(直传联调时再对细节)
**对应**:`T-P1-12b/12c` 需求改写(原短信任务 → 邮箱任务)、`FR-ACC-14`。
**方案**:任一个人邮箱开启 SMTP 服务拿"授权码",后端用它发验证码邮件。
| # | 事项 | 要点 | 完成 |
| --- | --- | --- | :---: |
| 2.1 | 确定地域 | **四桶 + 未来的 CVM/CDN 同地域**(内网直连、免流量费);定了就不要换 | ⬜ |
| 2.2 | 创建 `meida-temp` | 临时桶:**生命周期规则 = 2 小时清理**(`CR-02` 人脸原图不落盘的兜底,上线红线);私有读写 | ⬜ |
| 2.3 | 创建 `meida-user` | 用户内容桶:私有读写(结果图走预签名 URL,`NFR-SEC-02`) | ⬜ |
| 2.4 | 创建 `meida-kb` | 知识素材桶(白底图等) | ⬜ |
| 2.5 | 创建 `meida-report` | 报告产物桶(长图等) | ⬜ |
| 2.6 | 顺手做一次 2 小时实测 | 往 `meida-temp` 传一个文件,2 小时后确认被自动清理 —— **这正是 Sprint 0 出口条件之一**,今天办今天验,别留到上线前 | ⬜ |
| 2.7 | 记录四桶名称与地域 | 归档到团队可见处;后端 `.env` 后续按此填 | ⬜ |
| 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` | ⬜ |
**暂不需要做**:CORS 跨域、直传预签名策略 —— 等 `T-P1-27` 开发时边联调边配。
**量级评估**:个人邮箱 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. 华为开发者后台(应用 + 证书指纹双套配置)🟡 本周内
## 3. 文件存储:服务器本地磁盘(替代 COS 四桶)—— 无需办理,代码侧改造
**对应**:`T-P1-12/13`(华为账号登录)、用户系统 §2.1;`T-P0-17`(端侧骨架)的前置
| # | 事项 | 要点 | 完成 |
| --- | --- | --- | :---: |
| 3.1 | AGC 创建应用 | 包名定为最终包名(上架后难改);拿到 App ID | ⬜ |
| 3.2 | 申请/确认调试证书与发布证书 | **两套都要** | ⬜ |
| 3.3 | **证书指纹双套录入** | 调试证书与发布证书的 SHA256 指纹**都要**配到 AGC;**漏配发布指纹的表现是"调试包登录正常、发布包登录失败"**,这种错最晚才暴露 | ⬜ |
| 3.4 | 开通 Account Kit | 华为账号授权登录(UnionID/OpenID 映射 `id_user_identity`) | ⬜ |
| 3.5 | Push Kit 可后置 | 通知授权默认关闭(`TD-17`),Sprint 0 不阻塞,联调期再开 | ⬜ |
**验收**:用调试证书签名的 App 能拉起华为授权登录页(发布通道的验证归 Phase 5)。
---
## 4. 办理顺序与完成标志
**方案**:四桶变四个本地目录,上传走后端、下载 URL 由后端签发:
```
今天 :1.1 → 1.2 → 1.3(短信签名审核周期最长,最先提交)
:2.1 → 2.2~2.5(半小时的事)→ 2.6 挂着等 2 小时
本周内 :3.1 ~ 3.4(AGC 配置)
签名审核通过后 :1.4 模板 → 1.5/1.6 密钥落位 → 控制台试发验收
/home/xsl/meida_data/
├── temp/ # 用户原图:2 小时定时清理(CR-02,celery beat 已有 io 队列可挂)
├── user/ # 用户内容
├── kb/ # 知识素材(白底图等)
└── report/ # 报告产物(长图等)
```
**整体完成标志**(三条全绿即本清单关闭):
- [ ] 测试手机号收到验证码短信
- [ ] 四桶就位且 `meida-temp` 实测 2 小时清理生效
- [ ] 调试证书 App 拉起华为授权页
- **上传**:客户端 `POST /api/v1/storage/upload`(multipart,带鉴权)——不再"直传+预签名",应用服务器中转;前期流量小,无压力
- **下载**:后端签发短期带签名 URL(复用现有 `CosSigner` Protocol 的位置换 `LocalStorageDriver` 实现,业务代码零改动)
- **回迁路径**:`CosSigner` Protocol 保留,未来用户量上来切回 COS 只需换实现 + 搬数据,业务代码不动
> 办理过程中的凭证(App ID、SdkId、签名 ID、桶名/地域等非机密信息)建议登记到本文末尾的"办理记录"表;**密钥类一律只进后端 `.env`**。
**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
- [ ] 测试邮箱收到验证码邮件
---