云计算与部署云部署决策
云部署决策
先确认 Bun 在目标平台扮演运行时、构建工具还是包管理器
最后更新于
先回答一个问题
“平台支持 Bun”可能只表示它能执行 bun install,不等于线上请求由 Bun 运行。部署前先确认构建环境与请求运行时分别是什么。
| 目标平台 | Bun 的实际角色 | 推荐入口 | 关键边界 |
|---|---|---|---|
| Docker / Cloud Run / ECS / Kubernetes | 容器内真实运行时 | bun run src/index.ts | 监听平台端口,处理信号、探针和资源限制 |
| AWS Lambda 容器 | Bun + Lambda Web Adapter | 容器镜像 | 适配事件模型;官方示例使用 PORT=8080 |
| Vercel Functions | Bun runtime(bunVersion) | 支持的框架入口 | 不支持 Bun.serve;Next.js 仍由 Turbopack/Webpack 打包 |
| Cloudflare Workers | 包管理器/本地工具 | bunx wrangler deploy | 线上运行时是 workerd,不能假设存在 Bun.* |
| 静态站点/CDN | 构建工具 | bun run build | 线上只托管产物,不运行 Bun 进程 |
不要用本地成功推断平台兼容
本地 bun run dev 成功,只证明本机工具链可用。部署验收必须在目标运行时检查启动、网络、文件系统、原生依赖、信号、超时和扩缩容行为。
选择路径
容器与编排
Docker 镜像、非 root、端口、探针、优雅退出和密钥。
Serverless 与边缘
Lambda、Vercel、Workers 的运行时差异与 AI 流式请求。
生产工程基线
TypeScript、CI、依赖安全、环境变量与发布门禁。
AI 应用生产化
流式输出、工具调用、观测、安全和评测。
平台实操
部署到 AWS Lambda
容器镜像 + Lambda Web Adapter,服务监听 8080。
部署到 Vercel
bunVersion 开启 Bun runtime,Next.js 的额外脚本。
部署到 Cloudflare Workers
Bun 管工具链,workerd 跑线上;Wrangler 全流程。
平台无关的发布门禁
- 固定 Bun 版本或可控版本范围,并提交
bun.lock。 - 使用
bun install --frozen-lockfile --production构建生产依赖。 - 在与生产相同的镜像中运行类型检查、测试和冒烟测试。
- 以非 root 用户运行,保持根文件系统与本地状态可替换。
- 配置就绪、存活、启动探针,且不要共用一个含义模糊的
/health。 - 从密钥服务注入凭据;不写入镜像、日志或 Agent 上下文。
- 验证 SIGTERM、滚动发布、失败回滚和数据库迁移顺序。
官方参考:Bun Docker guide、Bun deployment guides、Cloudflare Wrangler。