Skip to content

服务端架构 ​

拼好歌服务端是一个用 Cloudflare Workers + QuickJS(WASM) 构建的后端服务框架:在边缘节点提供 JavaScript 沙箱与网络代理通道,动态执行使用者自行导入的音源插件,并内置 Web 管理后台与用户账号体系,支持多设备歌单与使用记录同步。

本项目不提供音乐数据

服务端不提供音乐数据,也不内置任何音源插件;数据全部由使用者自行导入的插件返回。代码开源且免费。

关联项目 ​

项目说明
客户端(小程序端)同一套 uni-app 代码,Android 与桌面端另有安装包

架构概览 ​

客户端
  │  HTTPS
  ▼
Cloudflare Worker(路由 / 鉴权 / 限流 / 用量统计)
  ├─► D1 数据库(账号、歌单、收藏、会话)
  ├─► QuickJS(WASM)沙箱 ── 执行使用者导入的插件
  └─► 管理后台(HTML 内联于 Worker,无需单独部署前端)

模块划分 ​

目录职责
src/worker.tsWorker 入口与路由分发
src/http/请求解析与统一响应
src/services/业务服务(账号、同步、歌单、设置等)
src/runtime/脚本运行时与沙箱加载
src/admin/管理后台页面与接口
src/data/数据访问与存储
src/observability/日志、耗时与用量统计
src/utils/通用工具

能力清单 ​

能力说明
账号体系邮箱注册 / 登录 / 重置密码 / 设备会话管理,注册需管理员发放的邀请码
数据同步歌单、收藏、播放历史、设置的多端同步,含单条体积上限
插件沙箱在隔离的 QuickJS 环境中执行使用者导入的插件
管理后台插件在线/本地导入与批量管理、音源调优、黑名单、熔断复位、服务器设置
听歌识曲音频指纹识别接口
AI 推荐与热搜基于 Cloudflare AI 绑定,模型可配置
用量统计按请求维度统计,便于配额控制
短链服务歌单分享短链

管理后台 ​

部署完成后访问 Worker 的根路径(https://你的域名/)即可打开后台,不需要带 API_KEY。后台由 Worker 直接返回纯 HTML(内联 CSS/JS),无需单独部署前端项目。

拼好歌服务端管理后台登录页

拼好歌服务端管理后台:音源调优配置

  • 登录:用 ADMIN_EMAIL / ADMIN_PASSWORD 登录;首次登录会自动创建管理员账号,之后在「系统设置 → 修改管理员密码」改密码。
  • 服务器地址:登录后点右上角「复制服务器地址」一键复制(按钮左侧会直接显示完整地址),粘到客户端即可;也可以自己拼 域名/API_KEY。
  • 鉴权:后台写操作均走服务端鉴权,会话失效统一返回 401 + authExpired:true,前端据此清理凭证并引导重新登录。

路由与鉴权 ​

路由形态用途用什么密钥
/{apiKey}/api/...、/owner/{apiKey}/...管理路由API_KEY(兼作 Owner Key)
/{publicKey}/...客户端路由PUBLIC_KEY

两者分开鉴权:客户端只需持有 PUBLIC_KEY;不设置 PUBLIC_KEY 时该路由不可用。

环境变量 ​

变量说明
API_KEYAPI 密钥(兼作 Owner Key),有公开默认值,部署后一定要改
PUBLIC_KEY客户端访问密钥(v1.0.10 新增),32 位 hex
ADMIN_EMAIL管理后台管理员邮箱
ADMIN_PASSWORD管理员初始密码,仅用于首次登录建号;配置里是明文,后台不明文保存
AI_MODELAI 模型名称,默认 @cf/qwen/qwen3-30b-a3b-fp8
DBD1 数据库绑定,变量名必须大写
AICloudflare AI 绑定

费用与配额 ​

以 Cloudflare 官方定价为准:

资源免费版付费版
请求次数10 万次/天1000 万次/月(≈33 万次/天)
CPU 时间10ms/次3000 万 ms/月
D1 读取500 万次/天1 亿次/月
D1 写入10 万次/天1000 万次/月
D1 存储5GB无限制

按每人每天 3 小时听歌(约 45 次请求/天)估算:免费版约可支撑 2000 人/天,付费版约 7000 人/天。

免费套餐的 CPU 上限

Workers 免费套餐对单次请求的 CPU 时间有上限(10ms)。项目通过 QuickJS 的 WASM 同步构建与运行参数调优来适配该限制,具体配置在服务端部署使用教程中说明。

统一响应与错误码 ​

所有接口返回统一 JSON:

json
{ "code": 200, "msg": "success", "data": {} }
状态码说明
200成功
400参数错误
403无权限(Owner Key 错误)
410尚未导入任何音源插件
411没有支持该源的插件
412换源失败(候选音源均不可用)
429用量已达上限
500服务器内部错误

安全建议 ​

  1. 先改默认凭据:API_KEY、ADMIN_PASSWORD 的默认值写在公开仓库里,部署完第一件事就是换掉;
  2. 敏感项不要写进 wrangler.toml:用 wrangler secret put 写入;wrangler deploy 会用文件里的值覆盖面板改动;
  3. D1 绑定在控制台维护:不写进 wrangler.toml(database_id 因人而异);部署后若提示「数据库未绑定」,到 Worker「绑定」页确认 DB 存在;
  4. 管理后台只自己访问:不建议对公网开放注册,邀请码由管理员在后台生成后单独发放。

相关页面 ​

本站为项目信息索引站点:不提供、不存储、不传输任何音频内容;不内置、不分发任何插件。
反馈请走 联系与反馈,或加入 QQ 群 1016773775。