部署
构建与发布
sh
bun run build # tsc -b && vite build
bun run deploy # bun run build && wrangler deployvite build 把 SPA 输出到 dist/,@cloudflare/vite-plugin 再把 Worker 绑定到 worker/index.ts。wrangler deploy 会上传两者,SPA 通过 wrangler.jsonc 中 assets.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.jsonbun run typecheck 也封装了同一命令。
单独执行迁移
InitPage 会对你的 D1 直接执行 SCHEMA_STATEMENTS。如果你更喜欢迁移文件:
sh
bunx wrangler d1 migrations apply lumen-db --local
bunx wrangler d1 migrations apply lumen-db --remotemigrations/ 中的 0001_init.sql 与 SCHEMA_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 对象。