docs/aliyun-d1-checklist.md
# Star GEO · D1 阿里云开通与配置清单(对照执行)
> 用途:在 **wm-geo.com** 上线前,把 FC / 数据库 / 缓存 / 存储 / 网络 / 观测一次配齐。
> 备案、ICP、算法备案等你自行办理,本清单不写流程性材料,只写 **控制台里要点哪里、规格怎么选、和代码怎么接**。
**开发进展摘要(Cursor 会话)**:与本清单互补的落地项、迁移与待办见 [`会话开发纪要-Cursor-2026-05.md`](./会话开发纪要-Cursor-2026-05.md)(本地 Postgres / Stripe / CI / 审计等)。
**产品验收边界**(哪些链路已可演示、P0 仍缺什么):见 [`当前交付边界.md`](./当前交付边界.md)。
**应用侧 env / Cron / 安全头**(控制台开通后填哪些变量、「不配则怎样」):见 [`上线配置清单.md`](./上线配置清单.md) · [`.env.production.example`](../.env.production.example) · [`README.md`](../README.md) · [`业务跑通手册.md`](./业务跑通手册.md)。
### 本周期已落地(代码侧,控制台仍须自行勾选)
| 项 | 状态 | 对照 |
|----|------|------|
| Prisma 迁移 / 本地库 | 已落地 | 纪要 · `npm run db:migrate`;§2 本地 `psql` / migrate |
| 周扫 Cron | 已落地 | `GET /api/v1/cron/weekly-scan` + `CRON_SECRET`;§5 定时触发器 |
| E2E(含 health / OTP / plans) | 已落地 | `e2e/api-smoke.spec.ts`、`e2e/login-otp-flow.spec.ts`;§11 `npm run build` |
| 健康检查 | 已落地 | `GET /api/v1/health`(`schemaVersion` / `summary`);§11 自检 |
| 手机 OTP(开发联调) | 已落地 | `/login` UI + `otp/send`·`verify`;§7 开发环境日志 / `devCode` |
| OTP(开发联调) | 已落地 | `/login` UI + `otp/send`·`verify`;§7 开发环境日志 / `devCode` |
| 公开价目 / Stripe Checkout | 已落地 | `GET /api/v1/public/plans`、`/pricing` + Checkout;§10 微信支付仍待商户号 |
| **生产 APP_URL checklist** | 已落地 | `GET /api/v1/app/deploy/app-url-status` + Settings「公网/域名部署指引」卡;§0.5 APP_URL 与 §6 CDN 对齐 |
| **FC 部署 readiness checklist** | 已落地 | `GET /api/v1/admin/deploy-readiness-status` + Admin「FC 部署 readiness 运维」卡 + `GET demo/deploy-readiness-ops-steps` · step 7k + full-chain-hub merge |
| **域名 DNS 解析 checklist** | 已落地 | `GET /api/v1/app/deploy/dns-resolution-status` + Settings「域名 DNS 解析指引」卡;§6 CDN+DNS 对齐 |
| **CDN HTTPS / TLS 证书 checklist** | 已落地 | `GET /api/v1/app/deploy/cdn-https-status` + Settings「CDN HTTPS / 证书指引」卡;§6 443 探测 `GET /api/v1/health` |
| **health API 公网验收 checklist** | 已落地 | `GET /api/v1/app/deploy/health-api-public-status` + Settings「health API 公网验收指引」卡;§6 schemaVersion/summary/ok 契约 + E2E api-smoke 对齐 |
| **公网部署五件套汇总 checklist** | 已落地 | `GET /api/v1/app/deploy/deploy-readiness-status` + Settings「公网部署五件套汇总」卡(APP_URL+DNS+CDN+health API+真机 HTTPS 五子卡);§6 五件套对齐 · step 7l+7o merge |
| **full-chain-hub 纳入 deploy 五件套 step 合并** | 已落地 | `GET /api/v1/app/demo/full-chain-hub-steps` 含 step deploy_tenant_readiness_summary + checklist demo_script_full_chain_hub_deploy_four_piece_merge · step 11d+7l+7o merge |
| **FC env 写入后运维验收 checklist** | 已落地 | `GET /api/v1/admin/fc-env-post-write-acceptance-status` + Admin「FC env 写入后运维验收」卡 · §0.5 对照 · aliyun-d1-checklist 文档 step 扩面 |
---
## 0. 前置
- [ ] 阿里云账号已完成 **企业实名**(与公司主体一致)。
- [ ] 账户充值建议先 **≥ ¥500**(开通 PolarDB Serverless、Tair、少量 FC 调用)。
- [ ] 地域统一:建议 **华东 2(上海)** 或 **华北 2(北京)**(全栈同区,延迟与账单简单)。
---
## 0.5 生产 APP_URL 与 FC env(应用侧)
> 控制台 CDN 绑定域名前,先在 FC 环境变量写入与最终 **https://** 根地址一致的 `APP_URL` 与 `NEXT_PUBLIC_APP_URL`。
> 租户侧实时 checklist:`GET /api/v1/app/deploy/app-url-status` · Settings「公网/域名部署指引」卡 · 文档 [`/docs/deploy-config`](/docs/deploy-config)。
- [ ] **`APP_URL`**:生产 `https://wm-geo.com`(或实际控制台域名),**勿** localhost。
- [ ] **`NEXT_PUBLIC_APP_URL`**:与 `APP_URL` **同源**(OAuth 回跳、Stripe Checkout、E2E baseURL 对齐)。
- [ ] **`NEXT_PUBLIC_SITE_URL`**(推荐):sitemap / 匿名诊断 `shareUrl` / metadataBase;未配时回退 `APP_URL`。
- [ ] **微信 OAuth 回调**:默认 `{APP_URL}/api/v1/auth/wechat/callback`;须与微信开放平台备案域名一致。
- [ ] **支付 notify**:微信/支付宝 notify URL 默认 `{APP_URL}/api/v1/webhooks/...`;须 HTTPS 且公网可达。
- [x] **代码侧校验 MVP**:`lib/deploy/resolve-app-production-app-url-status.ts` + Settings 部署指引卡 + E2E `production-app-url-checklist-flow.spec.ts`。
- [ ] **FC env 写入后运维验收**(控制台 §5 填齐 env 后):
- [ ] 对照 `GET /api/v1/admin/fc-env-post-write-acceptance-status` checklist(DATABASE_URL / JWT_SECRET / CRON_SECRET / OSS / APP_URL 五项)。
- [ ] Settings「公网部署五件套汇总」卡与 `GET /api/v1/app/deploy/deploy-readiness-status` 五子卡 partial/ready。
- [ ] Settings「全链路演示 · 总入口」卡 step deploy_tenant_readiness_summary 与 checklist `demo_script_full_chain_hub_deploy_four_piece_merge` 对齐。
- [x] **代码侧 MVP**:`lib/admin/resolve-admin-fc-env-post-write-acceptance-status.ts` + Admin 运维卡 + E2E `demo-script-full-chain-hub-deploy-four-piece-fc-env-flow.spec.ts`。
**对照**:[`上线配置清单.md`](./上线配置清单.md) §0 站点 · [`.env.production.example`](../.env.production.example)。
---
## 1. 专有网络 VPC(若无)
- [ ] **VPC** 新建:IPv4 网段选 `172.16.0.0/16`(默认即可)。
- [ ] **交换机**:在同一可用区建 2 个子网(应用区 / 数据区可合一,小规模一条即可)。
- [ ] **安全组**(后面各产品复用或分建):
- PolarDB:仅允许 **FC 出口网段 / 固定 NAT** 或 **本机开发 IP** 访问 `5432`(生产勿对 `0.0.0.0/0` 开放)。
- Tair:仅允许 FC / 运维 IP 访问 `6379`。
- FC:通过 **函数访问 VPC 内网** 绑定上述安全组。
---
## 2. PolarDB PostgreSQL Serverless
- [ ] 产品:**云数据库 PolarDB** → **PostgreSQL 版** → **Serverless**。
- [ ] 规格:**最小 PCU(如 0.5)** 起步;**自动扩缩上限** 先锁 **≤ 4 PCU**(防周扫打满暴费)。
- [ ] 存储:按量计费即可;开启 **自动备份**(每日 + 保留 7–14 天)。
- [ ] 创建数据库:`wm_geo`,字符集 `UTF8`。
- [ ] 复制 **外网 / 内网连接串** 到项目 `.env` 的 `DATABASE_URL`(FC 跑在 VPC 内时用 **内网地址**)。
- [x] 本地执行:`npx prisma migrate dev` 或执行 `prisma/migrations` + `prisma/seeds/001_industries.sql`(`psql`)。→ [纪要 · 迁移](会话开发纪要-Cursor-2026-05.md)
**费用量级(参考)**:0.5 PCU 闲置 + 少量查询,首月常见 **¥80–¥200**;以控制台为准。
---
## 3. Tair(Redis 兼容)
- [ ] 产品:**云数据库 Tair(Redis 兼容)**。
- [ ] 架构:**高可用**;版本选 **Redis 6/7** 兼容即可。
- [ ] 规格:**1 GB** 起步(会话黑名单、限流计数、扫描缓存够用)。
- [ ] 参数:`maxmemory-policy` 建议 **volatile-lru** 或 **allkeys-lru**(按是否给 key 设 TTL 决定)。
- [ ] 白名单:同 PolarDB,仅 FC / 办公 IP。
- [ ] 记录 **连接地址、端口、密码** → 后续写入环境变量(如 `REDIS_URL` 或分拆 `TAIR_HOST` / `TAIR_PASSWORD`,在代码里拼)。
**用途对齐 PRD**:`jwt_blacklist`、`diag:anon:{ip}:{yyyymmdd}`、扫描结果 **24h 缓存** key。
---
## 4. OSS
- [ ] 产品:**对象存储 OSS** → 新建 Bucket:`wm-geo-prod`(名称全局唯一)。
- [ ] 读写权限:**私有**;通过 **STS 临时凭证** 或 **服务端签名 URL** 下载 PDF(勿把 Bucket 设公共读除非静态营销页)。
- [ ] **生命周期**:CSV/日志类可设 30 天转低频;PDF 报告按合规保留策略再定。
- [ ] RAM:创建 **OSS 专用 RAM 子账号**,只授予该 Bucket 的 `oss:*` 最小权限;**AccessKey 放 FC 环境变量**,勿进前端。
---
## 5. 函数计算 FC 3.0(Next.js)
- [ ] 产品:**函数计算 FC** → 创建 **Web 函数** 或 **自定义运行时**,选择官方 **Next.js** 模板(或 Serverless Devs 部署)。
- [ ] **绑定 VPC**:与 PolarDB、Tair 同 VPC,安全组放行出站。
- [ ] **环境变量**:`DATABASE_URL`、`JWT_SECRET`、`REDIS_URL`、`OSS_*`、`各 AI API Key`、`CRON_SECRET` 等(与 `.env.example` 扩展对齐)。
- [ ] **HTTP 触发器**:得到默认域名;后续与 CDN 域名绑定。
- [ ] **预留实例**(可选):给首页/核心 API **1–2 预留并发**,缓解冷启动(约 **¥30/月/量级**,以账单为准)。
- [x] **定时触发器**:周扫 `GET /api/v1/cron/weekly-scan`,Header 带 `CRON_SECRET`(与 PRD 一致)。→ 路由已部署,FC 控制台绑定见 [纪要](会话开发纪要-Cursor-2026-05.md)
---
## 6. CDN + HTTPS(wm-geo.com)
- [ ] **云解析 DNS**:为 `wm-geo.com`(及 `www` 若需要)添加 **A 或 CNAME** 指向 CDN/DCDN 分配域名;TTL 建议 600s 便于切换。
- [ ] **全站加速 DCDN** 或 **CDN**:源站指向 FC 域名;开启 **HTTPS**,上传证书或使用 **阿里云免费 DV 证书**。
- [ ] **回源 Host**:与 FC 触发器要求的 Host 一致,避免 404。
- [ ] **缓存策略**:`/api/*` **不缓存**;静态资源长缓存。
- [ ] **APP_URL 写回 FC**:CDN 证书生效后,将最终 `https://` 根地址写入 `APP_URL` 与 `NEXT_PUBLIC_APP_URL`(见 §0.5);Settings「公网/域名部署指引」卡应显示 **生产就绪**。
- [x] **代码侧 DNS 校验 MVP**:`lib/deploy/resolve-app-production-dns-resolution-status.ts` + Settings「域名 DNS 解析指引」卡 + E2E `production-dns-resolution-checklist-flow.spec.ts`;租户实时 checklist:`GET /api/v1/app/deploy/dns-resolution-status`。
- [x] **代码侧 CDN HTTPS 校验 MVP**:`lib/deploy/resolve-app-production-cdn-https-status.ts` + Settings「CDN HTTPS / 证书指引」卡 + E2E `production-cdn-https-checklist-flow.spec.ts`;租户实时 checklist:`GET /api/v1/app/deploy/cdn-https-status`(443 探测 health API + TLS 有效期)。
- [x] **代码侧 health API 公网验收 MVP**:`lib/deploy/resolve-app-production-health-api-public-status.ts` + Settings「health API 公网验收指引」卡 + E2E `production-health-api-public-probe-flow.spec.ts`;租户实时 checklist:`GET /api/v1/app/deploy/health-api-public-status`(443/同源探测 + schemaVersion/summary/ok 契约 · 对齐 `e2e/api-smoke.spec.ts`)。
- [x] **代码侧五件套汇总 MVP**:`lib/deploy/resolve-app-production-deploy-readiness-status.ts` + Settings「公网部署五件套汇总」卡 + E2E `production-deploy-readiness-summary-flow.spec.ts`;租户实时 checklist:`GET /api/v1/app/deploy/deploy-readiness-status`(聚合 APP_URL + DNS + CDN HTTPS + health API + 真机 HTTPS 五子卡 · step 7l+7o merge)。
- [x] **代码侧 full-chain-hub 五件套 merge MVP**:`lib/demo/resolve-demo-script-full-chain-hub-steps.ts` step deploy_tenant_readiness_summary + Settings 总入口五件套子卡 + E2E `demo-script-full-chain-hub-deploy-four-piece-fc-env-flow.spec.ts`(step 11d+7l+7o merge)。
- [x] **代码侧 wm-geo.com 真机 HTTPS 验收 checklist MVP**:`lib/deploy/resolve-app-production-mobile-browser-https-status.ts` + Settings「wm-geo.com 真机 HTTPS 验收指引」卡 + E2E `production-mobile-browser-https-checklist-flow.spec.ts`;租户实时 checklist:`GET /api/v1/app/deploy/mobile-browser-https-status`(Mobile Safari UA 根路径 HTTPS 探测 + iOS/Android/微信人工项 · step 7n merge)。
---
## 7. 短信 SMS(手机 OTP)
- [ ] 产品:**短信服务** → 申请 **签名**(公司名)与 **模板**(验证码变量 `{code}`)。
- [ ] 审核通过后,把 **TemplateCode**、**SignName** 写入服务端环境变量。
- [ ] 开发联调:使用控制台 **测试号码**。
- [x] **与 wm-geo 代码对齐**:`lib/auth/sms.ts` 使用官方 SDK `@alicloud/dysmsapi20170525`,`templateParam` 为 `{"code":"<验证码>"}`,须与控制台模板占位符一致;开发环境(`NODE_ENV!==production`)路由不写短信,仅打日志 OTP;`/login` 展示 `devCode`。
- [ ] **验证发送**:生产形态可在 FC 填齐 `.env.example` 四项后调用 `POST /api/v1/auth/otp/send`;或用阿里云控制台 **OpenAPI 调试** / CLI(`aliyun dysms SendSms`,勿把 AK 写入仓库或脚本入库)。
---
## 8. 日志服务 SLS + ARMS(可 D5–D6 再接)
- [ ] **日志服务 SLS**:为 FC 配置 **日志库**,采集 access / app log。
- [ ] **ARMS 应用监控**:接入 Node/Next 探针或 OpenTelemetry(按官方 Next 文档选一种)。
- [ ] 告警:5xx 比例、P99 延迟、PolarDB CPU、Tair 内存 **各一条简单告警** 即可。
---
## 9. 内容安全(生成模块 M2)
- [ ] 产品:**内容安全**(绿网)→ 开通 **文本检测** API。
- [ ] RAM 子账号最小权限;Key 放 FC 环境变量。
- [ ] 与 PRD 一致:`POST /api/v1/generate` 第一道机审走该 API。
---
## 10. 微信支付(商户平台侧)
- [ ] 微信 **商户号**、**API v3 Key**、**商户证书** 就绪后,配置回调 URL:`https://wm-geo.com/api/v1/subscriptions/wx/notify`(须 HTTPS)。
- [ ] FC 环境变量写入 **商户号、AppID、mchid、serial、私钥 PEM** 等(具体字段按微信支付 V3 SDK 要求)。
---
## 11. Day 1 结束自检(与启动套件对齐)
- [ ] `wm-geo.com` **HTTPS** 能打开占位或首页(iOS Safari / Android Chrome / 微信内置浏览器真机验收;代码侧 Mobile UA 探测见 §6 checklist MVP)。
- [ ] PolarDB / Tair / OSS **连通性** 从 FC VPC 内测通(可用临时诊断函数)。
- [ ] 6 家大模型 **API Key** 已拿到并写入环境变量。
- [x] Git 仓库已创建,本工程 `npm run build` 通过(CI `e2e.yml` 含 health / OTP smoke)。
---
## 12. 费用与「防暴费」开关小结
| 产品 | 防暴费建议 |
|-------------|------------|
| PolarDB | PCU **上限 ≤ 4**;周扫 **分批** |
| Tair | **maxmemory** + 淘汰策略;key 必须 **TTL** |
| FC | **单用户并发上限**;AI 调用 **Promise.allSettled** + 超时 |
| OSS | **生命周期**;禁止公共写 |
| 大模型 API | **按用户日配额** + 服务端缓存 |
---
若你希望 **下一步在代码里接 Tair / OSS SDK**,说明当前已选地域与是否走 VPC 内网,我可以按环境变量约定直接改 `wm-geo` 工程里的 `lib/` 封装与示例 API。