python完美实现一个自己的音乐服务器

news2024/11/19 5:52:53

最近发现,经常用的网易云音乐,有很多歌曲下架了,能听的越来越少了;歌单里的一些歌曲,现在要开通 VIP 才能听了。其实自己常听的歌曲不是很多,现在却有很多听不了了。

怎么办呢,付费吗?花钱当然是一个好方式,花 1 分钟开通 VIP,立马就可以畅听起来。

不过前两天翻东西时刚好发现自己还有一个吃灰多年的大学时代的树莓派,不如废物利用起来,使用树莓派搭建一个自己的音乐服务器用来听歌吧。

下面的文章是使用树莓派搭建音乐服务器,如果你手上没有树莓派,那么使用任何一个云服务器都是一样的,甚至因为云服务器具备公网 IP ,使用场景更加广泛。

以上只是引言,作为技术人员,本文所做介绍只为分享一些有趣好玩的东西,请不要传播具有版权的音乐。

树莓派启动

说干就干,树莓派通电。结果太久不用,密码忘了,只能为树莓派重新烧录系统。我这里选择了 Raspberry Pi OS 轻量无桌面 Linux 系统,可以减少资源的占用。因为后面的服务都是通过 Docker 安装,其实这里选择什么发行版的 Linux 区别并不大。

链接:Raspberry Pi OS 64 位系统下载

安装 Docker

安装 Docker 过程网上教程很多,下面只简单记录。

Ubuntu 系统为了安装软件速度更快,可以先更换软件源为国内软件源。

编辑文件:

sudo vim /etc/apt/sources.list

使用下面的阿里云软件源配置进行内容替换。

deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib

安装 Dokcer,直接使用一句话脚本安装。

curl -sSL https://get.daocloud.io/docker | sh

安装过程:

linux@darcy:~ $ curl -sSL https://get.daocloud.io/docker | sh
# Executing docker install script, commit: 4f282167c425347a931ccfd95cc91fab041d414f
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sudo -E sh -c mkdir -p /etc/apt/keyrings && chmod -R 0755 /etc/apt/keyrings
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/debian/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
+ sudo -E sh -c chmod a+r /etc/apt/keyrings/docker.gpg
+ sudo -E sh -c echo "deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bullseye stable" > /etc/apt/sources.list.d/docker.list
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends docker-ce docker-ce-cli containerd.io docker-compose-plugin >/dev/null
+ version_gte 20.10
+ [ -z  ]
+ return 0
+ sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null
+ sudo -E sh -c docker version
Client: Docker Engine - Community
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.7
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:01:19 2022
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.7
  Git commit:       3056208
  Built:            Tue Oct 25 17:59:41 2022
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

================================================================================

To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:

    dockerd-rootless-setuptool.sh install

Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.


To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================

darcy@darcy:~ $

安装 docker-compose.

linux@darcy:~/music $ sudo apt install docker-compose
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libslirp0 slirp4netns
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  apparmor cgroupfs-mount containerd docker.io git git-man liberror-perl libintl-perl libintl-xs-perl libmodule-find-perl libmodule-scandeps-perl libproc-processtable-perl libsort-naturally-perl libterm-readkey-perl
  needrestart python3-attr python3-cached-property python3-distutils python3-docker python3-dockerpty python3-docopt python3-importlib-metadata python3-jsonschema python3-lib2to3 python3-more-itertools python3-pyrsistent
  python3-setuptools python3-texttable python3-websocket python3-yaml python3-zipp runc tini
Suggested packages:
  apparmor-profiles-extra apparmor-utils containernetworking-plugins docker-doc aufs-tools btrfs-progs debootstrap rinse rootlesskit xfsprogs zfs-fuse | zfsutils-linux git-daemon-run | git-daemon-sysvinit git-doc git-el
  git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn needrestart-session | libnotify-bin iucode-tool python-attr-doc python-jsonschema-doc python-setuptools-doc
Recommended packages:
  criu
The following packages will be REMOVED:
  containerd.io docker-ce docker-ce-cli docker-ce-rootless-extras
The following NEW packages will be installed:
  apparmor cgroupfs-mount containerd docker-compose docker.io git git-man liberror-perl libintl-perl libintl-xs-perl libmodule-find-perl libmodule-scandeps-perl libproc-processtable-perl libsort-naturally-perl
  libterm-readkey-perl needrestart python3-attr python3-cached-property python3-distutils python3-docker python3-dockerpty python3-docopt python3-importlib-metadata python3-jsonschema python3-lib2to3
  python3-more-itertools python3-pyrsistent python3-setuptools python3-texttable python3-websocket python3-yaml python3-zipp runc tini
