00 / 00

部署指南

选择 Cloudflare、Zeabur 或 Docker,并正确迁移 D1、配置密钥和验证上线结果。

01MVP 的 Web 可以运行在 Cloudflare Workers 或 Node/Docker,主数据库统一使用 Cloudflare D1。

01 操作员推着产品小车通过部署、迁移和验证闸门

怎么选择

方式数据库适合场景
Cloudflare WorkersWorker 通过 DB binding 直连 D1海外用户为主、希望减少服务器运维
Zeabur DockerNode 通过受保护的 D1 binding 代理访问同一个 D1暂时保留现有 Zeabur 运行时或需要 Node 容器
自有 Docker默认同 Zeabur;国内部署时可实现普通 SQLite 适配器自有服务器、K8s、备案或网络可控要求

当前 01mvp.com 运行在 Zeabur,cf.01mvp.com 运行在 Cloudflare。它们不是两套产品,也不维护两份数据。

为什么是 D1 / SQLite

当前数据量、访问量和写入并发不需要 PostgreSQL 的高并发写入、扩展和专属事务能力。D1 能减少独立数据库服务与连接池运维,也为以后把站点完全收敛到 Cloudflare 留出直接路径。

国内自托管不等于继续使用 D1。应用保持 SQLite 语义,因此可以换成普通 SQLite,配合持久卷、备份和单写节点运行。只有真实需求已经超过这个边界时,再评估 PostgreSQL。

部署顺序

  1. 完成代码检查和构建。
  2. 审查已经生成并提交的 SQLite migration。
  3. 运行 vpr @01mvp/product#db:deploy,先把 migration 应用到远端 D1。
  4. 部署 Cloudflare Worker;如果 Node 需要访问 D1,先确认代理端点和 token 已配置。
  5. 部署 Zeabur/Docker。
  6. 检查两个域名的 /api/health、公开页、登录和关键业务流程。

不要让应用启动过程自动修改生产 schema,也不要把 D1 代理 token、支付密钥、认证 secret 写进镜像或仓库。

生产环境变量

通用必需项:

BETTER_AUTH_SECRET=<long-random-secret>
VITE_WEB_URL=https://example.com
VITE_SERVER_URL=https://example.com
AUTH_COOKIE_PREFIX=example

Node/Docker 额外需要:

D1_PROXY_URL=https://<cloudflare-domain>/_internal/d1
D1_PROXY_TOKEN=<server-only-random-token>

Cloudflare Worker 使用 DB D1 binding,并把同一个 D1_PROXY_TOKEN 配成 Worker secret。这个代理只给受信任的服务端使用,不能暴露到浏览器。

上线检查

vpr @01mvp/product#lint
vpr @01mvp/product#type-check
vpr @01mvp/product#test
vpr @01mvp/product#build

然后按部署目标阅读 Cloudflare WorkersZeaburDocker

这篇文档有问题?