GithubHelp home page GithubHelp logo

qyh214 / lx-music-sync-server Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lyswhut/lx-music-sync-server

0.0 1.0 0.0 70 KB

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

License: Apache License 2.0

JavaScript 13.66% TypeScript 85.57% Dockerfile 0.77%

lx-music-sync-server's Introduction

LX Msuic Sync Server

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

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

由于服务本身不提供https协议支持,若将服务部署在公网,请务必使用Nginx之类的服务做反向代理,实现客户端到服务器之间的https连接。

环境要求

  • Node.js 16+

使用方法

安装node.js

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

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

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

node -v

安装PM2(非必须)

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

npm i -g pm2

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

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

安装依赖

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

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

npm install --omit=dev

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

npm install
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

编辑Nginx配置文件,在server下添加 LX Sync 的代理规则:

location /xxx/ { # 该规则用于代理路径下的http请求
    proxy_set_header X-Real-IP $remote_addr;  # 该头部与config.ts文件的 proxy.header 对应
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host  $http_host;
    proxy_set_header Connection "";
    proxy_set_header X-Nginx-Proxy true;
    proxy_pass http://127.0.0.1:9527;
    proxy_redirect default;
}
location /xxx { # 该规则用于代理路径下的ws请求
    proxy_set_header X-Real-IP $remote_addr; # 该头部与config.ts文件的 proxy.header 对应
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host  $http_host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Nginx-Proxy true;
    proxy_pass http://127.0.0.1:9527;
    proxy_redirect default;
}

注:上面的xxx是你想要代理的路径(可以多级),注意$remote_addr的转发名字与config.ts中的proxy.header对应,同时启用proxy.enabled,这用于校验相同IP多次使用错误连接码连接时的封禁

升级新版本

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

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

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

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

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

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

从快照文件恢复数据

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

附录

可用的环境变量

变量名称 说明
PORT 绑定的端口号,默认9527
BIND_IP 绑定的IP地址,默认127.0.0.1,使用0.0.0.0将接受所有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 .

lx-music-sync-server's People

Contributors

lyswhut avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.