0 upgraded, 34 newly installed, 4 to remove and 39 not upgraded.
Need to get 55.9 MB of archives.
After this operation, 45.4 MB disk space will be freed.
Do you want to continue? [Y/n] y
Get:1 https://mirrors.aliyun.com/debian bullseye/main arm64 runc arm64 1.0.0~rc93+ds1-5+deb11u2 [2,078 kB]
Get:2 https://mirrors.aliyun.com/debian bullseye/main arm64 containerd arm64 1.4.13~ds1-1~deb11u2 [14.7 MB]
Get:3 https://mirrors.aliyun.com/debian bullseye/main arm64 tini arm64 0.19.0-1 [209 kB]
Get:4 https://mirrors.aliyun.com/debian bullseye/main arm64 docker.io arm64 20.10.5+dfsg1-1+deb11u2 [28.8 MB]
Get:5 https://mirrors.aliyun.com/debian bullseye/main arm64 apparmor arm64 2.13.6-10 [601 kB]
Get:6 https://mirrors.aliyun.com/debian bullseye/main arm64 cgroupfs-mount all 1.4 [6,276 B]
Get:7 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-cached-property all 1.5.2-1 [12.5 kB]
Get:8 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-lib2to3 all 3.9.2-1 [77.8 kB]
Get:9 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-distutils all 3.9.2-1 [143 kB]
Get:10 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-websocket all 0.57.0-1 [34.3 kB]
Get:11 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-docker all 4.1.0-1.2 [85.2 kB]
Get:12 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-dockerpty all 0.4.1-2 [11.1 kB]
Get:13 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-docopt all 0.6.2-3 [26.6 kB]
Get:14 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-attr all 20.3.0-1 [52.9 kB]
Get:15 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-more-itertools all 4.2.0-3 [42.7 kB]
Get:16 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-zipp all 1.0.0-3 [6,060 B]
Get:17 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-importlib-metadata all 1.6.0-2 [10.3 kB]
Get:18 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-setuptools all 52.0.0-4 [366 kB]
Get:19 https://mirrors.aliyun.com/debian bullseye/main arm64 python3-pyrsistent arm64 0.15.5-1+b3 [58

启动 docker

# 查看docker服务是否启动
sudo systemctl status docker
# 如果没有启动
sudo systemctl start docker

安装音乐服务器

网上搜索了很多音乐服务器,综合对比之后选择了 Navidrome,Navidrome是一款完全开源免费的音乐服务器,且有很多开源客户端可以直接使用,十分方便。

官方也给出了如何使用 Docker 安装 Navidrome 的教程,可以点击查看。

链接: Docker 安装 Navidrome 音乐服务器

编写 docker-compose.yml 文件,配置中使用 volumes 指定了配置文件夹 data,歌曲存放文件夹 folder.

version:"3"services:navidrome:image:deluan/navidrome:latestuser:1000:1000# should be owner of volumesports:-"4533:4533"restart:unless-stoppedenvironment:# Optional: put your config options customization here. Examples:ND_SCANSCHEDULE:1hND_LOGLEVEL:infoND_SESSIONTIMEOUT:24hND_BASEURL:""volumes:-"~/app/music/data:/data"-"~/app/music/folder:/music:ro"

下载 docker 镜像,等待 navidrome 镜像下载完成。

linux@darcy:~/music $ sudo docker-compose up -d
Creating network "music_default" with the default driver
Pulling navidrome (deluan/navidrome:latest)...
latest: Pulling from deluan/navidrome
9b18e9b68314: Extracting [==================================================>]  2.708MB/2.708MB
6faacaf0d83b: Downloading [=================>                                 ]  11.49MB/32.64MB
4f4fb700ef54: Download complete
e67430195958: Downloading [========>                                          ]  2.203MB/13.64MB

音乐上传

歌曲的来源这里不细说,我电脑上刚好有几首不知何年何月使用网易云音乐时保存的歌曲,上传歌曲文件到树莓派服务器。

