Bolt.diy 迁移到 Cloudflare Containers

TL;DR

将 Hostinger VPS 上运行的 Bolt.diy (StackBlitz Labs 开源 AI 编程工具) 迁移到 Cloudflare Containers,释放 VPS 约 700MB 内存。通过 CF Containers 的 scale-to-zero 机制,闲置时零费用,访问时自动唤醒(2-3秒冷启动)。

现状:✅ 已完成。bolt.gottenergy.com 由 CF Container 提供服务,VPS 原容器已停止。AI 代码生成正常,文件写入问题是 Bolt.diy 上游 bug(VPS 和 CF 均有)。


🎯 背景:为什么需要这个

  • 需求:释放 Hostinger VPS 内存,为 OpenDroneMap + Blender 部署腾出空间
  • 卡点:VPS 15GB 内存被 18 个 app 吃满,Swap 全满。Bolt.diy 占用约 700MB-1GB,且有个 wrangler esbuild 进程长期占 15% CPU
  • 约束:不能影响 bolt.gottenergy.com 的正常访问,零停机迁移

✅ 前置条件

  • Cloudflare Workers Paid Plan ($5/月)
  • CF API Token (Workers Scripts:Edit + Containers:Edit + Workers Routes:Edit)
  • bolt.gottenergy.com 域名在 CF 托管
  • VPS SSH 访问权限
  • Wrangler CLI (VPS 上已安装 4.110.0)

🏗️ 最终架构

用户浏览器 → bolt.gottenergy.com
  → CF Workers (bolt-diy)
    → Durable Object (BoltContainer)
      → Firecracker 微虚拟机 (standard-1: 1 vCPU, 2GB)
        → ghcr.io/stackblitz-labs/bolt.diy:latest
          → wrangler pages dev (端口 5173)

与原来 VPS 上的区别:

  • 不再需要 Dokploy 管理
  • 闲置 10 分钟自动休眠,访问时唤醒(2-3秒)
  • 按 CPU 实际使用量计费,空闲零费用
  • 不再有 wrangler esbuild CPU 泄漏问题

🛠️ 部署步骤

第 1 步:查 VPS 当前 Bolt 配置

docker inspect gott-energy-boltdiy-t2ovpy-app-1 --format '{{json .Config.Env}}'
docker inspect gott-energy-boltdiy-t2ovpy-app-1 --format '{{json .Mounts}}'

第 2 步:创建 CF Container API Token

CF Dashboard → API Tokens → 自定义:

  • Gott Energy (Account): Workers Scripts:Edit, Containers:Edit
  • gottenergy.com (Zone): Workers Routes:Edit

第 3 步:安装依赖 + 初始化项目

export CLOUDFLARE_API_TOKEN=你的Token
mkdir -p /opt/cf-containers/bolt-diy/src
cd /opt/cf-containers/bolt-diy
npm init -y
npm install wrangler @cloudflare/containers@0.3.7

第 4 步:写 Dockerfile

FROM ghcr.io/stackblitz-labs/bolt.diy:latest
RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates && rm -rf /var/lib/apt/lists/*
ENV NODE_ENV=production
ENV PORT=5173
ENV HOST=0.0.0.0
ENV RUNNING_IN_DOCKER=true
ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt
ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
RUN npm install -g wrangler@4.44.0
EXPOSE 5173
CMD ["pnpm", "run", "dockerstart"]

第 5 步:写 wrangler.toml

name = "bolt-diy"
main = "src/index.ts"
compatibility_date = "2025-07-10"
compatibility_flags = ["nodejs_compat"]
 
[[containers]]
class_name = "BoltContainer"
image = "./Dockerfile"
instance_type = "standard-1"
 
[[durable_objects.bindings]]
class_name = "BoltContainer"
name = "BOLT"
 
[[migrations]]
tag = "v1"
new_sqlite_classes = ["BoltContainer"]

第 6 步:写 Worker 代码

import { Container, getContainer } from "@cloudflare/containers";
 
export class BoltContainer extends Container {
  defaultPort = 5173;
  sleepAfter = "10m";
}
 
export default {
  async fetch(request: Request, env: any): Promise<Response> {
    const instance = getContainer(env.BOLT, "default");
    return instance.fetch(request);
  },
};

第 7 步:部署

npx wrangler deploy

第 8 步:绑定域名

CF Dashboard → Workers & Pages → bolt-diy → Settings → Domains → 添加 bolt.gottenergy.com

第 9 步:停止 VPS 原容器

docker stop gott-energy-boltdiy-t2ovpy-app-1

↩️ 回滚 / 卸载

  • 回滚:Dokploy 重新 Start gott-energy-boltdiy-t2ovpy-app-1,CF Dashboard 切回原 DNS
  • 清理 CF:删除 Worker bolt-diy、Durable Object namespace、Container application
  • 验证回滚:bolt.gottenergy.com 恢复 VPS 服务

🔍 验证方法

  1. 页面可访问: curl -s -o /dev/null -w "%{http_code}" https://bolt.gottenergy.com → 200
  2. AI 可用: 登录后选择 DeepSeek → 发送 “Hello” → 收到回复
  3. CF 日志: npx wrangler tail 查看请求正常到达

🕳️ 踩过的坑


⚠️ 已知限制 / 副作用

  • 冷启动 2-3 秒: 闲置 10 分钟后容器休眠,首次访问有延迟
  • WebContainer 文件写入问题: Bolt.diy 上游 bug,工作台无法写入文件(VPS 和 CF 均有此问题)
  • 无本地 Ollama: 迁移后 127.0.0.1:11434 不再可用,用户需通过 API Key 使用云端模型
  • standard-1 规格: 1 vCPU + 2GB,高并发时可能需要升级

🔒 安全 & 成本速查

  • API Token: 独立创建 (bolt-diy-container),Worker Scripts + Containers + Routes
  • 月度成本: Workers Paid 0.000020/秒 + 内存 0.00000007/GB/秒)
  • 免费额度: 375 vCPU-分钟 + 25 GiB-小时 + 200 GB-小时

📌 待办 / 未来优化方向

  • 追踪 Bolt.diy 上游修复 WebContainer 文件写入问题
  • 评估是否需要升级到 standard-2 (1 vCPU + 6GB)
  • 其他低频应用 (Vaultwarden, Linkstack, AnythingLLM) 同样适合迁 CF Containers

📋 速查命令合集

# 重新部署
cd /opt/cf-containers/bolt-diy
export CLOUDFLARE_API_TOKEN=你的Token
npx wrangler deploy
 
# 查看日志
npx wrangler tail --format pretty
 
# 停止 VPS 容器
docker stop gott-energy-boltdiy-t2ovpy-app-1
 
# 恢复 VPS 容器
docker start gott-energy-boltdiy-t2ovpy-app-1
 
# 查看容器状态
npx wrangler whoami

📝 更新日志

日期改动原因
2026-07-12首次创建,完成 Bolt.diy 从 VPS 到 CF Containers 的完整迁移释放 VPS 内存,熟悉 CF Containers 流程