1 Star 0 Fork 0

lemoncheng / lx-music-sync-server

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

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中的解决方案:https://github.com/lyswhut/lx-music-sync-server/issues/4

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

暂无描述 展开 收起
TypeScript 等 3 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/lemoncheng/lx-music-sync-server.git
git@gitee.com:lemoncheng/lx-music-sync-server.git
lemoncheng
lx-music-sync-server
lx-music-sync-server
master

搜索帮助