标签搜索

目 录CONTENT

文章目录

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

咕咕鸽
2022-01-15 / 28 评论 / 3 点赞 / 6,016 阅读 / 2,132 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
广告 广告

前言

随着国内版权意识的提高,现在想听一首歌曲,往往我们可能要切换3-4个APP——网易云音乐、QQ音乐、咪咕音乐……切换起来很麻烦,有的APP就算你买了VIP服务,下载的歌曲还是加密的,一旦VIP到期后某些歌你还听不了,非常蛋疼。

最近被朋友推荐入了苹果自己家的音乐APP,感觉还不错,但是搜索特定的几个歌手的歌曲时候,也发现搜索不到(没错,就是南京小李的)

正好自己目前在捣鼓PT,手握几个大型PT站,资源方面不成问题,于是乎就又想着自建一个类似云音乐的服务,这样随时随地在任何地方都能播放我想听的任何歌曲,再也不用担心歌曲被下架了。

为什么说“又”,因为之前就折腾过一个类似的服务——利用Docker自建个人音乐流服务器面板——koel 因为有小伙伴反映这个汉化做的不是很好(没有汉化),所以我也一直在寻找别的代替品,正好前俩天发现一个非常好的项目——Navidrome,使用Go语言开发,内存占用很低,界面简单,而且还兼容Subsonic API,就搞了一个玩玩。

image-20220115114001097

image-20220115123006851

image-20220115114025610

image-20220115114325583

image-20220115114059589

fcdcd04f251544c0a7f9e87ba96fa3bf e131bc6663d04f07945735e1d67a9c65 76d0466e07f141aeb43e3ef58a58f799

先来说说优点:

  • 几乎可以播放任何音频格式
  • 多用户,每个用户都有自己的播放次数、播放列表、收藏夹等。
  • 资源使用率非常低。例如:300GB的资料库(约29000首歌曲),使用不到50MB的内存。(@小z反馈待机状态40Mb左右)
  • 界面简洁,支持中文
  • 支持Subsonic API,也就是说Subsonic能用的客户端,Navidrome都能用

iOS: play:Sub, substreamer, Amperfy, iSub
Android: DSub, Subtracks, subreamer, Ultrasonic, Audinaut
网页端: Subplayer, Airsonic Refix, Aurial, Jamstash, Subfire
桌面端: Sublime Music(Linux)和Sonixd(Windows/Linux/MacOS)
命令行: Jellycli(Windows/Linux)和STMP(Linux/MacOS)

【2022年5月15日更新】桌面版本强烈推荐:sonixd

下载地址:https://github.com/jeffvli/sonixd/releases

界面非常简洁大气!

再来说说缺点:

  • 暂时没找到自动获取歌词的方法
  • 不支持通过界面上传/删除歌曲(作者说的是为了安全考虑,不过我们会后面会介绍如何上传/删除)

官方示例网站:

https://www.navidrome.org/demo/

https://demo.navidrome.org/app/

搭建环境

开始搭建

YouTube:https://youtu.be/7XtLD8y8EF0

哔哩哔哩:

采用docker-compose来搭建。

官方的配置有一个小问题,不能通过Web页面上传音乐,上传这个问题后面会介绍一个临时解决办法(感谢@lala)。

apt update -y  ## 升级包

mkdir -p ~/data/docker_data/navidrome   ## 创建文件夹

cd ~/data/docker_data/navidrome   ## 进入文件夹

nano docker-compose.yml   ## 创建docker-compose

dockerhub的docker-compose配置样例(我们不用这个):

# This is just an example. Customize it to your needs.

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    ports:
      - "4533:4533"
    environment:
      # Optional: put your config options customization here. Examples:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_BASEURL: ""
    volumes:
      - "./data:/data"
      - "/path/to/your/music/folder:/music:ro"

贴一个我自己实际环境里的配置给大家参考:

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    ports:
      - "4533:4533"   # 左边可以改成自己服务器未被占用的端口
    environment:
      # Optional: put your config options customization here. Examples(这些都是可选的):
      ND_SCANSCHEDULE: 1m
      ND_LASTFM_ENABLED:
      ND_LASTFM_APIKEY: eabdf1d50c0e912487521b154a8es1fda694 # 修改成自己的APIKEY
      ND_LASTFM_SECRET: a67666ca4as89d7231cf9fc990ef8a2ae6d  # 修改成自己的SECRET
      ND_SPOTIFY_ID: 4cd036bsqd1594bd0b41bc8f94c46846d  # 修改成自己的ID
      ND_SPOTIFY_SECRET: 249ca01a48be46fcb084523a6b267661bb1  # 修改成自己的SECRET
      ND_LASTFM_LANGUAGE: zh
      ND_LOGLEVEL: info
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
    volumes:
      - "./data:/data"
      - "/root/data/docker_data/qbittorrent/music:/music:ro"  # 冒号左边修改成自己本地的音乐文件夹路径

  miniserve:
    image: svenstaro/miniserve:latest
    depends_on:
      - navidrome
    ports:
      - "4534:8080"
    volumes:
      - "/root/data/docker_data/qbittorrent/music:/downloads"  # 冒号左边修改成自己本地的音乐文件夹路径
    command: "-r -z -u -q -p 8080 -a imgugugege:szwl2080! /downloads"  # imgugugege:szwl2080! 修改成自己的账号:密码
    restart: unless-stopped

