Skip to content

Shiroko3/lx-music-sync-server

This branch is 1 commit behind lyswhut/lx-music-sync-server:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

91a1205 · Oct 26, 2023

History

84 Commits
Sep 14, 2023
Oct 26, 2023
Oct 26, 2023
Sep 10, 2023
Mar 1, 2023
Mar 16, 2023
Aug 30, 2023
Mar 10, 2023
Aug 14, 2023
Oct 26, 2023
Sep 10, 2023
Mar 1, 2023
Oct 26, 2023
Oct 3, 2023
Mar 16, 2023
Mar 27, 2023
Oct 26, 2023
Oct 26, 2023
Aug 28, 2023

Repository files navigation

LX Msuic Sync Server

洛雪音乐数据同步服务端,本项目目前用于收藏列表数据同步,类似原来PC端的数据同步服务,只不过它现在是一个独立版的服务,可以将其部署到服务器上使用。

本项目需要有一些服务器操作经验的人使用,若遇到问题欢迎反馈。

由于服务本身不提供https协议支持,若将服务部署在公网,请务必使用Nginx之类的服务做反向代理(SSL证书需可信且证书链完整),实现客户端到服务器之间的https连接。

环境要求

  • Node.js 16+

使用方法

安装node.js

Cent OS可以运行以下命令安装:

sudo yum install -y gcc-c++ make
curl -sL https://rpm.nodesource.com/setup_16.x | sudo -E bash  -
sudo yum install nodejs -y

基于 Debian、Ubuntu 发行版的系统使用以下命令安装:

sudo apt-get install -y build-essential
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs

安装完毕后输入以下命令正常情况下会显示Node.js的版本号

node -v

安装PM2(非必须)

PM2是一个Node.js服务管理工具,可以在服务崩溃时自动重启,更多使用方式请自行百度

npm i -g pm2

注:若安装失败,则可能需要以管理员权限安装

若没有安装PM2,则后面pm2开头的命令都可以跳过

安装依赖

若安装依赖过程中出现因utf-8-validate包编译失败的错误,请尝试搜索相关错误解决,若实在无法解决,则可以编辑package.json文件删除dependencies下的utf-8-validate后,重新运行npm ci --omit=devnpm ci即可

如果你是在release下载的压缩包,则解压后项目目录执行以下命令安装依赖:

npm ci --omit=dev

如果你是直接下载的源码,则在本目录中运行以下命令

npm ci
npm run build

配置config.js

按照文件中的说明配置好本目录下的config.js文件

配置ecosystem.config.js中的env_production

可以在这里配置PM2的启动配置,具体根据你的需求配置

启动服务器

npm run prd

若你没有安装PM2,则可以用npm start启动

查看启动日志

pm2 logs

若无报错相关的日志,则说明服务启动成功

设置服务开机启动

注意: 该命令对Windows系统无效,Windows需用批处理的方式设置

pm2 save
pm2 startup

到这里服务已搭建完成,但是为了你的数据安全,我们强烈建议使用Nginx之类的服务为同步服务添加 TLS 保护!

配置Nginx

说明

代理需要配置两条规则:

  1. 代理链接 URL 根路径下所有子路径的 WebSocket 请求到 LX Sync 服务
  2. 代理链接 URL 根路径下所有子路径的 HTTP 请求到 LX Sync 服务

配置

编辑Nginx配置文件,在server下添加代理规则,如果你当前server块下只打算配置 LX Sync 服务,那么可以使用以下配置:

