Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@xiaoQQya
Copy link
Contributor

Docker 镜像内置 UnblockNeteaseMusic 服务,解锁部分无版权歌曲,可能会与原曲不匹配。

思路:

  1. Docker 镜像内置 UnblockNeteaseMusic 服务,用于通过其它音源解锁网易云部分无版权歌曲;
  2. 通过 hosts 将网易云服务地址指向 UnblockNeteaseMusic 服务;
  3. Nginx 反向代理 UnblockNeteaseMusic 解锁过后的歌曲地址,避免在网页客户端信任 UnblockNeteaseMusic 证书,例如:/music/unblock -> https://music.163.com/,此处的 https://music.163.com 已经由 hosts 指向了本地 UnblockNeteaseMusic 服务;
  4. Nginx 修改 /api/netease/song/url/v1 接口响应结果,将 UnblockNeteaseMusic 解锁过后的歌曲地址指向第三步反代的路径,例如:https://music.163.com/package/xxxxx -> /music/unblock/package/xxxxx

实现:

  1. Docker 镜像构建时内置 UnblockNeteaseMusic 服务,关键代码改动:
# Dockerfile
FROM nginx:1.27-alpine-slim AS app

COPY --from=builder /app/out/renderer /usr/share/nginx/html

COPY --from=builder /app/nginx.conf /etc/nginx/conf.d/default.conf

COPY --from=builder /app/docker-entrypoint.sh /docker-entrypoint.sh

RUN apk add --no-cache npm python3 youtube-dl \
    && npm install -g @unblockneteasemusic/server NeteaseCloudMusicApi \
    && wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp \
    && chmod +x /usr/local/bin/yt-dlp \
    && chmod +x /docker-entrypoint.sh

ENV NODE_TLS_REJECT_UNAUTHORIZED=0

ENTRYPOINT ["/docker-entrypoint.sh"]

CMD ["npx", "NeteaseCloudMusicApi"]
  1. 通过 hosts 将网易云服务地址指向本地 UnblockNeteaseMusic 服务,关键代码改动;
# docker-entrypoint.sh
#!/bin/sh

set -e

# start unblock service in the background
npx unblockneteasemusic -p 80:443 -s -f ${NETEASE_SERVER_IP:-220.197.30.65} -o ${UNBLOCK_SOURCES:-kugou kuwo bilibili} 2>&1 &

# point the neteasemusic address to the unblock service
if ! grep -q "music.163.com" /etc/hosts; then
    echo "127.0.0.1 music.163.com" >> /etc/hosts
fi
if ! grep -q "interface.music.163.com" /etc/hosts; then
    echo "127.0.0.1 interface.music.163.com" >> /etc/hosts
fi
if ! grep -q "interface3.music.163.com" /etc/hosts; then
    echo "127.0.0.1 interface3.music.163.com" >> /etc/hosts
fi
if ! grep -q "interface.music.163.com.163jiasu.com" /etc/hosts; then
    echo "127.0.0.1 interface.music.163.com.163jiasu.com" >> /etc/hosts
fi
if ! grep -q "interface3.music.163.com.163jiasu.com" /etc/hosts; then
    echo "127.0.0.1 interface3.music.163.com.163jiasu.com" >> /etc/hosts
fi

# start the nginx daemon
nginx

# start the main process
exec "$@"
  1. Nginx 反向代理 UnblockNeteaseMusic 解锁过后的歌曲地址,此处因为媒体流文件较大禁用了缓存,关键代码改动;
location /music/unblock/ {
  proxy_pass              https://music.163.com/;
  proxy_buffering         off;
  proxy_request_buffering off;
}
  1. Nginx 修改 /api/netease/song/url/v1 接口响应结果,将 UnblockNeteaseMusic 解锁过后的歌曲地址指向反代路径,关键代码改动;
location /api/netease/song/url/v1 {
  proxy_buffers           16 64k;
  proxy_buffer_size       128k;
  proxy_busy_buffers_size 256k;
  proxy_set_header        Host $host;
  proxy_set_header        X-Real-IP $remote_addr;
  proxy_set_header        X-Forwarded-For $remote_addr;
  proxy_set_header        X-Forwarded-Host $remote_addr;
  proxy_set_header        X-NginX-Proxy true;
  proxy_pass              http://localhost:3000/song/url/v1;
  
  sub_filter              '"url":"https://music.163.com' '"url":"/music/unblock';
  sub_filter_types        application/json;
  sub_filter_once         off;
}

@imsyy imsyy merged commit eb39b81 into imsyy:dev Mar 18, 2025
@xiaoQQya
Copy link
Contributor Author

@imsyy 作者您好,经过 UnblockNeteaseMusic 服务解锁之后在网页端播放列表 vip 歌曲不显示 vip 标签了,因为不太了解 Vue3 在代码中没有看出原因,您能帮忙看看吗?

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants