合并自建歌曲源支线(selfhost-source)+ 版本号按约定修正为 1.6.0

版本号:
- 1.5.11 越界(规则 3 规定 patch ≤ 10)→ 修正为 1.6.0(进位到 minor、patch 归 0)
- versionCode 43 不变:43 从未对外发布,本次修正只是把命名拉回约定

合并支线(原在工作区根目录、App 仓库之外,DESIGN.md 自称"支线"):
- selfhost-source/server/   自建歌曲源服务器(纯 Python 标准库、零 pip 依赖)
- selfhost-source/deploy/、DESIGN.md、LIBRARY.md、build_inventory.py
- selfhost-source/inventory/ 小清单(playlists.csv、song-stats.md 等)
- ⚠️ inventory 生成物(songs-*.csv / singers-top.csv,共 84MB)不入库,
  已写入 .gitignore;需要时用 build_inventory.py 依据 muse.db 重新生成

同时入库的 App 侧支线改动(此前为工作树未提交状态):
- Whoami.kt(whoami 设备心跳)、DeviceIdentity.kt(设备身份伪装)
- PushDownload.kt / PushDownloadClient.kt(点歌推送)
- AdVideoFilter 带 query/fragment 的地址闸门;KTV_BRIDGE_API 11 → 13
- 修 ktv_api.js 的 global.KtvBridgeApiVersion(12 → 13,与注释及 Kotlin 两处校验一致)
- 对应单测:WhoamiTest / DeviceIdentityTest / PushDownloadTest / AdVideoFilterTest(共 39 例)

文档:
- DESIGN.md 的"在 App 仓库之外"约定改为"已并入仓库统一版本化"
- AGENTS.md 版本号行更新为 1.6.0/43,并新增支线并入说明

验证:assembleRelease + testReleaseUnitTest 全过(39 例)
This commit is contained in:
zijunchiang
2026-10-14 02:06:28 +08:00
parent e060ae5ebe
commit 87aa979abd
68 changed files with 21305 additions and 105 deletions
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
麦动KTV 自建歌曲源服务器 —— IIS applicationHost.config 片段(**服务器级**配置)
⚠️ 这是一个"片段",不是可以直接替换整份 applicationHost.config 的完整文件:
请把这几个节点**手工合并**进真正的
%windir%\System32\inetsrv\config\applicationHost.config
的 <configuration><system.webServer> 里面(已有同名节点就合并子元素,别写重复节点)。
⚠️ 需要**管理员权限**:applicationHost.config 默认只有 Administrators / SYSTEM 可写;
改之前先备份(复制成 applicationHost.config.bak),改错会导致整个 IIS 起不来。
也可以**完全不动这个文件**,改用 IIS 管理器 UI 完成同样的三件事(推荐新手):
* ARR 代理: ARR → Server Proxy Settings → 勾 Enable proxy → Apply
(= 下面 <proxy> 节点;Timeout/Response buffer 也在这一页)
* 放行服务器变量: URL Rewrite → View Server Variables → Add
(= 下面 <allowedServerVariables>;四个都要加)
* 上传缓冲: IIS 管理器 → 站点 → Configuration Editor → system.webServer/serverRuntime
→ uploadReadAheadSize(= 下面 <serverRuntime>,也可留默认)
三块配置各自解决的问题(**两个站点共用**:API 站 `api-site/web.config` +
媒体站 `media-site/web.config`):
① <proxy> —— 让 ARR 真的当反向代理(不开 = 站点 502);
preserveHostHeader 保留原始 Host,避免后端看到内网主机名;
proxyTimeout/connectTimeout/sendTimeout 给到 600 秒
(媒体是大文件,默认 120 秒不够);
② <allowedServerVariables> —— 放行两份 web.config 里 <serverVariables> 用的四个头,
**不放行则站点直接 500.19 打不开**;
③ <serverRuntime> —— 大请求体(CSV 导入)读入缓冲,避免代理层把上传截断。
-->
<configuration>
<system.webServer>
<!-- ① ARR:启用代理(不开这一项,web.config 里的 Rewrite 到绝对 URL 会 502.3)
enabled="true" = 启用反向代理(IIS 管理器里的 Enable proxy)
preserveHostHeader="true" = 把原始 Host(ktv.example.com)转给后端,
后端就不会看到内网主机名(HTTPS/域名场景必须)
reverseRewriteHostInResponseHeaders="false" = 不要改写响应里的 Location/Host,
避免把内网地址/端口暴露或改错
⚠️ 下面两行是**可选**的超时设置(默认 120 秒对媒体下载偏短;媒体是大文件、
慢客户端会拖很久,建议给到 10 分钟 = 600)。若你的 ARR 版本不接受这两个属性
(配置一保存就报错),请删掉它们,改用 IIS 管理器 → ARR Cache → Server Proxy
Settings → Time-out (seconds) = 600 来设置,效果一样。
-->
<proxy enabled="true" preserveHostHeader="true" reverseRewriteHostInResponseHeaders="false"
proxyTimeout="600" connectTimeout="600" sendTimeout="600" />
<!-- ② 放行服务器变量:web.config 里的 <serverVariables> 用到这四个头。
不放行 → 站点报 500.19("This configuration section cannot be used at this path")。
也可以不加这一段,改用 IIS 管理器 → URL Rewrite → View Server Variables → Add 逐个添加。
⚠️ 若你的 ARR 已经自动追加 X-Forwarded-For(部分版本会),仍建议保留本段:
后端的 trusted_proxies 白名单才是最终依据,重复设置不会有副作用。 -->
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_FORWARDED_FOR" />
<add name="HTTP_X_FORWARDED_PROTO" />
<add name="HTTP_X_REAL_IP" />
<add name="HTTP_X_FORWARDED_HOST" />
</allowedServerVariables>
</rewrite>
<!-- ③ 请求体读入缓冲(单位字节,默认只有 48KB):
反代上传(CSV 导入等)超过缓冲时会出现 413/截断类报错,这里给到 32MiB,
与 web.config 的 maxAllowedContentLength 保持一致;后端 max_body_bytes 默认 8MiB。 -->
<serverRuntime uploadReadAheadSize="33554432" />
</system.webServer>
</configuration>