这个仓库已经新增 Cloudflare Workers / Pages 可部署版本(TypeScript)。
一键部署前置条件:若使用 GitHub Actions 工作流,请先在仓库 Secrets 配置
CLOUDFLARE_API_TOKEN与CLOUDFLARE_ACCOUNT_ID。
Docker 一键启动入口仍是docker compose up -d,请参考readme.md。
- D1(SQLite):持久化 Tokens / API Keys / 管理员会话 / 配置 / 日志
- KV:缓存
/images/*的图片/视频资源(从assets.grok.com代理抓取) - 每天 0 点统一清除:通过 KV
expiration+ Workers Cron 定时清理元数据(wrangler.toml已配置,默认按北京时间 00:00) - 前端移动端适配一致生效:Workers 与 FastAPI/Docker 复用同一套
/static/*资源,包含手机端抽屉导航、表格横向滚动、API Key 居中悬浮新增弹窗等交互
原 Python/FastAPI 版本仍保留用于本地/Docker;Cloudflare 部署请按本文件走 Worker 版本。
- Workers 代码更新不会清空 D1 / KV:只要继续绑定同一个 D1 数据库和 KV Namespace,账户数据(Tokens / Keys / 配置 / 日志)不会丢。
- 缓存不会因为升级而立刻丢失:KV 中的缓存对象会按“本地 0 点”过期(expiration)并由 Cron 每天清理元数据,升级后仍保持一天一清理。
- 注意不要随意改
wrangler.toml里的name/ D1/KV 绑定 ID;如果你用 GitHub Actions 一键部署,也请保持 Worker 名称一致,否则可能创建新的 D1/KV 资源导致“看起来像丢数据”。 - 管理员账号密码不会被默认值覆盖:迁移脚本使用
INSERT OR IGNORE初始化默认配置;如果你之前已在面板里修改过账号/密码,升级后会保留原值。
- Node.js 18+(你本机已满足即可)
- 已安装/可运行
wrangler(本仓库使用npx wrangler) - Cloudflare 账号(已托管域名更好,便于绑定自定义域名)
npm install登录 Cloudflare:
npx wrangler login创建 D1:
npx wrangler d1 create grok2api把输出里的 database_id 填进 wrangler.toml:
wrangler.toml的database_id = "REPLACE_WITH_D1_DATABASE_ID"
应用迁移(会创建所有表):
npx wrangler d1 migrations apply grok2api --remote你也可以直接按绑定名执行(推荐,避免改名后出错):
npx wrangler d1 migrations apply DB --remote迁移文件在:
migrations/0001_init.sqlmigrations/0002_r2_cache.sql(旧版,已废弃)migrations/0003_kv_cache.sql(新版 KV 缓存元数据)
KV Namespace 建议命名为:grok2api-cache
如果你使用 GitHub Actions(推荐),会在部署前自动:
- 创建(或复用)D1 数据库:
grok2api - 创建(或复用)KV namespace:
grok2api-cache - 自动绑定到 Worker(无需你手动填任何 ID)
如果你手动部署,可以自己创建 KV namespace 并把 ID 填进 wrangler.toml:
npx wrangler kv namespace create grok2api-cache然后把输出的 id 填到 wrangler.toml:
[[kv_namespaces]]binding = "KV_CACHE"id = "<你的namespace id>"
wrangler.toml 已默认配置(按北京时间 00:00):
CACHE_RESET_TZ_OFFSET_MINUTES = "480":时区偏移(分钟),默认 UTC+8crons = ["0 16 * * *"]:每天 16:00 UTC(= 北京时间 00:00)触发清理KV_CACHE_MAX_BYTES = "26214400":最大缓存对象大小(KV 单值有大小限制,建议 ≤ 25MB)KV_CLEANUP_BATCH = "200":清理批量(删除 KV key + D1 元数据)
部署:
npx wrangler deploy部署后检查:
GET https://<你的域名或workers.dev>/health- 打开
https://<你的域名或workers.dev>/login
(可选)冒烟测试:
python scripts/smoke_test.py --base-url https://<你的域名或workers.dev>默认管理员账号密码:
admin / admin
强烈建议登录后立刻修改(在「设置」里改 admin_password / admin_username)。
仓库已包含工作流:.github/workflows/cloudflare-workers.yml,在 main 分支 push 时会自动:
npm ci+npm run typecheck- 自动创建/复用 D1 + KV,并生成
wrangler.ci.toml wrangler d1 migrations apply DB --remote --config wrangler.ci.tomlwrangler deploy
触发策略保持不变:
push到main:自动触发 Cloudflare 部署作业workflow_dispatch:可手动选择cloudflare/docker/bothv*tag:用于 Docker 构建发布链路
你需要在 GitHub 仓库里配置 Secrets(Settings → Secrets and variables → Actions):
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID(必填)
提示:
CLOUDFLARE_API_TOKEN建议使用 API Token(不要用 Global API Key),并确保至少包含 Workers Scripts / D1 / Workers KV Storage 的编辑权限;否则工作流可能无法自动创建/复用 D1/KV 或部署 Worker。
然后直接 push 到 main(或在 Actions 页面手动 Run workflow)即可一键部署(无需你手动创建/填写 D1 或 KV 的 ID)。
注意:此版本不再使用 R2。GitHub Actions 会自动创建/复用 D1 与 KV,但你仍需在 GitHub 配好
CLOUDFLARE_API_TOKEN/CLOUDFLARE_ACCOUNT_ID。另外:
app/static/_worker.js是 Pages Advanced Mode 的入口文件。Workers 部署时会被app/static/.assetsignore排除,避免被当成静态资源上传导致部署失败。
在 Cloudflare Dashboard:
- Workers & Pages → 选择
grok2api这个 Worker - Settings / Triggers(不同 UI 可能略有差异)
- 找到 Custom Domains → Add
- 选择你的域名并创建
绑定完成后,直接用你的域名访问 /login 与 /v1/* 即可。
登录 /admin/token 后至少配置(/manage 仍保留为兼容入口,会跳转):
- Tokens:添加
sso或ssoSuper - 设置:
dynamic_statsig(建议开启)- 或者关闭动态并填写
x_statsig_id - (可选)填写
cf_clearance(只填值,不要cf_clearance=前缀) - (可选)开启
video_poster_preview:将返回内容中的<video>替换为 Poster 预览图(默认关闭) - (可选)
image_generation_method:legacy(默认,稳定)或imagine_ws_experimental(实验性新方法,失败自动回退旧方法)
- Keys:创建 API Key,用于调用
/v1/*
- POST /v1/chat/completions (supports stream: true)
- GET /v1/models
- GET /v1/images/method: returns current image-generation mode (legacy or imagine_ws_experimental) for /chat and /admin/chat UI switching
- POST /v1/images/generations: experimental mode supports size (aspect-ratio mapping) and concurrency (1..3)
- POST /v1/images/edits: only accepts grok-imagine-1.0-edit
- GET /images/<img_path>: reads from KV cache; on miss fetches assets.grok.com and writes back to KV (daily expiry/cleanup policy)
- Note: Workers KV single-value size is limited (recommended <= 25MB); most video players use Range requests, which may bypass KV hits
- Admin APIs: /api/*
- GET /api/v1/admin/tokens adds fields (compatible): token_type, quota_known, heavy_quota, heavy_quota_known
- POST /api/v1/admin/keys/update returns 404 when key does not exist
- Quota semantics: remaining_queries = -1 means unknown quota; frontend should use quota_known / heavy_quota_known for judgement
仓库已提供 Pages Advanced Mode 入口:
app/static/_worker.js
部署静态目录:
npx wrangler pages deploy app/static --project-name <你的Pages项目名> --commit-dirty然后在 Pages 项目设置里添加绑定(名称必须匹配代码):
- D1:绑定名
DB - KV:绑定名
KV_CACHE
注意:
- 自动清理依赖 Cron Trigger,目前更推荐用 Workers 部署该项目以保证定时清理稳定运行。
本仓库默认在 wrangler.toml 将 Workers 的 Placement 固定在美国(Targeted Placement):
[placement]
region = "aws:us-east-1"这会让 Worker 的执行位置更稳定地靠近美国区域,从而让出站更偏向美区(对上游在美区的场景更友好)。
如需调整:把 region 改成你想要的区域(例如 aws:us-west-2)。
如需关闭:删除 wrangler.toml 中的 [placement] 段落即可(恢复默认的边缘就近执行)。
部署后可执行以下最小检查:
- 基础健康与登录页:
GET /healthGET /login
- 管理页可访问性:
GET /admin/tokenGET /admin/keys
- 移动端回归(建议使用
390x844):/admin/keys:点击“新增 Key”后应为居中悬浮弹窗(有遮罩,可点遮罩关闭,可Esc关闭)- 顶部导航:手机端应为抽屉菜单(可打开/关闭,点击菜单项后自动收起)
- Token/Keys/Cache 表格:应保持横向滚动,不应压碎列布局
- 可选 smoke test:
python scripts/smoke_test.py --base-url https://<你的域名或workers.dev>