feat: add Cloudflare Workers deployment alongside Vercel
InfiPlot now deploys to either Vercel or Cloudflare Workers — both targets are first-class. The project is fully stateless (sessions live on the client), so the Cloudflare side needs only Workers + Workers Assets and zero D1/KV/R2. - apps/web/wrangler.jsonc — nodejs_compat, Assets binding, 60s CPU limit (Workers Paid required; matches vercel.json maxDuration). I/O wait does not count against this budget — fits the LLM-bound workload that's most of the runtime. - apps/web/open-next.config.ts — minimal defineCloudflareConfig (no cache needed since the engine is stateless). - apps/web/package.json — added build:cf / preview:cf / deploy:cf via @opennextjs/cloudflare + wrangler (both devDeps); sharp moved from dependencies to devDependencies (only used by the manual optimize-home-images.mjs / localize-firstact-images.mjs scripts now). - .gitignore — .open-next, .wrangler, .dev.vars. - READMEs (3 langs) — Deploy to Cloudflare button next to Vercel, plus a Cloudflare section in the env-var setup (wrangler secret put + Cloudflare Access for staging access control). Verified: pnpm typecheck + pnpm build (Vercel path) + pnpm build:cf (OpenNext bundle: worker 4 KB, server 24 MB, assets 32 MB / 186 files — all within Workers limits) + pnpm preview:cf with the full play loop (start → scene → background click → CORS-clean Canvas annotation via Runware CDN → vision LLM → insert-beat) all green. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -39,9 +39,11 @@ InfiPlot是一款AI实时生成内容的互动剧情游戏,这里没有预设
|
||||
|
||||
## 一键部署
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/zonghaoyuan/infiplot&root-directory=apps/web&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL,TTS_BASE_URL,TTS_API_KEY,TTS_SPEECH_MODEL,MOCK_IMAGE&envDescription=Three%20required%20providers%20%2B%20optional%20TTS.%20Any%20OpenAI-compatible%20endpoint%20works%20for%20text%2Fvision.%20TTS%20uses%20MiMo%27s%20own%20protocol.&envLink=https://github.com/zonghaoyuan/infiplot%23%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B)
|
||||
InfiPlot 同时支持部署到 Vercel 与 Cloudflare Workers —— 任选其一即可。
|
||||
|
||||
部署完成后,在 Vercel 项目里填好环境变量 —— 详见下方的[配置教程](#配置教程)。Vercel 项目的 **Root Directory** 必须设为 `apps/web`(一键部署按钮会自动带上;若手动配置,请在 Project Settings 里设置)。
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/zonghaoyuan/infiplot&root-directory=apps/web&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL,TTS_BASE_URL,TTS_API_KEY,TTS_SPEECH_MODEL,MOCK_IMAGE&envDescription=Three%20required%20providers%20%2B%20optional%20TTS.%20Any%20OpenAI-compatible%20endpoint%20works%20for%20text%2Fvision.%20TTS%20uses%20MiMo%27s%20own%20protocol.&envLink=https://github.com/zonghaoyuan/infiplot%23%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8B) [](https://deploy.workers.cloudflare.com/?url=https://github.com/zonghaoyuan/infiplot/tree/main/apps/web)
|
||||
|
||||
部署完成后,填好环境变量 —— 详见下方的[配置教程](#配置教程)。两个平台都需要把项目根目录设为 `apps/web`(Vercel 一键部署按钮会自动带上;在 Cloudflare 上请把 build root 设为 `apps/web`,构建命令设为 `pnpm --filter @infiplot/web build:cf`)。
|
||||
|
||||
---
|
||||
|
||||
@@ -134,13 +136,17 @@ InfiPlot 会与四类模型供应商通信。**文本(Text)和视觉(Visio
|
||||
|
||||
**2. 填写环境变量**
|
||||
|
||||
在 Vercel 项目里设置(**Settings → Environment Variables**),或在本地运行时写进 `apps/web/.env.local`。九个变量为必填;TTS 可选(留空则静音运行)。此外还有一个用于低成本测试的开关:
|
||||
九个变量为必填;TTS 可选(留空则静音运行)。此外还有一个用于低成本测试的开关:
|
||||
|
||||
| 变量 | 作用 |
|
||||
|---|---|
|
||||
| `MOCK_IMAGE=true` | 跳过图像生成,渲染器返回一张静态占位图。剧情、语音、选项照常运行。非常适合在不消耗 Runware 额度的情况下调试 TTS。 |
|
||||
|
||||
确切的字段格式见 `apps/web/.env.example`。
|
||||
在哪里设置(确切字段见 `apps/web/.env.example`):
|
||||
|
||||
- **本地开发** —— `apps/web/.env.local`
|
||||
- **Vercel** —— Project Settings → Environment Variables
|
||||
- **Cloudflare Workers** —— 在 `apps/web/` 目录下逐个执行 `wrangler secret put <NAME>`,或在 dashboard 里设置(Workers → infiplot → Settings → Variables and Secrets)。如果要给 staging 加访问限制,可以在 Worker 前面挂一个 [Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/applications/)(零代码,邮箱白名单)。
|
||||
|
||||
**3. 注意成本**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user