NAS 里的音乐怎么交给小爱音箱播放?XiaoMusic 部署与公网访问完整流程
前言
家里已经有 NAS,也有小爱音箱,真正容易被忽略的问题是:这两样设备其实一直各干各的。
NAS 里存着自己的音乐文件,小爱音箱平时更多还是依赖现成的在线内容。想听 NAS 里的歌时,通常还得先在手机或电脑上找到文件,再想办法播放出来。
XiaoMusic 做的事情,就是把这两边接起来。
一个很典型的家庭场景是:晚上回家以后,不想再翻手机找歌,只希望音箱能够直接播放自己已经整理好的音乐;或者已经有一套常听的歌单,希望继续留在自己的存储里,而不是每换一个平台就重新整理。

这篇采用 场景叙事型,但不会虚构某个"真实家庭故事"。它更适合用一个生活化的问题把整条技术链串起来:
极空间 SSH → Docker → XiaoMusic → 58090 → 配置小米账号与设备 → 搜索和播放 → cpolar → 随机公网地址 → xiaomusic 固定二级子域名。
作者性格会更温和、生活化一些:
不追求把家里的设备折腾得多复杂,真正关心的是:配置完以后,家里人是不是能少开一个 App、少找一次文件,直接把音乐放出来。
1. 先把极空间的 SSH 和 Docker 准备好
1.1 开启 SSH
先在极空间中开启 SSH 服务,然后通过 Windows PowerShell 或 Mac Terminal 登录:
shell
ssh root@IP
如果还没有开过 SSH,可以参考 cpolar 官网对应的极空间 SSH 教程。

1.2 确认 Docker
继续检查 Docker:
shell
docker -v
systemctl status -v

这里的 systemctl status -v 按现有命令保留,不主动修改。
这一步只确认环境:Docker 能用,再继续部署 XiaoMusic。
2. 用 Docker 部署 XiaoMusic
XiaoMusic 提供了两种 Docker 部署方式。
2.1 直接使用 docker run
命令如下:
shell
docker run -p 58090:8090 -e XIAOMUSIC_PUBLIC_PORT=58090 -v /xiaomusic_music:/app/music -v /xiaomusic_conf:/app/conf hanxi/xiaomusic
这里几个参数需要保持一致:
- Web 映射:
58090:8090 XIAOMUSIC_PUBLIC_PORT=58090- 音乐目录:
/xiaomusic_music:/app/music - 配置目录:
/xiaomusic_conf:/app/conf - 镜像:
hanxi/xiaomusic
2.2 使用 Docker Compose
对应配置如下:
shell
services:
xiaomusic:
image: hanxi/xiaomusic
container_name: xiaomusic
restart: unless-stopped
ports:
- 58090:8090
environment:
XIAOMUSIC_PUBLIC_PORT: 58090
volumes:
- /xiaomusic_music:/app/music
- /xiaomusic_conf:/app/conf

两种方式选一种即可,不需要同时执行。
部署完成后,在浏览器访问:
http://极空间IP:58090

页面能够打开,说明 XiaoMusic 的 Web 服务已经在本地跑起来。
到这里先别急着说"音箱已经能播 NAS 音乐"。
真正决定它能不能控制小爱音箱的,是后面的设备配置。
3. 把小爱音箱接进 XiaoMusic
进入 XiaoMusic 后,先选择"默认主题",然后点击设置。

这里需要填写:
- 小米账号
- 小米账号密码
- IP
- 端口

继续向下,按照页面开启相应设置项。

滑到最下面保存。

保存以后再回到顶部,可以看到设备已经识别出来。

勾选需要控制的设备。
然后再次回到底部保存。


回到首页后,设备已经出现在 XiaoMusic 中。

到这里,链路才从"Web 页面打开"推进到:
XiaoMusic 已经识别到小爱设备,并且可以在页面中选择它。
这一步比单纯看到管理界面更关键。
4. 搜歌和播放:先确认音乐链路真的能用
点击搜索。

这次示例搜索的是:
周杰伦

后续也可以继续添加想听的歌曲。

页面还提供了测试入口,可以播放链接中的歌曲。

搜索到的歌曲会进入播放列表,直接点击即可播放。

XiaoMusic 还提供了多种主题。

