Navidrome 搭建个人音乐服务器
1. Navidrome 介绍
1.1. 音乐站点效果展示
1.2. 介绍
官网简介: Navidrome 是一个自托管的开源音乐服务器和流媒体。它让您可以自由地从任何浏览器或移动设备收听您的音乐收藏。它还可以用作轻量级的 Subsonic-API 兼容服务器,可以与任何 兼容 Subsonic 的客户端一起使用。
什么是流媒体?
流媒体指的是通过网络
传输的 媒体,是在网络中流动
的媒体,比如视频流、音频流、文字流等。什么是视频流、音乐流?
在网络中传输的数据都是以二进制的数据传输的,而我们认知的媒体都是连续的,于是就需要对媒体进行处理,得到可以在网络中进行传输的数据流。而对应的处理技术就称为流媒体技术
1.3. 特点
- 处理非常大的音乐收藏
- 流式传输几乎任何可用的音频格式
- 读取并使用您精心策划的所有ID3标签中的元数据
- 多用户,每个用户都有自己的播放次数、播放列表、收藏夹等
- 非常低的资源使用率:例如:具有 300GB(~29000 首歌曲)的库, 它使用不到 50MB 的 RAM
- 多平台,可在 macOS、Linux 和 Windows 上运行, 还提供了 Docker 镜像
- 自动监视您的库的更改、导入新文件和重新加载新元数据
- 基于 Material UI 的主题化、现代和响应式 Web 界面, 用于管理用户和浏览您的图书馆
- 与所有 Subsonic/Madsonic/Airsonic 客户端兼容, 查看经过测试的客户列表
- 即时转码/下采样, 可以为每个用户/玩家设置, 支持 Opus 编码
1.4. 支持的平台
除了可以使用搭建的网页端 Web UI,Navidrome 还可以与以下所有 Subsonic 客户端兼容。以下客户端经过测试并确认可以正常工作:
- iOS:substreamer、Amperfy、iSub
- 安卓:DSub、Subtracks、substreamer、Ultrasonic、Audinaut
- 网络:Subplayer、Airsonic、Refix、Aurial、Jamstash、Subfire
- 桌面:Sublime Music(Linux)、Sonixd(Windows/Linux/macOS)
- CLI:Jellycli(Windows/Linux)、STMP(Linux/macOS)
2. docker 和 docker-compose 安装
由于 Navidrome 提供了 Docker
镜像,使用 docker 进行安装部署是非常方便的,也不用担心环境问题。
我是使用 docker-compose
对 docker 的镜像包进行安装和部署。
关于这二者的介绍可参考这篇文章。
下面是安装步骤。
可能你的 Ubuntu 上有旧版本的 docker,这里可以先卸载一下1
sudo apt-get remove docker docker-engine docker.io containerd runc
安装几个会用到的工具1
2
3
4
5
6
7sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
防伪1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
下载仓库文件1
2
3echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 docker 引擎1
2sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
安装 docker-compose1
2sudo curl -L https://get.daocloud.io/docker/compose/releases/download/v2.19.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
大多数云服务器是使用的 CentOS 的系统,如果你需要将 Navidrome 部署到云服务器上,就按照以下指令进行安装。
旧版本卸载1
2
3
4
5
6
7
8sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装yum-utils软件包1
2
3
4sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装docker引擎1
sudo yum install docker-ce docker-ce-cli containerd.io
若报 containerd.io
的版本错误,则重新下载最新的 containerd.io
1
sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
安装docker-compose1
2sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3. 使用 docker-compose 部署 Navidrome
在你电脑磁盘空间充足的下创建一个项目文件夹,如 D://music-server
在该文件夹下新建以下三个子文件夹1
2
3
4music-server
conf # 存放 docker-compose 的配置文件
music # 存放你的音乐文件
db # 存放 Navidrome 运行时的一些数据文件
在 conf
路径下创建一个 docker-compose.yml
文件,贴入以下代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26version: "3"
services:
navidrome1:
container_name: navidrome
image: deluan/navidrome:latest
user: 1000:1000
ports:
- "4533:4533"
restart: unless-stopped
environment:
ND_PORT: 4533
ND_DEFAULTLANGUAGE: zh-Hans
ND_SCANSCHEDULE: 1m
ND_ENABLETRANSCODINGCONFIG: 1
ND_ENABLEDOWNLOADS: 1
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
ND_UIWELCOMEMESSAGE: "welcome to k0191's music server"
volumes:
- "D://music-server/db:/data"
- "D://music-server/music:/music:ro"
打开 Windows命令台, 在其中输入1
docker-compose -f d://music-server/conf/docker-compose.yml up -d
查看是否运行成功,可以在命令台输入:1
docker ps
打开浏览器,输入http://localhost:4533/
就可以看到一个登录界面,第一次登陆创建的用户为 admin
用户,可以创建和管理其他用户。
Linux上的配置文件和Windos一样,只用更改相应的路径即可。
如:在将/home/k019/project/music-server
作为我的项目根目录。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26version: "3"
services:
my-navidrome:
container_name: navidrome
image: deluan/navidrome:latest
user: 1000:1000
ports:
- "4533:4533"
restart: unless-stopped
environment:
ND_PORT: 4533
ND_DEFAULTLANGUAGE: zh-Hans
ND_SCANSCHEDULE: 1m
ND_ENABLETRANSCODINGCONFIG: 1
ND_ENABLEDOWNLOADS: 1
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
ND_UIWELCOMEMESSAGE: "welcome to k0191's music server"
volumes:
- "/home/k0191/project/music-server/db:/data"
- "/home/k0191/project/music-server/music:/music:ro"
启动指令1
docker-compose -f /home/k0191/project/music-server/conf/docker-compose.yml up -d
3.1. 参数说明
参数 | 说明 |
---|---|
version 3 | 表示compose对docker版本的支持,这里是compose的版本,并非是docker的版本 |
services | 表示一个该配置文件的所有容器实例,支持配置多个容器实例 |
my-navidrome | 服务名称,同一网络上的其他容器可以使用服务名称或别名来连接到其他服务的容器 |
container_name | 容器实例的名称 |
image | 发布的实例镜像的名称,以及版本,latest:表示最新的 |
ports | 暴露的端口, 指定两个端口(HOST:CONTAINER),可设定多组 |
restart | 重启策略 “no”: 默认,在任何时候都不会重启容器 always: 容器总是重新启动 on-failure: 退出代码出错时重启 unless-stopped: 总是重新启动容器,除非容器停止 |
environment | 设置运行的环境变量 |
volumes | 挂载,即将本地路径与容器内的路径进行映射 |
3.2. Navidrome 环境变量说明
官网的说明: 点击前往
常用参数说明
参数 | ||
---|---|---|
ND_PORT | 服务器侦听的端口 | 4533 |
ND_ADDRESS | 服务器绑定的IP地址 | 0.0.0.0 and :: (all IPs) |
ND_BASEURL | 服务器的根目录 | / |
ND_DATAFOLDER | 数据文件存放目录,指定后,需修改上述配置文件中的挂载目录 | "./data" |
ND_MUSICFOLDER | 音乐文件存放目录,指定后,需修改上述配置文件中的挂载目录 | "./music" |
ND_DEFAULTLANGUAGE | 默认的语言, 支持简体中文, zh-Hans |
en |
ND_ENABLEDOWNLOADS | 是否可以下载 | true |
ND_SESSIONTIMEOUT | 空闲会话超时 | "24h" |
ND_LASTFM_APIKEY | 配置last.fm 所需要的 key,支持通过last.fm的API获取歌手专辑等信息 | 留空 |
ND_MAXSIDEBARPLAYLISTS | 设置UI侧栏中显示的最大播放列表数。请注意,数量过大可能会导致UI性能问题 | 100 |
ND_SCANSCHEDULE | 扫描周期,多久扫描一次音乐库 | 1m |
ND_TRANSCODINGCACHESIZE | 转码缓存 | 100MB |
ND_UIWELCOMEMESSAGE | 登录界面的欢迎信息 | 空 |
ND_SPOTIFY_ID ND_SPOTIFY_SECRET |
通过spotify获取歌曲封面信息 | 留空 |
4. 导入歌曲说明
国内使用last.fm和spotify的API服务可能会很慢,故在配置文件中没有加入这两点。一般歌曲的封面和专辑信息都包含在了歌曲的文件中,不需要额外去获取,但歌词信息不同。
Navidrome 是支持歌词显示的,需要确保你下载的歌曲中有歌词的ID3标签,但一般为了歌曲体积,网上多数是将歌词文件 与音乐文件分开管理的,所以下载歌曲时需要将歌词文件一同下载下来。然后再用 music-tag等工具将歌词导入到原歌曲文件中,这样使用 Navidrome 播放的音乐就可以看到歌词了。
这里我推荐一款修改音乐标签的工具:
MusicTag