六个 Worker,每个都在自己的 wrangler.jsonc 中配置了 staging 和 production 环境。每个配置的顶层是本地开发和 e2e 设置,从不部署。包含资源、绑定和密钥的完整检查清单见 docs/DEPLOY.md。
环境
| Worker | 预发布 | 生产环境 |
|---|---|---|
| realtime | malla-realtime-staging | malla-realtime |
| api | malla-api-staging | malla-api |
| sites | malla-sites-staging | malla-sites |
| web | malla-web-staging | malla-web |
| runner | malla-runner-staging | malla-runner |
| mcp | malla-mcp-staging | malla-mcp |
Neon 分支与环境一一对应:dev 支撑预发布,main 支撑生产环境。service binding 始终指向同一环境。
发版
密钥
用
wrangler secret put --env <env>设置每个 Worker 的密钥。共享的值(内部密钥、realtime 令牌密钥)在各 Worker 之间必须一致。密钥从不由脚本设置。迁移
在部署需要这些迁移的 api 之前,按顺序把
packages/db/migrations应用到该环境的 Neon 分支。迁移只能向前。bashread -rs DATABASE_URL && export DATABASE_URL # the branch's connection string pnpm --filter @malla/db db:migrate unset DATABASE_URL部署
脚本会构建工作区包和 Nuxt 应用,然后按依赖顺序部署,确保每个 service binding 的目标先存在。
bashpnpm deploy:check # build and validate every Worker, upload nothing pnpm deploy:staging # sh scripts/deploy.sh staging pnpm deploy:production # sh scripts/deploy.sh production部署顺序 realtimerunnerapimcpsitesweb冒烟检查
加载应用、登录、打开一个站点(realtime socket 会连接)、上传一张图片、发布到预发布环境、提交一个表单,并用
wrangler tail观察 api 的定时任务。
回滚
- 站点:发布是不可变的,因此回滚只是把指针切换到更早的
publishId。无需重新部署。使用编辑器发布弹出框中的 Recent publishes,或调用POST /sites/:siteId/rollback;参见回滚。 - Worker:用 Wrangler 回滚;当一个改动涉及多个 Worker 时,按部署的相反顺序回滚。密钥和绑定不随代码一起进行版本管理。
- 数据库:在执行有风险的迁移之前,在 Neon 中为
main创建分支或快照;需要撤销时恢复即可。 - Durable Object 迁移无法回滚;绝不要把发版回退到某次 Durable Object 迁移之前。
bash
(cd apps/<app> && npx wrangler rollback --env <env>)
npx wrangler versions list --env <env>