这一段真正验证的是:
- 设备已经接入;
- 能搜索歌曲;
- 歌曲可以进入播放列表;
- 页面里有播放测试;
- 可以直接点击播放。
因此更准确的说法是:
XiaoMusic 已经能够在当前环境中完成设备识别、歌曲搜索和播放操作。
至于"完全不依赖网络曲库""所有本地音乐都能通过语音点播""所有歌曲都不受平台限制"等更大的结论,这次没有逐项做完整验证,不继续扩大。
5. 本地能控制以后,为什么还要公网访问?
在家里局域网里,58090 页面已经能正常使用。
如果只是家庭内控制,到这里已经够了。
真正需要远程访问的场景,是人在外面时还想打开 XiaoMusic 的管理页面。
例如:
- 临时查看当前播放列表;
- 远程切换歌曲;
- 调整设备或配置;
- 从手机浏览器进入 XiaoMusic 页面。
这时需要扩出去的是:
XiaoMusic 的 Web 页面,也就是 58090。
需要注意的是,这篇后面实际验证的是公网浏览器成功打开 XiaoMusic 页面。虽然使用场景里提到"人在外面点歌回家播放",但没有进一步展示一次完整的"外网点击 → 家中音箱实际播放"的独立验证流程,所以不会把这一点写成已经单独实测确认的结果。
6. 安装 cpolar
执行安装命令:
shell
sudo curl https://get.cpolar.sh | sh

安装完成后查看服务状态:
shell
sudo systemctl status cpolar

服务启动以后,通过主机 IP + 9200 进入 cpolar Web 管理界面。
显示文字写的是:
http://ip:9200
Markdown 链接目标则是:
http://localhost:9200/
这两个地址记录不一致,因此继续保留,不擅自统一。

登录以后,就可以给 XiaoMusic 创建公网隧道。
7. 先用随机域名验证 58090
进入【隧道管理 → 创建隧道】。
配置如下:
- 隧道名称:
xiaomusic - 协议:
http - 本地地址:
58090 - 域名类型:随机域名
- 地区:
China Top

创建以后,在在线隧道列表里可以看到生成的公网地址。

换到其他电脑或移动设备访问。

页面能够正常打开。
这一层真正验证的是:
XiaoMusic 的
58090Web 页面已经能通过公网地址访问。
先把随机地址跑通,再配置固定域名,后面出了问题也更容易判断是哪一层。
8. 长期使用,再换固定二级子域名
随机地址适合测试。
如果这个页面准备长期保留,固定地址会更方便记忆和使用。
进入 cpolar 预留功能。

地区选择:
china Top
这次使用的二级子域名示例是:
xiaomusic

然后回到 cpolar Web UI,在隧道列表里找到对应隧道并点击编辑。

修改为:
- 域名类型:二级子域名
Sub Domain:填写保留成功的二级子域名- 地区:
China Top
点击更新。

更新以后,在线隧道列表中的地址会切换成固定二级子域名。

最后再使用固定公网地址访问。

页面能够正常打开,固定远程入口配置完成。
总结
XiaoMusic 这套方案的价值,不只是"让 NAS 多跑一个 Docker"。
它真正把三样东西接到了一起:
NAS 里的音乐 → XiaoMusic → 小爱音箱。
如果再加上 cpolar,则多了一层:
人在外面 → 公网地址 → XiaoMusic 管理页面。
整条实际配置链路是:
极空间 → SSH → Docker → hanxi/xiaomusic → 58090:8090 → 小米账号与设备 → 搜索歌曲 → 播放列表 → cpolar → 58090 随机公网访问 → xiaomusic 固定二级子域名。
这次能够确认的具体内容包括:
ssh root@IP- Docker 环境检查
hanxi/xiaomusic58090:8090XIAOMUSIC_PUBLIC_PORT=58090/xiaomusic_music:/app/music/xiaomusic_conf:/app/confhttp://极空间IP:58090- 配置小米账号和密码
- 页面识别到设备
- 勾选设备并保存
- 搜索"周杰伦"
- 歌曲进入播放列表
- 播放测试
- 安装 cpolar
9200管理入口- 隧道名
xiaomusic - 本地地址
58090 China Topchina TopSub Domain- 固定二级子域名
xiaomusic
这篇没有强行写成第一人称"我家里正好有一台闲置小爱音箱"的故事,因为现有素材不足以支撑这样的真实个人经历。
更适合它的是一个家庭使用场景:
NAS 已经存着音乐,小爱音箱也已经放在家里,真正要解决的是怎么让这两样现成设备开始配合。
人物感也放在这个生活判断里:
技术配置最终不是为了多一个后台,而是为了以后少折腾一步。
至于"不用会员""完全脱离在线曲库""所有语音指令都能直接调用本地音乐""外网点一下家里的音箱就一定播放"等更大的结论,这次没有逐项完整验证,因此新版没有继续把它们写成已经确定的结果。