部署与安全清单
通过显式迁移、Cron、readiness、可信网络与生产安全控制部署 Web 和管理应用。
已与启动模板提交
2a1a04a同步。
请在应用本地可用后,把本页作为采用者的最后检查清单。目标不仅是“部署成功”,而是得到一个能够认证、收费、运维、恢复和管理,且没有开发捷径的版本。
选择部署形态
- Web 与管理控制台是两个独立构建,应使用不同来源;它们可以共享仓库、数据库、认证 secret 和版本 tag。
- 文档以 Vercel 为例,因为
vercel.json已配置 Cron;任何能提供 PostgreSQL、Redis、HTTPS、环境 secret 和认证调度器的 Node 平台都可使用。 - Serverless 流量使用连接池 PostgreSQL URL;供应商有需要时,迁移使用直连 URL。先迁移再发布代码,迁移不会自动放进 build。
- CSP 先用 report-only,观察 analytics、Turnstile、Stripe 与存储实际使用的 host,再决定何时 enforce。
可以上线的标准: 两个应用从同一版本构建;迁移已验证;/api/ready 健康;备份可恢复;Cron 与 Stripe webhook 完成真实测试;生产无 demo flag;只读/可写管理员权限符合预期。
将 Web 与 apps/admin 作为不同来源的独立服务部署。使用 Node >=20.19.0 <23 和 pnpm 10.22.0,运行 pnpm lint、pnpm test:cov、pnpm build,再显式执行 pnpm db:check:prod 与 pnpm db:migrate:prod。迁移绝不是自动 build 步骤。
生产必备控制
- 强
BETTER_AUTH_SECRET、正确 URL、生产 PostgreSQL,以及经过恢复演练的备份。 - Redis 分布式限流和明确可信的客户端 IP header/来源。
- 认证流程 Turnstile;关闭 demo 与本地认证链接日志。
CRON_SECRET,并每五分钟调用/api/cron/jobs(vercel.json已含计划)。- 启用计费时使用 Stripe live key、已验证 webhook、安全 Portal 与 Price ID。
- 启用存储时保持对象私有、最小权限凭据、正确 CORS 与短期签名 URL。
- 验证邮件域,并按所在地审查数据保留和法律策略。
/api/health 用于存活,/api/ready 用于部署就绪;后者检查环境、数据库、迁移、Redis 与队列,队列降级即使不阻断请求也需告警。
安全 header 包含生产 HSTS 和 report-only CSP 路径。先观察报告,再按分析、验证码、支付和存储 host 收紧策略。部署后 smoke-test 认证、组织隔离、结账/webhook、Cron、导出/删除与管理端 MFA。上线前阅读模板 DEPLOYMENT.md、docs/security-headers.md 和 .env.example。
当前版本还提供 Web、Admin、Worker、Content Studio 的加固镜像,以及汇总配置、容器、迁移、完整性、保留、测试和构建的 pnpm launch:check。请继续阅读容器与上线就绪并通过备份与恢复演练证明恢复能力。