navidrome主页

前言

我最近突发奇想,想搭建一个音乐平台,但找了一圈,终于在这个强大的 Bing 找到了这个

Navidrome

Navidrome,其优点是完全免费,且兼容Subsonic的几乎全平台APP!但是缺点是它的安装文档只有英文(当然软件本身是支持中文的),且搭建过程对于Centos稍微有些麻烦,主要是在ffmpeg的安装上(必装依赖),这里选择手动安装。

这里是项目地址 https://github.com/navidrome/navidrome

开始

系统环境选择 Centos 7

先安装所需要的依赖

FFMPEG

这是一个用来转码的应用,在 Navidrome 程序里面以必装依赖存在,所以我们必须要先装FFMPEG

首先查看你服务器上是否有FFMPEG 可以复制以下代码进你的终端

whereis ffmpeg

如果只返回了 ffmpeg: 且后面没有紧跟着目录的话,就代表没有安装。你就可以不管他

先创建一个目录

mkdir /root/ffmpeg

然后输入

cd /root/ffmpeg

下载地址:https://johnvansickle.com/ffmpeg/

根据你的CPU架构来来下载对应的包,例如x86的

选择 ffmpeg-release-amd64-static.tar.xz 这个版本,右键它复制其链接

然后使用wget指令来下载包

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz

下载完毕后解压压缩包

tar xvf ffmpeg-release-amd64-static.tar.xz

测试命令执行

首先进入解压出来的文件夹,ffmpeg-x.x.x-amd64-static 为你刚刚解压出来的文件夹

cd ffmpeg-x.x.x-amd64-static

解压出来的目录名字也有可能不一样,可以使用

ll

指令来查看你那个目录,如果你有宝塔那就更方便了

进入后测试ffmpeg是否可以正常使用

./ffmpeg

正常会显示下面内容

返回内容

将 ffmpeg 和 ffprobe 移动到 shell 的路径中 直接输入以下命令来将 ffmpeg 和 ffprobe 移动到 bin 来让命令全局生效

mv ffmpeg ffprobe /usr/local/bin/

在命令行输入以下命令来测试,如果出现了和刚刚 ./ffmpeg 命令相同的返回内容,即表示安装成功

ffmpeg

安装Navidrome

官方提供了二进制安装和编译安装两种方式

直接用二进制方式进行安装 如果你想使用编译安装,可以查看官方文档: https://www.navidrome.org/docs/installation/build-from-source/

安装之前要注意一下

官方在文档里明确提出了不要使用root用户来进行安装,会有很大的安全隐患!

官方原话:

You should NOT run Navidrome as root. Ideally you should have it running under its own user. Navidrome only needs read-only access to the Music Folder, and read-write permissions to the Data Folder.

基于此,我们第一步是应该首先建立一个新的用户,当然如果你已有一个非root的可登录用户,也可忽略!

建立新用户

直接创建一个叫 Navidrome 的用户 一定要英文!!

useradd navidrome

创建好后设置该用户的密码

passwd navidrome

密码设置好后,我们便需要进入该用户,使用新建的该用户来完成接下来的步骤!!

su navidrome

接下来创建一个目录

注意以下所有带sudo的命令均可能需要输入密码,改密码为你设置的用户名密码

navidrome改为你设置的用户名 其中-o后面为用户名,-g后面为组名

sudo install -d -o navidrome -g navidrome /opt/navidrome
sudo install -d -o navidrome -g navidrome /var/lib/navidrome

若输入密码后提示 不在 sudoers 文件中。此事将被报告 请看这里:https://zhuanlan.zhihu.com/p/113267069

接下来就可以下载 Navidrome 的包了

下载二进制文件

我们直接去 https://github.com/navidrome/navidrome/releases 找到最新的版本 找到自己的平台,比如我是用x86架构的平台且为Linux系统。所以我这边选择navidrome_0.47.5_Linux_x86_64.tar.gz 用右键选择复制链接 我们回到命令行,找到当前用户的根目录,以下为命令

cd ~

然后使用wget指令来下载他的包 例如

wget https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Linux_x86_64.tar.gz

链接可以换成你需要下载的链接

然后对其进行解压

sudo tar -xvzf navidrome_0.47.5_Linux_x86_64.tar.gz -C /opt/navidrome/

解压出来后,我们要给予权限。这里第一个 navidrome 代表用户名,第二个 navidrome 代表组名

sudo chown -R navidrome:navidrome /opt/navidrome

创建配置文件

使用vi/vim,或者直接用sftp来创建和修改文件,当然宝塔创建也OK nano编辑器也可以的 我们在 /var/lib/navidrome/ 文件夹创建一个navidrome.toml文件 用在命令上就是:(如果没装nano先用yum install -y nano命令来安装)

nano /var/lib/navidrome/navidrome.toml

以下是推荐配置

LogLevel = 'info' #log等级
Port = 8465 #运行端口
MusicFolder = '/var/music' #音乐目录
EnableGravatar = true #使用Gravatar
EnableUserEditing = true #用户编辑
PasswordEncryptionKey = true
ReverseProxyWhitelist = '0.0.0.0'
EnableDownloads = false #开始下载功能
DEVACTIVITYPANEL = false #管理面板?

这里还可以加入其他的配置选项,具体参考官方文档 https://www.navidrome.org/docs/usage/configuration-options/

设置开启自启

在 /etc/systemd/system/ 文件夹下创建一个 <navidrome@.service> 名的文件

sudo nano /etc/systemd/system/navidrome@.service

当然,你也可以用宝塔创建,比较方便 将下面的内容加进去 注意:user和group分别代表用户名和组名都改成自己的!

[Unit]
Description=Navidrome Music
After=remote-fs.target network.target
AssertPathExists=/var/lib/navidrome

[Install]
WantedBy=multi-user.target

[Service]
User=navidrome
Group=navidrome
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
WorkingDirectory=/var/lib/navidrome
TimeoutStopSec=20
KillMode=process
Restart=on-failure

# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
ReadWritePaths=/var/lib/navidrome

# You can uncomment the following line if you're not using the jukebox This
# will prevent navidrome from accessing any real (physical) devices
#PrivateDevices=yes

# You can change the following line to `strict` instead of `full` if you don't
# want navidrome to be able to write anything on your filesystem outside of
# /var/lib/navidrome.
ProtectSystem=full

# You can uncomment the following line if you don't have any media in /home/*.
# This will prevent navidrome from ever reading/writing anything there.
#ProtectHome=true

# You can customize some Navidrome config options by setting environment variables here. Ex:
#Environment=ND_BASEURL="/navidrome"

之后执行以下三行代码即可。#后面的内容不要复制粘贴进去,那是给你们做解释用的

sudo systemctl daemon-reload #重载配置文件
sudo systemctl start navidrome@navidrome #开启navidrome进程
sudo systemctl status navidrome@navidrome #查看navidrome进程状态

若查看状态为绿色,直接去你的 ip:端口号 访问即可 如果访问没问题了,开启开机自启

sudo systemctl enable navidrome@navidrome

尾声

一定要去宝塔面板开启对应端口,或者自行在防火墙把端口打开 不然真的没法访问的

当然你也可以使用nginx的反向代理,通过域名来访问