Navidrome 是一款开源音乐服务器,可以让你在任何地方串流自己的音频收藏。它让你能从任意浏览器或移动设备收听自己的音乐库,就像属于你自己的 Spotify。
本文介绍如何在 Fedora Linux 上使用 Podman 安全地运行 Navidrome。Navidrome 构建了官方多-a架构容器镜像,包括 linux/amd64、linux/arm64 以及 linux/arm/v6/v7,因此这套方案的可移植性很强。无论硬件是标准的 x86 PC 服务器,还是低-p功耗的 ARM 架构 Raspberry Pi,本-t流程都适用。
Navidrome Music Server 的官方镜像见:
deluan/navidrome – Docker Image
相关链接:https://discussion.fedoraproject.org/t/installing-navidrome-using-podman/202608
开始前需要准备:一台 Fedora Linux 主机,并已安装 Podman;使用 podman-compose 方式时还需要 podman-compose。修改 SELinux 上下文和目录属主需要管理员权限(示例中以 sudo 执行)。
在 Podman 和 Podman Compose 中使用官方容器镜像
容器镜像可用于 linux/amd64、linux/arm/v6、linux/arm/v7 和 linux/arm64 平台,其中包含运行 Navidrome 所需的一切。
拉取镜像:
[nico@stamfordbridge navidrome\]$ podman pull deluan/navidrome
✔ docker.io/deluan/navidrome:latest
Trying to pull docker.io/deluan/navidrome:latest…
Getting image source signatures
Copying blob 75c0824146ea done |
Copying blob 4f4fb700ef54 done |
Copying blob 4f4fb700ef54 done |
Copying blob e1dbf20ea67c done |
Copying blob 1cc3d825d8b2 done |
Copying config 0c9bad3bd7 done |
Writing manifest to image destination
0c9bad3bd7305815d56fe588a64f9172a8bb6aa2bfef3ad77e764c8694e7e860
注意,示例中使用的镜像标签是 latest,没有固定具体版本;重新拉取或重建容器时会得到当时的最新镜像。
如果你的 Fedora Linux 服务器启用了 SELinux,需要为 Data 和 Music 目录及其内容添加 container_file_t SELinux 上下文:
[nico@stamfordbridge navidrome]$ sudo semanage fcontext -a -t container_file_t '/home/nico/navidrome/Data(/.\*)?'
[nico@stamfordbridge navidrome]$ sudo semanage fcontext -a -t container_file_t '/home/nico/navidrome/Music(/.\*)?'
将 SELinux 策略应用到 Data 和 Music 目录:
[nico@stamfordbridge navidrome]$ sudo restorecon -R /home/nico/navidrome/Data
[nico@stamfordbridge navidrome]$ sudo restorecon -R /home/nico/navidrome/Music
把 /home/nico/navidrome/Data 和 /home/nico/navidrome/Music 的所有者改为 1000。下面的 chown 会改变这两个目录的属主,执行前请确认路径与 UID:GID:
[nico@stamfordbridge navidrome]$ podman unshare chown 1000:1000 /home/nico/navidrome/Data
[nico@stamfordbridge navidrome]$ podman unshare chown 1000:1000 /home/nico/navidrome/Music
使用 podman-compose
创建 podman-compose.yml 文件,内容如下(或者把下面的 navidrome 服务加入你已有的文件):
[nico@stamfordbridge navidrome]$ cat podman-compose.yml
version: "3"
services:
navidrome:
image: deluan/navidrome:latest
user: 1000:1000 # should be owner of volumes
ports:
- "4533:4533"
restart: unless-stopped
environment:
# Optional: put your config options customization here. Examples:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
volumes:
- "/home/nico/navidrome/Data:/data"
- "/home/nico/navidrome/Music:/music:ro"
用 podman-compose up -d 启动 navidrome 容器:
[nico@stamfordbridge navidrome]$ podman-compose up -d
注意,上面的环境变量只是示例,并非必需;示例中的取值本来就是默认值。
使用 podman 命令行工具
直接用 podman 运行:
[nico@stamfordbridge navidrome]$ podman run -d - name navidrome - restart=unless-stopped - user $(id -u):$(id -g) -v /home/ec2-user/navidrome/Music:/music -v /home/ec2-user/navidrome/Data:/data -p 4533:4533 -e ND_LOGLEVEL=info deluan/navidrome:latest
c00c31d49ec5e0f0a0141aef9e2b69abf6a1b5f0604515bc7111f3e0ef398237
[nico@stamfordbridge navidrome]$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c00c31d49ec5 docker.io/deluan/navidrome:latest 9 seconds ago Up 9 seconds 0.0.0.0:4533->4533/tcp navidrome
自定义
user参数最好与音乐库所有者的 UID:GID 一致,以避免权限问题。测试时可以省略该参数,但按经验,生产环境的容器不应以 root 运行。- 记得把卷路径改为你本地的路径。
/data是 Navidrome 存放数据库和缓存的位置,/music是存放音乐文件的位置。 - 配置选项可以按需通过环境变量自定义:使用 podman-compose 时,把它们加到 environment 段或 yml 文件中;使用 podman CLI 时用 -e 参数,例如:-e ND_SESSIONTIMEOUT=24h。
- 如果想让 Podman 中运行的 Navidrome 使用配置文件,可以在
/data目录中创建navidrome.toml配置文件,并设置选项ND_CONFIGFILE=/data/navidrome.toml。




