Files
modelping/README.md
2026-06-24 22:10:25 +08:00

6.0 KiB
Raw Permalink Blame History

modelping · 萌芽Ping

在 Cloudflare Workers 上运行的大模型 API 流式首字延迟可用性监控面板React + Vite 前端Static Assets CDN+ D1 存储(默认保留 30 天探测记录)+ 每分钟 Cron 调度。

目录结构

功能概要

  • 管理端配置API 根地址、API Key、模型名、协议OpenAI Chat Completions 经典 / OpenAI Responses 新版 / Claude Anthropic
  • 探测间隔1、5、10、30、60、360分钟
  • 公开仪表盘24h / 30d 可用率、按日时间条、最近状态码与首字延迟。
  • 管理员入口:访问 /admin?token=<ADMIN_TOKEN>(与 .dev.vars / Secrets 中 ADMIN_TOKEN 一致即可,示例 shumengya520)。校验通过后 token 写入当前浏览器 sessionStorage,并自动 replace/admin(从地址栏去掉 token减少泄露
  • 一键部署:npm run build && wrangler deployCloudflare Vite 插件会自动使用 dist/modelping 构建产物与资源目录)。

前置条件

  • Node.js 20+
  • Cloudflare 账号与 Wrangler 登录(npx wrangler login

初始化 D1

npx wrangler d1 create modelping

将输出中的 database_id 写入根目录 wrangler.jsond1_databases[0].database_id(替换 replace-with-your-d1-database-id)。

应用迁移本地与远程各执行一次按你开发需要升级含「OpenAI 新版 Responses」协议时请确保已执行最新 SQL

npx wrangler d1 migrations apply modelping --local
npx wrangler d1 migrations apply modelping --remote

密钥与环境变量

变量 说明
ADMIN_TOKEN 管理 API Bearer Token本地可复制 .dev.vars.example.dev.vars。生产务必执行 npx wrangler secret put ADMIN_TOKEN
ENCRYPTION_KEY 可选。32 字节 Base64或任意字符串将做哈希派生。不设时ADMIN_TOKEN 派生加密密钥(仅建议用于内网/演示)。

本地开发:

cp .dev.vars.example .dev.vars
# 编辑 .dev.vars

开发与部署

npm install
npm run dev

生产构建与部署:

npm run deploy

等价于 tsc -b && vite build && wrangler deploy。Wrangler 会使用重定向后的 dist/modelping/wrangler.json 上传 Worker 与 dist/client 静态资源。

出现「服务端未配置 ADMIN_TOKEN」503怎么修

含义:当前运行的 Worker 读不到 ADMIN_TOKEN(既不是 Secret本地也没从 .dev.vars 注入)。

线上(你已 wrangler deploy 的网站)

.dev.vars 只对本地 dev 有效,不会跟着部署上去。在项目目录执行:

npx wrangler secret put ADMIN_TOKEN

按提示粘贴与 URL 里一致的口令(例如 shumengya520)。成功后无需改代码,再访问 /admin?token=... 即可。

也可使用快捷脚本:npm run secret:admin(同上,仍是交互式输入 Secret

本地(npm run dev

  1. 项目根目录必须有 .dev.vars,且第一行建议直接写:ADMIN_TOKEN=你的口令(不要先写一大段注释,部分环境解析更稳)。
  2. 保存后 关掉 dev 再重新执行 npm run dev
  3. 浏览器访问的必须是 dev 打印出的地址(如 http://localhost:5173/admin?token=你的口令),不要误用线上域名或 vite preview 的静态站(可能没有 Worker

管理员登录排障(/admin?token=... 进不去)

  1. 打开浏览器 开发者工具 → Network,访问 /admin?token=你的口令,查看 /api/admin/ping

    • (失败 / 无记录):当前页面没有打到本项目的 Worker。本地请使用 npm run devCloudflare Vite 插件会同时起前端与 Worker不要只用纯静态预览访问否则没有 /api/*
    • 503 + admin_token_not_configuredWorker 上 没有可用的 ADMIN_TOKEN。本地检查项目根目录 .dev.vars 并重启 dev已部署环境必须执行 npx wrangler secret put ADMIN_TOKEN.dev.vars 不会deploy 传到线上)。
    • 401:请求里的 token 与 ADMIN_TOKEN 不一致(含多余空格时,服务端与 URL 两侧已做 trim但仍需内容一致
    • 200:校验已通过;若仍停在说明页,请看 Application → Session Storage 是否写入 modelping_admin_token,并尝试硬性刷新或排除扩展拦截。
  2. 未登录页面上方如显示 红色提示条,即为本次 URL 校验失败原因(此前固定文案下不会显示,容易造成「后台没做」的误解)。

默认内网口令(仅示例)

本地示例默认 Admin Token 为 shumengya520线上环境请在 Dashboard 或 wrangler secret put 修改为强随机字符串。

API 摘要

方法 路径 认证 说明
GET /api/monitors 公开列表与聚合统计
GET /api/monitors/:id 单条详情
GET /api/admin/ping Authorization: Bearer <ADMIN_TOKEN> 校验 Token
GET/POST/PUT/DELETE /api/admin/monitors Bearer 增删改监控;POST .../:id/run 立即探测一次

备注

  • Cron 表达式为每分钟 * * * * *,在 Worker 内根据 next_run_atinterval_minutes 决定是否真正发起外呼。
  • 探测使用 stream: true,以首个内容增量到达时间作为首字延迟。
  • Worker 脚本体积请保持精简;前端由 CDN 提供,整体符合常见 Workers 体积限制实践。

许可证

MIT若需其他许可证请自行替换。