00 / 00

Zeabur 部署

在 Zeabur 运行 01MVP Docker 服务,并通过受保护的 Cloudflare 代理访问 D1。

Zeabur 只承载 Web/Node 容器,数据库仍然是 Cloudflare D1。应用不需要 Zeabur PostgreSQL 服务,也不配置 DATABASE_URL

部署结构

浏览器 -> Zeabur Web -> HTTPS D1 binding 代理 -> Cloudflare D1

这个结构适合保留现有 Zeabur 部署,同时让 Zeabur 和 Cloudflare Worker 使用同一份数据。它会增加一次 Zeabur 到 Cloudflare 的网络往返;当站点完全迁到 Cloudflare 后,可以删除 Node 代理路径。

环境变量

在 Zeabur Web 服务配置通用生产变量,并额外设置:

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

同一个 token 还要配置为 Cloudflare Worker secret。它只能存在于两个服务端环境,不能进入 VITE_*、浏览器 bundle、日志或仓库。

Zeabur 运行时不需要 Cloudflare 账号 API token。代理在 Worker 内使用 D1 binding,避免把 Cloudflare 管理权限交给应用容器。

部署顺序

  1. 在 Cloudflare D1 应用已提交的 migration。
  2. 部署 Cloudflare Worker,确认数据库代理和 /api/health 可用。
  3. 在 Zeabur 配置 D1_PROXY_URL 与 token。
  4. 推送目标分支,等待 Git 部署完成。
  5. 检查 Zeabur 域名的健康接口、登录和关键业务流程。

当前项目使用根目录 Dockerfile。生产密钥只在运行时注入,不作为 build arg 写进镜像历史。

故障排查

  • D1_PROXY_URL is not configured:Node 环境缺少代理地址。
  • D1 proxy request failed with 401/403:两端 token 不一致,重新生成并同时更新。
  • /api/health 数据库检查失败:先检查 Cloudflare Worker 和 D1,再检查 Zeabur 到代理域名的网络。
  • migration 后出现列不存在:确认 migration 已应用到与 wrangler.jsonc 相同的生产 D1。

需要 AI 操作 Zeabur 服务、域名或变量时,可以使用 Zeabur Agent Skills

这篇文档有问题?