事情的起因是这样的,我偶然在gitHub看见一个qier222大神开源的音乐项目YesPlayMusic
QQ截图20211028180431.jpg
界面,UI,真心好看,我又爱折腾,想着,部署一个属于自己的播放器

遗憾的是网页版的YesPlayMusic不支持UnblockNeteaseMusic!不支持UnblockNeteMusic是什么意思呢?当然是听不了我周董的歌啦!不过问题不大(才怪!!!我折腾了九天!!!!😭),详见orzllee大神的博客,要有国内服务器。!!注意是国内的服务器!

以下是操作步骤:先安装Nginx

Nginx安装(Docker下的nginx请忽略)

查看gcc版本

gcc -v

如果没有就

yum -y install gcc

pcre、pcre-devel安装

yum install -y pcre pcre-devel

zlib安装

yum install -y zlib zlib-devel

安装openssl

yum install -y openssl openssl-devel

安装nginx

下载nginx压缩包

wget http://nginx.org/download/nginx-1.9.9.tar.gz

把压缩包解压到usr/local/nginx 没有nginx文件夹记得创建

tar -zxvf  nginx-1.9.9.tar.gz

切换到cd /usr/local/nginx/nginx-1.9.9/下面,依次执行

 ./configure
 
 make
 
 make install

扩展:ngin配置,如果提示不支持http2 记得使用然后执行上面步骤2和3

./configure --prefix=/usr/local/nginx --with-openssl=/root/openssl-1.1.1g --with-http_addition_module --with-http_flv_module --with-http_gzip_static_module --with-http_realip_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_dav_module --with-http_v2_module

安装node.js

curl -sL https://rpm.nodesource.com/setup_10.x | bash - 
yum -y install nodejs

使用node -v命令查看是否安装成功。

安装NeteaseCloudMusicApi

没有git的话可以执行此命令yum install git安装

git clone git://github.com/Binaryify/NeteaseCloudMusicApi.git
cd NeteaseCloudMusicApi
npm install

安装UnblockNeteaseMusic

git clone git://github.com/nondanee/UnblockNeteaseMusic.git
cd UnblockNeteaseMusic
// node app.js  //运行 不过暂时不用,下文配置supervisor守护进程

安装Supervisor用来守护进程

yum -y install epel-release
yum -y install supervisor

使用nano编辑器更改Supervisor默认配置

没有nano先安装:yum -y install nano