map $http_upgrade $connection_upgrade{
    default upgrade;
    '' close;
}
server {
    # ...
    location / {
        proxy_set_header X-Real-IP $remote_addr;  # 该头部与config.js文件的 proxy.header 对应
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
        proxy_pass http://127.0.0.1:9527;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

如果你当前server块下存在其他服务,那么可以配置路径前缀转发:

map $http_upgrade $connection_upgrade{
    default upgrade;
    '' close;
}
server {
    # ...
    location /xxx/ {
        proxy_set_header X-Real-IP $remote_addr;  # 该头部与config.js文件的 proxy.header 对应
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
        proxy_pass http://127.0.0.1:9527;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}

注:上面的xxx是你想要代理的路径前缀(可以多级)

注意$remote_addr的转发名字与config.js中的proxy.header对应并同时启用proxy.enabled(或与环境变量的PROXY_HEADER对应),这用于校验相同IP多次使用错误连接码连接时的封禁

升级新版本

若更新日志无特别说明,注意保留你修改过config.jsecosystem.config.jsDockerfile 之类的配置文件,以及datalogs目录即可,其他的都可以删除后再将新版本的文件复制进去,以下是更新日志无特别说明的更新流程:

使用在release下载的压缩包运行的服务:

  1. 删除项目目录下的 servernode_modules 目录以及 index.jspackage.jsonpackage-lock.json 文件
  2. 将新版本的server目录 index.jspackage.jsonpackage-lock.json 文件复制进去
  3. 执行npm ci --omit=dev
  4. 重启服务,执行 pm2 restart 服务名称或ID 重启服务(可以先执行pm2 list查看服务id或名称)

使用源码编译运行的服务:

  1. 重新下载源码或使用git将代码更新到最新版本
  2. 执行 npm cinpm run build
  3. 重启你的服务

使用docker:将代码更新到最新后,再打包镜像即可

从快照文件恢复数据

  1. 停止同步服务
  2. 修改data/users/<用户名>/list/snapshotInfo.json里面的latest为你那个备份文件key名(即snapshot文件夹下去掉snapshot_前缀后的名字)
  3. 删除snapshotInfo.json文件内clients内的所有设备信息,删除后的内容类似:{...其他内容,"clients":{}}
  4. 启用同步服务,连接后勾选“完全覆盖”,选择“远程覆盖本地”

附录

可用的环境变量

变量名称 说明
PORT 绑定的端口号,默认9527
BIND_IP 绑定的IP地址,默认127.0.0.1,使用0.0.0.0将接受所有IPv4请求,使用::将接受所有IP请求
PROXY_HEADER 代理转发的请求头 原始IP,如果设置,则自动启用
CONFIG_PATH 配置文件路径,默认使用项目目录下的config.js
LOG_PATH 服务日志保存路径,默认保存在服务目录下的logs文件夹内
DATA_PATH 同步数据保存路径,默认保存在服务目录下的data文件夹内
MAX_SNAPSHOT_NUM 公共最大备份快照数
SERVER_NAME 同步服务名称
LIST_ADD_MUSIC_LOCATION_TYPE 公共添加歌曲到我的列表时的方式可用值为 topbottom
LX_USER_ LX_USER_开头的环境变量将被识别为用户配置,可用的配置语法为:
1. LX_USER_user1='xxx'
2. LX_USER_user1='{"password":"xxx"}'
其中LX_USER_会被去掉,剩下的user1为用户名,xxx为用户密码(链接码),
配置方式1为简写模式,只指定用户名及密码(链接码),其他配置使用公共配置,
配置方式2为JSON字符串格式,配置内容参考config.js,由于该方式在变量名指定了用户名,所以JSON里的用户名是可选的

PM2常用命令

  • 查看服务列表:pm2 list
  • 服务控制台的输出日志:pm2 logs
  • 重启服务:pm2 restart 服务名称/编号
  • 停止服务:pm2 stop 服务名称/编号

Docker

可以使用以下方式构建docker镜像(Dockerfile用的是源码构建):

docker build -t lx-music-sync-server .

或者使用已发布到 Docker Hub 的镜像:https://hub.docker.com/r/lyswhut/lx-music-sync-server

也可以看issue中的解决方案:lyswhut#4

About

运行在Node.js上的LX Music数据同步服务

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 89.2%
  • JavaScript 10.1%
  • Dockerfile 0.7%