这里直接使用 scp 命令进行上传,需要在歌曲所在文件夹下运行。

  • ./* 表示上传当前目录所有文件。

  • darcy@192.168.31.21 为服务器用户名和 IP.

  • :/home/darcy/music/folder 为上传到的路径。

➜  folder scp ./* darcy@192.168.31.21:/home/darcy/music/folder
darcy@192.168.31.21's password:
GALA - 追梦赤子心.mp3                        100%   13MB   7.0MB/s   00:01
伍佰 - 晚风.mp3                              100% 4102KB   9.4MB/s   00:00
暗杠 - 狂草.mp3                              100% 9693KB   9.1MB/s   00:01
被动(Live).mp3                               100% 4463KB  10.4MB/s   00:00
刘德华 - 17岁 (Live).mp3                      100%   12MB  10.0MB/s   00:01
张雨生 - 我期待.mp3                            100%   14MB   6.8MB/s   00:02
赵英俊 - 方的言.ncm

启动音乐服务器

先使用 sudo docker ps -a 查看 Navidrome 是否已经启动了,如果没有启动可以使用 docker start id 进行启动。服务的默认端口是 4533。

linux@darcy:~ $ sudo docker ps -a
CONTAINER ID   IMAGE                     COMMAND            CREATED       STATUS                 PORTS                    NAMES
97a8a2681179   deluan/navidrome:latest   "/app/navidrome"   2 weeks ago   Up 6 hours (healthy)   0.0.0.0:4533->4533/tcp   music_navidrome_1

浏览器访问

IP:PORT 访问音乐服务,Navidrome 为 PC 端和手机端已经适配了不同的 UI 界面。

PC 浏览器:

移动浏览器:

Navidrome 的管理功能尚可,点击右上角的头像,可以新增用户,可以为其他人创建一个登录账户。

使用 APP 访问

兼容 Navidrome 的 APP 有很多,这里我使用 Substreamer 这款 APP,界面算得上简洁,使用体验尚可。

初次启动需要进行登录,可以使用刚刚新增的用户进行登录。

歌曲界面:

外网访问

如果已经是使用云服务器进行部署,那么因为有相应的公网 IP,其实已经可以直接使用公网 IP 访问了。

但是如果使用的树莓派或者家里的其他机器进行部署的,因为没有公网 IP ,只能局限在家庭局域网内,就会让公网访问十分困难。这时有下面的几个方案。

  1. 如果你的宽带运营商每次会分配公网 IP,刚好你又有一个域名,那么可以使用 DNS 服务商提供的 API 进行动态 DNS 配置,让域名总能解析到运营商分配给你的公网 IP。

  1. 如果你有公网服务器,可以使用类似于 FRP 这样的内网穿透工具,借助公网服务器暴露局域网服务。

FRP GitHub:https://github.com/fatedier/frp/releases

FRP 通过自定义域名访问内网的 Web 服务:https://gofrp.org/docs/examples/vhost-http/

<完>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python进阶-----面对对象5.0(面对对象三大特征之--多态)

目录 前言&#xff1a; 多态 习题 前言&#xff1a; 上一期讲了Python面对对象中的继承&#xff0c;而今天讲的是多态&#xff0c;其实多态跟继承是紧密相关的&#xff0c;换句话说多态是继承的一种表现形式&#xff0c;下面就一起来看看吧&#xff01;&#xff08;上一期链…

性价比高的骨传导蓝牙耳机,推荐几款性能高的骨传导耳机

​骨传导耳机&#xff0c;顾名思义是一种声音传递方式&#xff0c;利用头骨作为震动传导发声。不像一般耳机那样通过外耳或内耳传递声音。声音由耳部传播到头后产生振动刺激颅脑内听觉中枢引起听觉。因此是一种非入耳式的声音传播方式。而在选购过程中&#xff0c;对于价格、功…

自动驾驶目标检测项目实战(二)—基于Faster-RCNN的交通标志检测

自动驾驶目标检测项目实战——基于Faster-RCNN的交通标志检测 目前目标检测算法有很多&#xff0c;流行的就有faster-rnn和yolov&#xff0c;本文使用了faster-rnn框架进行训练&#xff0c;效果还不错&#xff0c;准确率&#xff0c;当然也可以使用更高版本的Yolov进行实战。本…

RK3568触摸屏驱动调试总结

硬件电路分析 RK3568 CPU通过I2C与触控板外设wdt87xx连接。 首先要根据电路图获取如下I2C的信息&#xff1a; 项目Value接在哪个I2Ci2c1I2C 寄存器地址0x2cHID 地址0x20中断B5 1、接在哪个I2C 如图,1接在I2C1&#xff1a; 2、使用哪个GPIO引脚接收触控板的中断 如图&#xf…

Ubantu从0开始配置深度学习RTX 4090+3090显卡的服务器

文章目录1. 基础2. 用户访问3. Pytorch环境的问题4. 显卡调度问题方法一&#xff1a;在shell命令前强制指定显卡方法二&#xff1a;在代码中强制指定显卡5. 各种各样的小BUG5.1 Liunx创建新用户登录异常&#xff1a;/usr/bin/xauth: error/timeout in locking authority file /…

Unity之向量计算

文章目录前言向量加法向量减法向量乘法/除法向量点乘&#xff08;内积&#xff09;向量叉乘&#xff08;外积&#xff09;向量归一化向量小结前言 讲讲Unity中的向量有关知识&#xff0c;一些概念在初高中就学过&#xff0c;就不解释了。向量只能与自己相同维度进行计算&#…

Zookeeper3.5.7版本——选举机制(第一次启动时)

目录一、第一次启动服务时Zookeeper的选举机制1.1、服务器1启动1.2、服务器2启动1.3、服务器3启动1.4、服务器4启动1.5、服务器5启动二、Zookeeper中的一些概念了解2.1、SID2.2、ZXID2.3、Epoch一、第一次启动服务时Zookeeper的选举机制 1.1、服务器1启动 服务器1启动&#x…

嵌入式学习笔记——STM32硬件基础知识

STM32开发硬件知识前言STM32最小系统电源电路晶振电路复位电路BOOT选择电路调试接口电路其他电路本文重点本文参考博客链接前言 上一篇中我们重点是讲了一下怎么搭建开发环境以及怎么下载烧录的过程&#xff0c;这都是解决的电脑端的开发环境问题&#xff0c;还没有到实际的开…

【数据结构】邻接矩阵和邻接图的遍历

写在前面 本篇文章开始学习数据结构的图的相关知识&#xff0c;涉及的基本概念还是很多的。本文的行文思路:学习图的基本概念学习图的存储结构——本文主要介绍邻接矩阵和邻接表对每种结构进行深度优先遍历和广度优先遍历先识概念话不多说&#xff0c;狠活献上学习思想等等&…

C++ Stack栈学习

1. stack的介绍和使用1.1 stack的介绍1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&…

sync map思考

sync map 作为解决 map 并发读写问题的补充&#xff0c;用法上其实不复杂&#xff0c;有些惋惜的是&#xff0c;不支持 len 统计数量的方法。map 并发读写算得上一个非常严重的问题&#xff0c;会导致服务宕机&#xff0c;为了避免 map 的并发读写&#xff0c;一种解决办法是直…

华为机试题:HJ108 求最小公倍数(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

软件工程知识-软件测试

1、软件测试是发现软件错误&#xff08;缺陷&#xff09;的主要手段&#xff1a; 从是否关系软件内部结构和具体实现的角度对软件测试进行分类 2.静态测试&#xff1a;以检查为主&#xff08;桌前检查、代码走查、代码审查&#xff09; 动态测试&#xff1a;实际运行程序&am…

Leetcode刷题一

目录序言树「结构」「遍历」「经验」「跨父节点」「题型」序言 笔记根据labuladong进行总结&#xff0c;极力推荐labuladong算法进行学习&#xff01;&#xff01; 树 0、算法一开始就应该刷树&#xff0c;了解递归的思想。 1、C语言中定义了一个结构体&#xff0c;然后申明…

通过指针引用数组的几种方法的原理和差异;以及利用指针引用数组元素的技巧

关于地址&#xff0c;指针&#xff0c;指针变量可以参考这篇文章&#xff1a; 地址&#xff0c;指针&#xff0c;指针变量是什么&#xff1f;他们的区别&#xff1f;符号&#xff08;*&#xff09;在不同位置的解释&#xff1f;_juechen333的博客-CSDN博客https://blog.csdn.n…

nginx http模块

模块依赖2. 模块的初始化2.1 location的定义location的定义包含以下几种location [ | ~ | ~* | ^~ ] uri { ... } location name { ... }:表示精确匹配&#xff0c;只有请求的url路径与后面的字符串完全相等时&#xff0c;才会命中&#xff0c;不支持location嵌套~&#xff1a…

有免费的PDF转Word吗?值得收藏的7个免费 PDF转Word工具请收好

PDF 和 DOC 是人们在工作中广泛使用的两种最流行的文档格式。PDF 是 Adobe 的便携式文档格式&#xff0c;DOC 是 Microsoft 的 Word 文档格式。PDF 是一种更安全可靠的文件格式&#xff0c;因为它很难编辑 PDF 文件&#xff0c;但是有一些称为 PDF 编辑器的工具可用于编辑 PDF …

【Linux】工具(4)——make/Makefile

本期博客我们的任务就是搞懂自动化构建工具——make/Makefile一、什么是make/Makefile&#x1f4cc;make是一个命令工具&#xff0c;是一个解释makefile中指令的命令工具&#xff0c;一般来说&#xff0c;大多数的IDE都有这个命令&#xff0c;比如&#xff1a;Delphi的make&…

设计模式之创建型模式

一、设计模式分类二、创建型模式1、单例模式1.1 饿汉式&#xff08;静态变量&#xff09;1.2 饿汉模式&#xff08;静态代码块&#xff09;1.3 懒汉式&#xff08;线程不安全&#xff09;1.4 懒汉式&#xff08;线程安全&#xff0c;同步方法&#xff09;1.5懒汉式&#xff08;…

PHP语言

一、PHP简介 什么是 PHP&#xff1f; PHP 是强有力的服务器端脚本语言 PHP 是免费的&#xff0c;并且使用广泛 PHP能够包含文本、HTML、CSS以及PHP代码&#xff0c;在服务器上执行&#xff0c;结果以纯文本返回浏览器。PHP是从C和Perl发展而来的一种非常简单的语言&#xff…