前面说了因为navidrome不支持上传功能,所以这里我们加一个miniserve,之后就可以通过miniserve来上传音乐了。

记得把password这个字段改为一个高强度的密码。当然如果你不需要的话可以把这个容器相关的配置删掉。

下面来一一解释一下里面的各项参数如何设置。

外部集成

配置 Navidrome 可以从 Last.fm 和 Spotify 获取专辑信息和图像

Last.fm

首先需要一个 Last.fm 免费帐户,其次你要能访问 Last.fm

转到 https://www.last.fm/api/account/create 并创建一个 API 帐户。只有 应用程序名称 字段是强制性的

image-20220115121441548

提交表单后,可以从 API account Created 页面获取 API KeyShared Secret

847f4d5bd298477c906c48a93f27c861

将上面的值复制到 Docker 的环境变量

ND_LASTFM_ENABLED 设置 false 为完全禁用 Last.fm 集成
ND_LASTFM_APIKEY Last.fm 获取的 API Key
ND_LASTFM_SECRET Last.fm 获取的 Shared Secret
ND_LASTFM_LANGUAGE 用于从 Last.fm 检索的语言的两个字母代码,简体中文为 zh

Spotify

在 Spotify 中创建一个免费帐户,然后按照以下步骤操作:

单击 Spotify 的开发者仪表板中的 CREATE AN APP 按钮:https://developer.spotify.com/dashboard/applications

b50060ed5b054509b32749d3bbac61c5

填写所有字段并单击 CREATE 按钮:

2748d651ccc64aa48ce393dc1383acef

将值复制到 Docker 的环境变量

image-20220115122113585

ND_SPOTIFY_ID Spotify 客户端 ID
ND_SPOTIFY_SECRET Spotify 客户端 Secret

转码设置
之所以要转码,是因为无损的文件比较大,一般都有几百M,所以需要进行转码成,便于客户端进行播放

但 Navidrome 出于安全原因,禁用了从 Web 界面更改参数,所以需要先修改 Docker 的环境变量

ND_ENABLETRANSCODINGCONFIG 设置为 true 才能支持转码功能
ND_TRANSCODINGCACHESIZE 转码缓存的大小。设置 0 为禁用缓存,默认为 100MB

转码

默认设置中有两个转码方案,一个是转 MP3,另一个是转 OPUS

df3d3213df524522aca35993346bbc4a

可以根据需要修改 比特率

d5663aef380b4d9c8e4eea9943a87f82

然后选择需要转码的客户端

关于客户端,可以看看 Subsonic Apps 列表:http://www.subsonic.org/pages/apps.jsp

iOS: play:Sub, substreamer, Amperfy, iSub
Android: DSub, Subtracks, subreamer, Ultrasonic, Audinaut
网页端: Subplayer, Airsonic Refix, Aurial, Jamstash, Subfire
桌面端: Sublime Music(Linux)和Sonixd(Windows/Linux/MacOS)
命令行: Jellycli(Windows/Linux)和STMP(Linux/MacOS)

edafa2f64056464bad2735257b2e8084

以 Android 客户端 Subsonic为例子,

671eafac94ff401485b9a93908743860

修改完成

6be93fc605824f6e8665245098c9824e

运行

全部参数设置好之后,运行docker-compose up -d

访问IP:4533端口就可以有界面出现了,反向代理用NginxProxyManager完成,不会的可以看视频教程。

访问IP:4534端口就可以上传下载歌曲了。

image-20220115113851049

补充:filebrowser管理歌曲文件

docker run -d --restart=always \
    -v /root/data/docker_data/qbittorrent/music:/srv \
    -p 8003:80 \
    --name filebrowser \
    langren1353/filebrowser-ckplayer

最后

目前遇到的一个痛点是,歌曲都没有歌词,我也在网上搜索了一下,有找到一个叫做“音乐标签”的软件,可以获取歌曲的歌词信息,不过要Windows系统才能使用,我在另一台服务器上安装了这个软件,但是不知道为啥上传之后歌曲名字都变成乱码了,有需要的小伙伴可以到网盘下载这个软件试试。解压密码:www.coolapk.com

燥起来吧!

参考

https://blog.csdn.net/wbsu2004/article/details/121027463

https://github.com/navidrome/navidrome

https://www.navidrome.org/

https://hub.docker.com/r/deluan/navidrome

https://lala.im/7660.html

https://youtu.be/47ZZpJebiG0

https://www.xiaoz.me/archives/16527

3
广告 广告

评论区