前言
有时候听到一首歌,真正想分享的并不只是歌名。封面、歌手、某一句歌词,再加上当时的情绪,放在一起才更像完整的"听歌记录"。但直接截播放器页面往往信息太杂,自己再去排版又显得麻烦。
MusicCard做的事情比较简单:把歌曲封面、歌名、歌手和歌词整理成一张视觉卡片。相比专门在电脑上装设计软件,它更适合放在NAS里长期运行,需要时打开浏览器直接使用。
这次我把MusicCard部署到极空间:先开启SSH和Docker,拉取镜像,再分别保留Docker CLI和Docker Compose两种启动方式,把容器3000端口映射到宿主机9500。
本地页面确认能正常打开以后,再继续给9500配置外部访问入口,从随机公网地址切换到固定二级子域名。整篇重点不是把NAS写成"万能创作机器",而是把极空间 → Docker → MusicCard → 9500 → 远程访问这条链完整跑通。
这类小工具其实很适合NAS:它不需要单独占一台电脑,也不用每次重新安装,服务一直跑着就行。真正需要做的只是把容器、端口和访问入口整理清楚,后面想用的时候直接打开页面。
而且以后如果继续往极空间里增加类似的小应用,也可以沿用同样的部署和远程访问思路。

1 MusicCard适合解决什么问题
MusicCard的定位很直接:
把一首歌的信息整理成一张适合分享的音乐海报。
相比直接截播放器界面,它更适合把:
- 歌曲封面;
- 歌名;
- 歌手;
- 歌词;
- 视觉排版;
集中到一张卡片里。
如果本身已经有极空间或其他NAS,把这种小工具放在Docker里长期运行,会比每次临时找在线工具更方便。
2 这篇实际要跑通哪些内容
整个流程分成三段。
第一段:
极空间 → SSH → Docker
第二段:
Docker → MusicCard → 9500
第三段:
外部浏览器 → 公网地址 → MusicCard:9500
先把本地页面跑通,再处理远程访问。
3 先开启极空间SSH
进入极空间系统设置:

继续打开对应设置:

按页面提示输入:
知晓风险

然后填写账号密码并启用SSH:

4 先测试SSH能不能连上
从电脑终端连接极空间:

输入密码:

连接成功:

做到这里,可以确认后面能够通过命令行继续管理Docker。
5 打开极空间Docker
进入Docker:

可以把Docker添加到桌面,后面更容易找到:

确认:

然后选择Docker数据存放的硬盘:

加载完成:

6 验证Docker服务状态
执行:
shell
systemctl status docker.service
结果:

确认Docker服务正常以后,再继续部署MusicCard。
7 部署前查看Docker版本
按当前步骤执行:
shell
docker -v
结果:

这一步主要用于确认当前Docker环境可用。
8 拉取MusicCard镜像
执行:
shell
docker pull registry.cn-hangzhou.aliyuncs.com/jeson/musiccard
结果:

本次使用的镜像地址为:
registry.cn-hangzhou.aliyuncs.com/jeson/musiccard
9 创建MusicCard目录
执行:
shell
mkdir -p /data/musiccard
cd /data/musiccard
结果:

这次目录使用:
/data/musiccard
后面的Compose文件也放在这里。
10 方法一:直接用docker run启动
如果只想快速启动,可以执行:
shell
docker run -d \
--restart always \
--name musiccard \
-p 9500:3000 \
registry.cn-hangzhou.aliyuncs.com/jeson/musiccard
这里比较关键的参数是:
- 容器名:
musiccard - 宿主机端口:
9500 - 容器端口:
3000 - 重启策略:
always
启动结果:

所以后面浏览器真正访问的是:
极空间IP:9500
11 方法二:使用Docker Compose
如果更习惯用Compose维护,也可以在部署目录创建:
docker-compose.yml
内容保持如下:
shell
vim docker-compose.yml
version: '3.9'
services:
jeson:
image: registry.cn-hangzhou.aliyuncs.com/jeson/musiccard
ports:
- '9500:3000'
container_name: musiccard
restart: always
然后启动:
shell
docker-compose up -d
结果:

两种方式的目的相同:
让MusicCard容器运行,并把3000映射到9500。
实际部署时选一种即可,不需要同时重复启动两套容器。
12 先验证局域网9500
浏览器访问:
http://极空间IP:9500
页面:

能够正常打开以后,可以确认:
浏览器 → 极空间9500 → MusicCard容器3000
这一层已经跑通。
13 本地使用到这里已经完成
如果MusicCard只准备在家里局域网使用,到这里已经够了。
以后只需要打开:
极空间IP:9500
就能进入MusicCard页面。
只有确实需要:
- 外出时使用;
- 手机在其他网络访问;
- 给其他设备保留统一入口;
才需要继续配置公网访问。
14 安装cpolar
执行:
shell
sudo curl https://get.cpolar.sh | sh
安装:

