部署到 Cloudflare Workers:D1 或 Postgres + Hyperdrive

把 ShipAny(TanStack Start)SaaS 跑在 Cloudflare Workers 上——零运维用 D1,已有数据库就通过 Hyperdrive 连接 Postgres。包含部署步骤、验证方法,以及迁移 shipany.ai 时踩过的坑。

最后更新: 2026年10月8日

shipany.ai 本身就运行在 Cloudflare Workers 上:一个 ShipAny TanStack 应用,通过 Hyperdrive 连接已有的 Postgres 数据库。本文介绍两种支持的方案、部署方法,以及那次迁移中踩过的坑。

两种数据库方案

D1Postgres + Hyperdrive
适合新项目,零外部基础设施已有 Postgres(RDS、Neon、Supabase、自建),或需要 Postgres 特性
绑定d1_databases → DBhyperdrive → HYPERDRIVE
表结构wrangler d1 migrations apply --remotepnpm db:migrate 直连 Postgres(不经过 Hyperdrive)
打包不打包 Postgres 驱动保留 Postgres 驱动

数据库由 wrangler.jsonc 中的 vars.DATABASE_PROVIDER(d1 或 postgresql)决定,构建时据此决定把哪个驱动打进 Worker。

部署

模板自带 deploy-cloudflare Agent 技能,可以自动完成以下全部步骤。手动部署的话:

  1. 创建数据库绑定——npx wrangler d1 create <name>;用 Postgres 则执行 npx wrangler hyperdrive create <name> --connection-string="postgres://…"。
  2. 填写 wrangler.jsonc——Worker 名称、显式的 compatibility_date、nodejs_compat、vars(DATABASE_PROVIDER、VITE_APP_URL、VITE_APP_NAME),以及第 1 步的绑定。
  3. 设置密钥——npx wrangler secret put AUTH_SECRET(加密配置时再加 CONFIG_ENCRYPTION_KEY)。
  4. 把构建期公开变量写进 .env.production——VITE_APP_URL 会在构建时写入代码包。
  5. 部署——pnpm run cf:deploy 会先加载 .env.production,用 cloudflare_module 预设构建,再执行 wrangler deploy。

零停机迁移已有域名

如果你的网站已经通过 Cloudflare DNS 运行在别处,完全不用改 DNS。为 example.com/* 添加一条 Worker 路由,Worker 会在请求到达原服务器之前接管流量。回滚时删除这条路由,几秒内流量就回到原服务器。验证完支付和登录之前,保留原来的部署。

踩过的坑

  • Can't set compatibility date in the future——构建时会填入本机日期。在比 UTC 快的时区,这个日期对 Cloudflare 来说可能是「明天」。请显式设置 compatibility_date。
  • 用 Hyperdrive 时后台配置悄悄丢失——Hyperdrive 模式下没有 DATABASE_URL,旧版配置读取逻辑会把它当成「没有数据库」,返回空配置。页面照常渲染,但支付和 OAuth 都失效了(提示「No payment provider configured」)。请确认配置读取逻辑能识别 HYPERDRIVE 绑定。
  • 交易类应用要关闭 Hyperdrive 查询缓存——默认会缓存读查询最多 60 秒,订单状态、积分余额、后台配置都可能看起来是旧的。Hyperdrive 的加速来自连接池而不是缓存:npx wrangler hyperdrive update <id> --caching-disabled=true。
  • 复用生产数据库时不要执行迁移。 如果表是由其他系统创建的,Drizzle 的迁移记录是空的,db:migrate 会尝试从头建表。
  • AUTH_SECRET 要和之前的部署保持一致,否则所有用户都会退出登录。

每次部署后都要验证

状态码 200 不代表一切正常。请检查:

  1. 首页引用的 /assets/* 文件和新构建一致(确认流量真的到了 Worker)。
  2. /api/config/public 返回你配置的开关(stripe_enabled、google_auth_enabled 等),并且和之前的部署完全一致。
  3. 数据库连接来自 Cloudflare 的 IP 段(Hyperdrive),npx wrangler tail 没有异常。
  4. 登录和每个支付渠道的一笔真实付款都能走通。

相关阅读

更多集成

用 ShipAny 快速上线你的 AI SaaS

登录、支付、积分、多语言和管理后台都已内置——从可上线的模板开始,专注做你的产品。