0%

2026-08-14-adaydream-music-proxy-fix-log

主站背景乐修复日志 — 2026-08-14

目标

修复 adaydream.cn 主站导航页背景乐失效:把 08-13 硬编码进 <audio src> 的 wav 直链,改为通过 Vercel 无服务函数动态拉取最新链接,规避 HyCDN 防盗链令牌轮换。

背景

08-13 部署导航页时,《Control’s Wishes》的无损 wav 直链被硬编码进 <audio src>(见《主站导航页部署日志》待办第 3 条)。HyCDN 的防盗链 token 会周期性轮换,硬编码链接过期后音乐静默失效。本次改成「前端 fetch Vercel 代理 → 服务端实时调 Monster Siren API 拿最新直链」的架构。

方案

  1. 代理歌单加歌D:\my-blog\adaydream-proxy\api\music-proxy.jsSONGS 数组首位插入 cid: "880337"(《Control’s Wishes》)。
  2. 终端页改动态拉取D:\my-blog\terminal\index.html<audio id="bgm"> 去掉硬编码 src,在 DOMContentLoadedfetch('https://adaydream-proxy.vercel.app/api/music-proxy'),命中 cid === '880337' 后设置 m.src
  3. 服务端响应带 Cache-Control(max-age 3600 + SWR 600)与 Access-Control-Allow-Origin: *,跨域与缓存一并解决。

踩坑:Vercel 部署被拦截

改完推送后,重新部署代理时 npx vercel --prod 卡住(build 0ms、状态 UNKNOWN),Vercel 控制台报:

Deployment Blocked — commit email ***@users.noreply.github.com could not be matched to a GitHub account.

根因:Vercel 的「Git Account Linking」安全特性会校验部署来源的 Git commit 作者邮箱。npx verceladaydream-proxy/ 目录里运行时会向上找到父仓库的 .git,把当前 commit 的 noreply 邮箱一起上传;noreply 邮箱无法反查到 GitHub 账号,于是被拦截。而该项目其实未接 Git 仓库,设置页里没有可直接关闭的开关。

解决(保留匿名邮箱、不动任何 Vercel 设置):把部署文件复制到一个不在任何 Git 仓库内的干净目录再部署。CLI 检测不到 .git 就不会上传 commit 元数据,检查自然不触发:

1
2
3
4
5
6
mkdir -p ~/adaydream-proxy-deploy/api
cp adaydream-proxy/api/music-proxy.js ~/adaydream-proxy-deploy/api/
cp adaydream-proxy/package.json ~/adaydream-proxy-deploy/
mkdir -p ~/adaydream-proxy-deploy/.vercel
cp adaydream-proxy/.vercel/project.json ~/adaydream-proxy-deploy/.vercel/ # 关键:锁定原项目,避免生成新域名
cd ~/adaydream-proxy-deploy && npx vercel --prod --yes

要点:.vercel/project.json 必须一起复制(内含 projectId/orgId,锁定到原项目);package.json 必须带 "type": "module"(proxy 用 ESM export default)。

验证

  • 代理接口 GET /api/music-proxy 返回 HTTP 200data[0] 即 cid 880337url 为有效 wav 直链(约 52MB)。
  • 线上终端页已含 fetch 逻辑(关键词 880337 / music-proxy / 代理域名均命中)。
  • 用户端强制刷新 adaydream.cn 后背景乐恢复。

踩坑记录

问题 解决
wav 直链令牌轮换失效 改为前端 fetch 代理动态拉最新直链
Vercel「Deployment Blocked」:Git Account Linking 拦截 noreply 邮箱 复制到非 Git 目录再 npx vercel,不上传 commit 元数据
在仓库内直接 npx vercel 会卡住/重新走登录 干净目录部署;.vercel/project.json 锁定项目
临时部署目录被 node 进程占用删不掉 无害(约 9KB),进程退出后可删

后续备忘

  • 以后 adaydream-proxy 加歌 / 换 cid 需要重部署时,走「干净目录复制部署」流程,勿直接在仓库内 npx vercel
  • 代理接口带 1h 缓存,歌单改动后最长 1h 内全网生效。