主站背景乐修复日志 — 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 拿最新直链」的架构。
方案
- 代理歌单加歌:
D:\my-blog\adaydream-proxy\api\music-proxy.js的SONGS数组首位插入cid: "880337"(《Control’s Wishes》)。 - 终端页改动态拉取:
D:\my-blog\terminal\index.html的<audio id="bgm">去掉硬编码src,在DOMContentLoaded里fetch('https://adaydream-proxy.vercel.app/api/music-proxy'),命中cid === '880337'后设置m.src。 - 服务端响应带
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.comcould not be matched to a GitHub account.
根因:Vercel 的「Git Account Linking」安全特性会校验部署来源的 Git commit 作者邮箱。npx vercel 在 adaydream-proxy/ 目录里运行时会向上找到父仓库的 .git,把当前 commit 的 noreply 邮箱一起上传;noreply 邮箱无法反查到 GitHub 账号,于是被拦截。而该项目其实未接 Git 仓库,设置页里没有可直接关闭的开关。
解决(保留匿名邮箱、不动任何 Vercel 设置):把部署文件复制到一个不在任何 Git 仓库内的干净目录再部署。CLI 检测不到 .git 就不会上传 commit 元数据,检查自然不触发:
1 | mkdir -p ~/adaydream-proxy-deploy/api |
要点:.vercel/project.json 必须一起复制(内含 projectId/orgId,锁定到原项目);package.json 必须带 "type": "module"(proxy 用 ESM export default)。
验证
- 代理接口
GET /api/music-proxy返回 HTTP 200,data[0]即 cid880337,url为有效 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 内全网生效。