然后查看服务状态:
shell
sudo systemctl status cpolar
结果:

确认cpolar正常运行以后,再进入Web管理页面。
15 打开cpolar管理界面
通过:
极空间IP:9200
访问cpolar Web UI:

登录以后,后面的隧道都在这里配置。
16 给MusicCard的9500创建HTTP隧道
创建参数:
- 隧道名称:
music - 协议:HTTP
- 本地地址:
9500 - 域名类型:随机域名
- 地区:
China Top
配置页面:

这里映射的是MusicCard实际对外提供服务的9500端口。
17 先用随机地址验证外网访问
创建成功以后进入在线隧道列表:

从其他网络打开生成的公网地址:

页面能够正常打开以后,可以确认:
外部浏览器 → 公网地址 → 极空间9500 → MusicCard
已经跑通。
18 随机域名适合测试
随机地址的价值主要是:
先确认外网能不能访问MusicCard。
如果只是偶尔使用,做到这里已经够了。
如果想长期把它保存在手机或浏览器书签里,再继续配置固定二级子域名。
19 保留固定二级子域名
进入预留页面:

这次示例使用:
musicc
作为二级子域名名称:

实际使用时,以自己账号里成功保留的名称为准。
20 编辑MusicCard隧道
回到:
隧道管理 → 隧道列表
找到对应隧道:

进入编辑以后修改:
- 域名类型:二级子域名;
- Sub Domain:填写已经保留的名称;
- 地区:
China Top。
更新:

21 确认固定地址已经生效
重新进入在线隧道列表:

可以看到原来的随机地址已经切换成固定二级子域名。
22 再从外部设备打开一次
使用固定地址访问:

页面能够正常进入以后,固定远程入口也完成。
现在整条链变成:
手机 / 平板 / 其他电脑 → 固定公网地址 → 极空间9500 → MusicCard
23 Docker CLI和Compose应该怎么选
这篇同时保留了两种部署方法。
如果只是临时测试:
docker run更直接。
如果准备长期维护:
Docker Compose更容易集中保存配置。
重点不是哪一种"更高级",而是不要在同一台机器上无意中重复启动两个占用相同9500端口的容器。
24 远程访问解决的只是"怎么打开页面"
cpolar负责的是:
让外部设备能够访问极空间里的MusicCard。
它不会改变MusicCard本身的功能,也不会替代应用自己的权限管理。
如果后面MusicCard保存了私人内容、配置或其他数据,仍然应该根据应用自身能力控制访问范围。
25 这套方案真正适合什么人
比较适合:
- 已经有极空间或NAS;
- 喜欢用Docker部署小工具;
- 经常做音乐分享;
- 想把MusicCard长期放在自己的设备上;
- 希望手机和电脑都能使用同一个入口。
如果只是偶尔生成一次海报,用本地9500已经够用。
如果确实需要跨网络访问,再增加固定公网地址会更方便。
26 最后把完整技术链重新看一遍
基础环境:
极空间 → SSH → Docker
部署:
MusicCard镜像 → 容器3000
端口映射:
9500:3000
本地访问:
极空间IP:9500
随机远程:
公网随机地址 → 9500
固定远程:
二级子域名 → 9500
实际完成:
- SSH开启;
- Docker启用;
- Docker状态检查;
- MusicCard镜像拉取;
/data/musiccard目录;- docker run部署;
- Docker Compose部署方法;
- 9500本地访问;
- cpolar安装;
- 随机公网访问;
- 固定二级子域名;
- 外部设备访问。
这样MusicCard才真正从一个本地Docker容器,变成可以长期保留在NAS里的音乐海报工具。
总结
这次真正跑通的是一条完整的MusicCard部署链:先在极空间开启SSH和Docker,拉取MusicCard镜像,再把容器3000端口映射到宿主机9500,通过浏览器确认本地页面能够正常打开。
部署方式同时保留了docker run和Docker Compose两套方法。前者适合快速启动,后者更适合长期维护配置;实际使用时选择一种即可,不需要为了"更完整"同时运行两份相同服务。
远程部分是在本地页面已经正常以后继续增加的能力。随机公网地址先验证链路,固定二级子域名再解决长期入口变化的问题。
对于本身就有NAS的人来说,MusicCard的价值不是让NAS承担复杂设计工作,而是把一个小而明确的音乐海报工具长期放在自己的设备上,需要时电脑、手机或平板都能从同一个入口打开。