{"id":13810125,"url":"https://github.com/lyswhut/lx-music-sync-server","last_synced_at":"2025-04-05T08:09:43.955Z","repository":{"id":94186510,"uuid":"608114748","full_name":"lyswhut/lx-music-sync-server","owner":"lyswhut","description":"运行在Node.js上的LX Music数据同步服务","archived":false,"fork":false,"pushed_at":"2023-10-26T04:26:19.000Z","size":253,"stargazers_count":416,"open_issues_count":29,"forks_count":120,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-02-15T17:31:48.127Z","etag":null,"topics":["nodejs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lyswhut.png","metadata":{"files":{"readme":"Readme.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-01T10:56:14.000Z","updated_at":"2024-08-04T02:03:45.828Z","dependencies_parsed_at":"2024-08-04T02:03:17.516Z","dependency_job_id":null,"html_url":"https://github.com/lyswhut/lx-music-sync-server","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyswhut%2Flx-music-sync-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyswhut%2Flx-music-sync-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyswhut%2Flx-music-sync-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyswhut%2Flx-music-sync-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lyswhut","download_url":"https://codeload.github.com/lyswhut/lx-music-sync-server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247305935,"owners_count":20917208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nodejs"],"created_at":"2024-08-04T02:00:46.311Z","updated_at":"2025-04-05T08:09:43.918Z","avatar_url":"https://github.com/lyswhut.png","language":"TypeScript","funding_links":[],"categories":["置顶","TypeScript"],"sub_categories":["04、多媒体处理中心"],"readme":"# LX Msuic Sync Server\n\n洛雪音乐数据同步服务端，本项目目前用于收藏列表数据同步，类似原来PC端的数据同步服务，只不过它现在是一个独立版的服务，可以将其部署到服务器上使用。\n\n本项目需要有一些服务器操作经验的人使用，若遇到问题欢迎反馈。\n\n**由于服务本身不提供https协议支持，若将服务部署在公网，请务必使用Nginx之类的服务做反向代理（SSL证书需可信且[证书链完整](https://stackoverflow.com/a/60020493)），实现客户端到服务器之间的https连接。**\n\n\n## 环境要求\n\n- Node.js 16+\n\n## 使用方法\n\n### 安装node.js\n\nCent OS可以运行以下命令安装：\n\n```bash\nsudo yum install -y gcc-c++ make\ncurl -sL https://rpm.nodesource.com/setup_16.x | sudo -E bash  -\nsudo yum install nodejs -y\n```\n\n基于 Debian、Ubuntu 发行版的系统使用以下命令安装：\n\n```bash\nsudo apt-get install -y build-essential\ncurl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -\nsudo apt-get install -y nodejs\n```\n\n安装完毕后输入以下命令正常情况下会显示Node.js的版本号\n\n```bash\nnode -v\n```\n\n### 安装PM2（非必须）\n\nPM2是一个Node.js服务管理工具，可以在服务崩溃时自动重启，更多使用方式请自行百度\n\n```bash\nnpm i -g pm2\n```\n\n注：若安装失败，则可能需要以管理员权限安装\n\n若没有安装PM2，则后面`pm2`开头的命令都可以跳过\n\n### 安装依赖\n\n若安装依赖过程中出现因`utf-8-validate`包编译失败的错误，请尝试搜索相关错误解决，若实在无法解决，则可以编辑`package.json`文件删除`dependencies`下的`utf-8-validate`后，重新运行`npm ci --omit=dev`或`npm ci`即可\n\n\n如果你是在release下载的压缩包，则解压后项目目录执行以下命令安装依赖：\n\n```bash\nnpm ci --omit=dev\n```\n\n\n如果你是直接下载的源码，则在本目录中运行以下命令\n\n```bash\nnpm ci\nnpm run build\n```\n\n### 配置config.js\n\n按照文件中的说明配置好本目录下的`config.js`文件\n\n### 配置ecosystem.config.js中的env_production\n\n可以在这里配置PM2的启动配置，具体根据你的需求配置\n\n### 启动服务器\n\n```bash\nnpm run prd\n```\n\n若你没有安装PM2，则可以用`npm start`启动\n\n### 查看启动日志\n\n```bash\npm2 logs\n```\n\n若无报错相关的日志，则说明服务启动成功\n\n### 设置服务开机启动\n\n**注意：** 该命令对Windows系统无效，Windows需用批处理的方式设置\n\n```bash\npm2 save\npm2 startup\n```\n\n到这里服务已搭建完成，但是为了你的数据安全，我们**强烈建议**使用Nginx之类的服务为同步服务添加 TLS 保护！\n\n### 配置Nginx\n\n\u003c!-- 看官网安装文档完成：\u003chttps://www.nginx.com/resources/wiki/start/topics/tutorials/install/\u003e --\u003e\n\n#### 说明\n\n代理需要配置两条规则：\n\n1. 代理链接 URL 根路径下所有子路径的 **WebSocket** 请求到 LX Sync 服务\n2. 代理链接 URL 根路径下所有子路径的 **HTTP** 请求到 LX Sync 服务\n\n#### 配置\n\n编辑Nginx配置文件，在server下添加代理规则，如果你当前server块下只打算配置 LX Sync 服务，那么可以使用以下配置：\n\n```conf\nmap $http_upgrade $connection_upgrade{\n    default upgrade;\n    '' close;\n}\nserver {\n    # ...\n    location / {\n        proxy_set_header X-Real-IP $remote_addr;  # 该头部与config.js文件的 proxy.header 对应\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header Host  $http_host;\n        proxy_pass http://127.0.0.1:9527;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection $connection_upgrade;\n    }\n}\n```\n\n如果你当前server块下存在其他服务，那么可以配置路径前缀转发：\n\n```conf\nmap $http_upgrade $connection_upgrade{\n    default upgrade;\n    '' close;\n}\nserver {\n    # ...\n    location /xxx/ {\n        proxy_set_header X-Real-IP $remote_addr;  # 该头部与config.js文件的 proxy.header 对应\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header Host  $http_host;\n        proxy_pass http://127.0.0.1:9527;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection $connection_upgrade;\n    }\n}\n```\n\n注：上面的`xxx`是你想要代理的路径前缀（可以多级）\n\n注意`$remote_addr`的转发名字与config.js中的`proxy.header`对应并同时启用`proxy.enabled`（或与环境变量的`PROXY_HEADER`对应），这用于校验相同IP多次使用错误连接码连接时的封禁\n\n## 升级新版本\n\n若更新日志无特别说明，注意保留**你修改过**的 `config.js`、`ecosystem.config.js` 或 `Dockerfile` 之类的配置文件，以及`data`、`logs`目录即可，其他的都可以删除后再将新版本的文件复制进去，以下是更新日志无特别说明的更新流程：\n\n使用在release下载的压缩包运行的服务：\n\n1. 删除项目目录下的 `server`、`node_modules` 目录以及 `index.js`、`package.json`、`package-lock.json` 文件\n2. 将新版本的`server`目录 `index.js`、`package.json`、`package-lock.json` 文件复制进去\n3. 执行`npm ci --omit=dev`\n4. 重启服务，执行 `pm2 restart 服务名称或ID` 重启服务（可以先执行`pm2 list`查看服务id或名称）\n\n使用源码编译运行的服务：\n\n1. 重新下载源码或使用git将代码更新到最新版本\n2. 执行 `npm ci` 与 `npm run build`\n3. 重启你的服务\n\n使用docker：将代码更新到最新后，再打包镜像即可\n\n## 从快照文件恢复数据\n\n方式1：\n\n使用快照文件转换工具将其转换成列表备份文件后再导入备份： https://lyswhut.github.io/lx-msuic-sync-snapshot-transform/\n\n方式2：\n\n1. 停止同步服务\n2. 修改`data/users/\u003c用户名\u003e/list/snapshotInfo.json`里面的`latest`为你那个备份文件key名（即`snapshot`文件夹下去掉`snapshot_`前缀后的名字）\n3. 删除`snapshotInfo.json`文件内`clients`内的所有设备信息，删除后的内容类似：`{...其他内容,\"clients\":{}}`\n4. 启用同步服务，连接后勾选“完全覆盖”，选择“远程覆盖本地”\n\n## 附录\n\n### 可用的环境变量\n\n| 变量名称 | 说明\n|:---:| ---\n| `PORT` | 绑定的端口号，默认`9527`\n| `BIND_IP` | 绑定的IP地址，默认`127.0.0.1`，使用`0.0.0.0`将接受所有IPv4请求，使用`::`将接受所有IP请求\n| `PROXY_HEADER` | 代理转发的请求头 原始IP，如果设置，则自动启用\n| `CONFIG_PATH` | 配置文件路径，默认使用项目目录下的`config.js`\n| `LOG_PATH` | 服务日志保存路径，默认保存在服务目录下的`logs`文件夹内\n| `DATA_PATH` | 同步数据保存路径，默认保存在服务目录下的`data`文件夹内\n| `MAX_SNAPSHOT_NUM` | 公共最大备份快照数\n| `SERVER_NAME` | 同步服务名称\n| `LIST_ADD_MUSIC_LOCATION_TYPE` | 公共添加歌曲到我的列表时的方式可用值为 `top`、`bottom`\n| `LX_USER_` | 以`LX_USER_`开头的环境变量将被识别为用户配置，可用的配置语法为：\u003cbr /\u003e1. `LX_USER_user1='xxx'`\u003cbr /\u003e2. `LX_USER_user1='{\"password\":\"xxx\"}'`\u003cbr /\u003e其中`LX_USER_`会被去掉，剩下的`user1`为用户名，`xxx`为用户密码（**链接码**），\u003cbr /\u003e配置方式1为简写模式，只指定用户名及密码（链接码），其他配置使用公共配置，\u003cbr /\u003e配置方式2为JSON字符串格式，配置内容参考`config.js`，由于该方式在变量名指定了用户名，所以JSON里的用户名是可选的\n\n### PM2常用命令\n\n- 查看服务列表：`pm2 list`\n- 服务控制台的输出日志：`pm2 logs`\n- 重启服务：`pm2 restart` 服务名称/编号\n- 停止服务：`pm2 stop` 服务名称/编号\n\n### Docker\n\n可以使用以下方式构建docker镜像（Dockerfile用的是源码构建）：\n\n```bash\ndocker build -t lx-music-sync-server .\n```\n\n或者使用已发布到 Docker Hub 的镜像：\u003chttps://hub.docker.com/r/lyswhut/lx-music-sync-server\u003e\n\n也可以看issue中的解决方案：\u003chttps://github.com/lyswhut/lx-music-sync-server/issues/4\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyswhut%2Flx-music-sync-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flyswhut%2Flx-music-sync-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyswhut%2Flx-music-sync-server/lists"}