简易版 new-api:Cloudflare Workers + D1 后端,Vite 静态管理台。 管理台构建产物通过 Worker Static Assets 与 Worker 一起部署。
apps/workerCloudflare Worker (Hono)apps/ui管理台 (Vite)
工作流名称:Deploy SPA CF Workers[Worker一体化部署]
在仓库 Settings → Secrets and variables → Actions 中新增:
CLOUDFLARE_API_TOKEN:需包含 Workers + D1 的读写权限CLOUDFLARE_ACCOUNT_ID:Cloudflare 账户 ID
SPA_DEPLOY:自动部署开关(true/false),未设置时默认启用
- 自动触发:push 到
main或master,且变更命中apps/ui/**或apps/worker/**- 受
SPA_DEPLOY控制
- 受
- 手动触发:Actions 页面选择工作流并 Run workflow
- 默认不受
SPA_DEPLOY影响(除非设置from_panel=true)
- 默认不受
- 外部触发:
repository_dispatch(type =deploy-spa-button)- 不受
SPA_DEPLOY影响
- 不受
deploy_target:frontend/backend/both/auto(默认 auto)frontend仍会部署 Worker(静态资源随 Worker 发布)auto在 push 时按变更范围决定,手动触发默认部署前后端
apply_migrations:true/false/auto(默认 auto)auto仅在 push 且迁移文件变更时执行
from_panel:true/false(是否由控制面板触发;为 true 时会尊重SPA_DEPLOY)
- Checkout → 安装 Bun 1.3.9 →
bun install - 构建管理台(
apps/ui/dist),并校验产物 - 关闭 wrangler telemetry
- 创建/校验 D1(
api-worker),在 CI 内写入apps/worker/wrangler.toml的database_id - 按需执行远程迁移
wrangler deploy部署 Worker
- Bun 1.3.9(见
package.json的packageManager) - Cloudflare Wrangler(通过
bunx wrangler使用)
bun installbun run dev:worker说明:
- 默认使用
apps/worker/wrangler.toml - 本地端口通常为 8787(wrangler 默认)
- D1 使用本地数据库
环境变量/配置(apps/worker/wrangler.toml 或 wrangler secret put):
CORS_ORIGIN允许的管理台来源(如 UI 使用 4173 端口,请同步调整)PROXY_RETRY_ROUNDS代理失败轮询次数(默认 2)PROXY_RETRY_DELAY_MS轮询间隔(毫秒,默认 200)
系统设置(管理台 → 系统设置):
- 日志保留天数(默认 30)
- 会话时长(小时,默认 12)
- 管理员密码(首次登录在登录页输入密码将自动设置,可在系统设置中修改)
bun run dev:ui说明:
- 默认端口为 4173(见根目录脚本)
前端配置(apps/ui/.env 可选):
VITE_API_BASE管理 API 基址(默认同域)VITE_API_TARGET本地开发代理目标(默认 http://localhost:8787)
bun run --filter api-worker db:migratebun run testbun run typecheckbun run lintbun run format
- 管理台接口(
/api/*):- 管理员登录后获取会话 token,推荐使用
Authorization: Bearer {token} - 也支持
x-admin-token或x-api-key作为备选头
- 管理员登录后获取会话 token,推荐使用
- New API 兼容接口(
/api/channel、/api/group、/api/user):Authorization: Bearer {管理员密码}或管理员登录 token- 可选请求头:
New-Api-User: 1
- OpenAI 兼容代理(
/v1/*):- 使用
Authorization: Bearer {API Token}(或x-api-key) - API Token 由
/api/tokens创建与管理
- 使用
- 健康检查:
GET /health无鉴权
POST /api/auth/login管理员登录POST /api/auth/logout管理员登出GET /api/channels渠道列表POST /api/channels新增渠道PATCH /api/channels/:id更新渠道DELETE /api/channels/:id删除渠道POST /api/channels/:id/test渠道连通性测试并刷新模型GET /api/models汇总所有渠道模型GET /api/tokens令牌列表POST /api/tokens新建令牌(返回明文 token)PATCH /api/tokens/:id更新令牌(配额/状态/允许渠道等)GET /api/tokens/:id/reveal查看令牌明文DELETE /api/tokens/:id删除令牌GET /api/usage使用日志(支持from/to/model/channel_id/token_id/limit)GET /api/dashboard面板聚合指标(支持from/to)GET /api/settings读取系统设置PUT /api/settings更新系统设置(日志保留/会话时长/管理员密码)
渠道管理(/api/channel):
GET /api/channel渠道列表(支持分页与筛选)GET /api/channel/search渠道搜索(keyword/group/model/status/type)GET /api/channel/:id渠道详情POST /api/channel新增渠道(单条)PUT /api/channel更新渠道DELETE /api/channel/:id删除渠道GET /api/channel/test/:id渠道连通性测试POST /api/channel/test渠道连通性测试(body 传 id)GET /api/channel/fetch_models/:id拉取渠道模型POST /api/channel/fetch_models拉取模型(body 传 base_url/key)GET /api/channel/models模型列表GET /api/channel/models_enabled启用模型列表PUT /api/channel/tag批量更新 tag 权重/优先级POST /api/channel/tag/enabled批量启用 tagPOST /api/channel/tag/disabled批量停用 tag
分组与用户(只读):
GET /api/group渠道分组列表GET /api/user/models用户可用模型列表
ALL /v1/*转发到渠道base_url + 请求路径- 当请求路径为
/v1/responses且上游 400/404 时自动回退到/responses - 流式请求会自动补齐
stream_options.include_usage = true以收集用量