Skip to content

部署

构建与发布

sh
bun run build       # tsc -b && vite build
bun run deploy      # bun run build && wrangler deploy

vite build 把 SPA 输出到 dist/,@cloudflare/vite-plugin 再把 Worker 绑定到 worker/index.tswrangler deploy 会上传两者,SPA 通过 wrangler.jsoncassets.not_found_handling: "single-page-application" 统一交给前端路由处理。

类型检查

工程包含两个 TypeScript 项目(tsconfig.app.json 覆盖 src/, tsconfig.worker.json 覆盖 worker/)。可以这样依次运行:

sh
tsc -p tsconfig.app.json && tsc -p tsconfig.worker.json

bun run typecheck 也封装了同一命令。

单独执行迁移

InitPage 会对你的 D1 直接执行 SCHEMA_STATEMENTS。如果你更喜欢迁移文件:

sh
bunx wrangler d1 migrations apply lumen-db --local
bunx wrangler d1 migrations apply lumen-db --remote

migrations/ 中的 0001_init.sqlSCHEMA_STATEMENTS 一致; 后续 schema 变更请按顺序在该目录下追加。

自定义域名

wrangler.jsonc 中加入 routes:

jsonc
"routes": [
  { "pattern": "mail.example.com", "custom_domain": true }
]

Prism 应用中的 redirect URI 必须与同一域名一致;切换域名时, 请通过 InitPage 或 PUT /api/init/config 同步更新 prism_redirect_uri

运维提示

  • bunx wrangler tail 观察运行时日志,包括入站解析失败和被拒绝的收件人。
  • KV 中的 init:configured 是首启 setup 的开关。删除它会重跑 InitPage, 但不会删除已有的 schema。
  • 邮箱体量较大时,建议把原始 .eml 备份到另一个 R2 bucket。D1 只保存元数据, 邮件正文真正的事实来源是 R2 对象。