00 / 00

Cloudflare Workers 部署

用 Worker 的 D1 binding 部署 01MVP,并为受信任的 Node 服务提供数据库代理。

Cloudflare 路径运行同一套 TanStack Start、oRPC、认证和业务代码。Worker 通过 DB binding 访问 D1,不需要数据库连接串或连接池。

配置 D1 binding

products/01mvp/apps/web/wrangler.jsonc 中保留数据库名称和 ID:

{
  "d1_databases": [
    {
      "binding": "DB",
      "database_name": "your-production-db",
      "database_id": "<database-id>",
      "migrations_dir": "../../packages/db/migrations",
      "migrations_pattern": "**/migration.sql"
    }
  ]
}

新产品应创建自己的 D1 数据库并替换这些生产标识,不要复用 01MVP 的数据库。

Migration

vpr @01mvp/product#db:generate
vpr @01mvp/product#db:deploy

先部署 migration,再部署读取新 schema 的代码。远端命令只操作当前 wrangler.jsonc 指向的 D1,运行前要确认目标账号和数据库名称。

Secret 与部署

如果没有 Node/Docker 运行时访问 D1,可以不启用数据库代理 token。需要代理时设置:

vp exec wrangler secret put D1_PROXY_TOKEN --config products/01mvp/apps/web/wrangler.jsonc

然后执行产品部署命令:

vpr @01mvp/product#deploy:cf

/_internal/d1 只接受携带正确 Bearer token 的服务端 POST 请求,并有请求体、SQL 长度和 batch 数量限制。浏览器代码不应知道这个 token。

验证

curl -fsS https://<your-domain>/api/health
curl -I https://<your-domain>/
curl -I https://<your-domain>/auth/login

再用真实浏览器检查登录、后台和保留的付费能力。未授权请求访问 /_internal/d1 应返回拒绝状态,而不是查询结果。

如果以后完全迁移到 Cloudflare,只需停止 Node 部署和代理调用;Worker 内的业务代码继续通过 DB binding 访问同一个 D1。

这篇文档有问题?