nano /etc/supervisord.conf
// 最后一行files = supervisord.d/*.ini
// 改为: 👇
files = supervisord.d/*.conf

使用nano写入以下代码

!!注意要开放端口 3000 3001 3002

nano /etc/supervisord.d/music-api.conf
[program:music-api]
command=/bin/bash -c 'PORT=3000 HOST=127.0.0.1 /usr/bin/node /usr/local/vue/NeteaseCloudMusicApi/app.js'
autostart=true
autorestart=true
user=root
numprocs=1
[program:music-unblock]
command=/usr/bin/node /usr/lcoal/vue/UnblockNeteaseMusic/app.js  -p 3001:3002 -s -f xxx.xxx.xxx -a 127.0.0.1 -e https://xxx.xxx.com
autostart=true
autorestart=true
user=root
numprocs=1

‼️xxx.xxx.xxx是用你的服务器ping muisc.163.com后得到的ip地址填写就进去就好了,https://xxx.xxx.xxx是你为UnblockNeteMusic配置的域名,填写进去就好了

QQ截图20211028183022.jpg

这里我提一嘴,我是Docker容器中部署的nginx,真的是害惨我了!~!!,Docker中nginx默认配置读取不到宿主机的127.0.0.1IP段,要修改nginx启动配置文件指定网络类型,,!—net=host 🤮

Docker有四种网络模式:

// host模式
–net=host
// 容器和宿主机共享Network namespace。

// container模式
–net=container:NAME_or_ID
// 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。

// none模式
–net=none
// 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。

// bridge模式
–net=bridge
//(默认为该模式)

运行supervisor

supervisorctl reread //读取配置文件
supervisorctl update //重新更新配置文件
supervisorctl start music-api:*  // 显示运行
supervisorctl start music-unblock:*
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224
//提示这个👆错误用这个代码
/usr/bin/python2 /usr/bin/supervisord -c /etc/supervisor/supervisord.conf

//补充Supercvisor命令
supervisorctl status //查看进程运行状态
supervisorctl start //进程名 启动进程
supervisorctl start laravel-worker:*   //批量启动进程
supervisorctl stop //进程名 关闭进程
supervisorctl restart //进程名 重启进程
supervisorctl shutdown //关闭supervisord
supervisorctl clear //进程名 清空进程日志
supervisorctl //进入到交互模式下。使用help查看所有命令
supervisorctl reread

开放端口

一般买的腾讯/阿里的VPS,在你的控制台-服务器-防火墙/安全组里面

以下操作仅限纯净版Liunx

1、开放端口

firewall-cmd --zone=public --add-port=3000/tcp --permanent   # 开放3000端口
firewall-cmd --zone=public --add-port=3000/tcp --permanent   # 开放3001端口
firewall-cmd --zone=public --add-port=3000/tcp --permanent   # 开放3002端口
**firewall-cmd --zone=public --remove-port=3000/tcp --permanent**  #关闭3000端口
firewall-cmd --reload   # 配置立即生效

2、查看防火墙所有开放的端口

firewall-cmd --zone=public --list-ports

3.、关闭防火墙

如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估

**systemctl stop firewalld.service**

4、查看防火墙状态

firewall-cmd --state

5、查看监听的端口

netstat -lnpt

提示未找到命令可以用yum -y install net-tools

6、检查端口被哪个进程占用

netstat -lnpt |grep 5672

7、查看进程的详细信息

ps 6832

8、中止进程

kill -9 6832

(如果提示vim未安装)执行👇

rpm -qa |grep vim //查看少了那些

QQ截图20211028183722.jpg

//正常应该有以上👆四个文件
yum -y install vim-minimal
yum -y vim-common
yum -y install vim-enhanced

如果都没有可以全部安装

yum -y install vim*

YesPlayMusic

下载YesPlaymusic可以取作者GitHub页获取源码并修改编译链接👉YesPlayMusic

QQ截图20211028184314.jpg

下载到本地使用Idea打开

yarn install

作者的文档有写复制env.example为env

并替换搭建好的api

  VUE_APP_NETEASE_API_URL=https://NeteaseCloudMusicApi域名 // 修改此处
  VUE_APP_ELECTRON_API_URL=/api
  VUE_APP_ELECTRON_API_URL_DEV=https://xxx.xxx.com     //以及此处
  VUE_APP_ENABLE_SENTRY=false
  DEV_SERVER_PORT=20201
  NODE_ENV=production
  VUE_APP_LASTFM_API_KEY=09c55292403d961aa517ff7f5e8a3d9c
  VUE_APP_LASTFM_API_SHARED_SECRET=307c9fda32b3904e53654baff215cb67

vue.config.js文件可以修改网页标题版权信息。

src/mian.js可以修改google analytics追踪代码ID。

src/Utils/Player.js 44行 document.title = ${track.name} · ${track.ar[0].name} - YesPlayMusic;这里YesPlayMusic是播放音乐的时候标题尾。

其他 YesPlayMusic 关键词要修改全局代码搜索

修改代码以使用UnblockNeteaseMusic文件路径为YesPlayMusic/src/utils/player.js

_getAudioSourceFromNetease(track) {
  if (isAccountLoggedIn()) {
    return getMP3(track.id).then(result => {
      if (!result.data[0]) return null;
      if (!result.data[0].url) return null;
      if (result.data[0].freeTrialInfo !== null) return null; // 跳过只能试听的歌曲
      const source = result.data[0].url.replace(/^http:/, 'https:');
      if (store.state.settings.automaticallyCacheSongs) {
        cacheTrackSource(track, source, result.data[0].br);
      }
      return source;
    });
  } else {
      //替换如下部分
    let url = `https://music.163.com/song/media/outer/url?id=${track.id}`;
    return getMP3(track.id).then(result => {
      if (!result.data[0] && !result.data[0].url && result.data[0].freeTrialInfo !== null) {
        return url;
      }
      const source = result.data[0].url.replace(/^http:/, 'https:');
      // const source = result.data[0].url;
      if (store.state.settings.automaticallyCacheSongs) {
        cacheTrackSource(track, source, result.data[0].br);
      }
      return source;
    });
  }
}

编译

yarn run build

配置nginx.conf

server {
      	listen 80;
    	server_name 你的NeteaseCloudMusicApi域名;
	index index.php;
	
	location / {
		proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://0.0.0.0:3000;
		client_max_body_size 100m;
		client_body_buffer_size 128k;
		proxy_connect_timeout 5;
		proxy_read_timeout 60;
		proxy_send_timeout 5;
		proxy_buffer_size 4K;
		proxy_buffers 4 32k;
		proxy_busy_buffers_size 64k;
		proxy_temp_file_write_size 64k;
		proxy_ignore_client_abort on;
	}
		access_log off;	
}
server {
        listen 443 ssl;
        #填写绑定证书的域名
        server_name 你的NeteaseCloudMusicApi域名;

        #证书文件名称
        ssl_certificate  /usr/local/nginx/cert/你的NeteaseCloudMusicApi域名证书;
        #私钥文件名称
        ssl_certificate_key /usr/local/nginx/cert/你的NeteaseCloudMusicApi域名证书密钥;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location / {
               proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://0.0.0.0:3000;
                client_max_body_size 100m;
                client_body_buffer_size 128k;
                proxy_connect_timeout 5;
                proxy_read_timeout 60;
                proxy_send_timeout 5;
                proxy_buffer_size 4K;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 64k;
                proxy_ignore_client_abort on;
       }
}

server {
     listen 80; # 监听80端口
     server_name 你的NeteaseCloudMusicApi域名;  # 绑定证书的域名
     #把http的域名请求转成https
     return 301 https://$host$request_uri; 
}

  server {
      listen 80;
      server_name 你的YesPlayMusic域名; ### 记得替换
      
	location / {
		root /usr/local/vue/music; #你的YesPlayMusic编译上传后的路径
		index index.html index.htm;
	}
	
}
 server {
	listen 443 ssl;
	server_name 你的YesPlayMusic域名;
	
	ssl_certificate  /usr/local/nginx/cert/1_music.dearkai.cn_bundle.crt;
	ssl_certificate_key /usr/local/nginx/cert/2_music.dearkai.cn.key;
	ssl_session_timeout 5m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;
	
	location / {
		root /usr/local/vue/music; #你的YesPlayMusic编译上传后的路径
		index index.html index.htm;
		}
}
server {
	listen 80;
	server_name 你的YesPlayMusic域名;
	return 301 https://$host$request_uri; 
}
server {
	listen 80;
	server_name music.163.com *.music.163.com; #此处为网易云音乐的域名,不用替换
	location / {
		proxy_set_header Host $http_host;
		proxy_pass http://127.0.0.1:3001;
	}
}
server {
	listen 443 ssl;
	server_name music.163.com *.music.163.com;
	ssl_certificate /usr/local/vue/UnblockNeteaseMusic/server.crt;#域名证书,默认在UnblockNeteaseMusic文件目录下
	ssl_certificate_key /usr/local/vue/UnblockNeteaseMusic/server.key;#域名证书密钥,默认在UnblockNeteaseMusic文件目录下
	ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
	ssl_prefer_server_ciphers on;
	ssl_session_cache shared:SSL:10m;
	ssl_session_timeout 10m;
	
	location / {
		proxy_set_header Host $http_host;
		proxy_pass https://127.0.0.1:3002;
	}
}
##nginx反向代理歌曲Url
server {
	listen 443;
	server_name 你的UnblockNeteaseMusic域名;
	ssl on;
	ssl_certificate /usr/local/nginx/cert/1_unblock.dearkai.cn_bundle.crt;
	ssl_certificate_key /usr/local/nginx/cert/2_unblock.dearkai.cn.key;
	ssl_session_timeout 5m;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
	ssl_prefer_server_ciphers on;
	
	location / {
	proxy_pass http://localhost:3001;
		}
}

}

修改Hosts文件路径为/etc/hosts 末尾添加,把域名劫持到本机,NeteaseCloudMusicApi请求API就会通过nginx到UnblockNeteaseMusic,让UnblockNeteaseMusic通过其他音乐平台获取相关资源:

127.0.0.1 music.163.com
127.0.0.1 interface.music.163.com
127.0.0.1 music.126.net
127.0.0.1 interface3.music.163.com

nginx -t看看有错误没有,没错误nginx -s reload,然后打开网站看看。

Docker的同学请使用 docker restart nginx

特别感谢orzlee 大神,我都给人家问烦了,哈哈!没办法谁让我爱折腾呢!,这次确实学习到了不少的东西,同时也意识到自己有很多的不足之处。更让我有学习下去的动力了!喜欢才回去探索,才会努力去寻找问题的答案!这是一件好事。

好啦!这次的成品南藤的音乐屋欢迎大家访问。

—END

Q.E.D.


唯沉默是最高的轻蔑