Malla文档

部署

Cloudflare 上的环境、绑定、密钥、迁移和部署脚本。

开发者指南

六个 Worker,每个都在自己的 wrangler.jsonc 中配置了 staging 和 production 环境。每个配置的顶层是本地开发和 e2e 设置,从不部署。包含资源、绑定和密钥的完整检查清单见 docs/DEPLOY.md。

环境

Worker预发布生产环境
realtimemalla-realtime-stagingmalla-realtime
apimalla-api-stagingmalla-api
sitesmalla-sites-stagingmalla-sites
webmalla-web-stagingmalla-web
runnermalla-runner-stagingmalla-runner
mcpmalla-mcp-stagingmalla-mcp

Neon 分支与环境一一对应:dev 支撑预发布,main 支撑生产环境。service binding 始终指向同一环境。

发版

  1. 密钥

    用 wrangler secret put --env <env> 设置每个 Worker 的密钥。共享的值(内部密钥、realtime 令牌密钥)在各 Worker 之间必须一致。密钥从不由脚本设置。

  2. 迁移

    在部署需要这些迁移的 api 之前,按顺序把 packages/db/migrations 应用到该环境的 Neon 分支。迁移只能向前。

    bash
    read -rs DATABASE_URL && export DATABASE_URL   # the branch's connection string
    pnpm --filter @malla/db db:migrate
    unset DATABASE_URL
    
  3. 部署

    脚本会构建工作区包和 Nuxt 应用,然后按依赖顺序部署,确保每个 service binding 的目标先存在。

    bash
    pnpm 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
    
    部署顺序
    realtime
    runner
    api
    mcp
    sites
    web
  4. 冒烟检查

    加载应用、登录、打开一个站点(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>