新增 doudou-server 同步服务器

概述

新增 doudou-server,一个独立的 headless 同步服务器,用于在多个 doudou 客户端(手机、桌面、电视)之间同步音乐库数据。服务器只存储音乐服务器 URL 和库快照,不存储任何媒体服务器登录凭据,这样即使 doudou-server 被攻破也不会泄露 Jellyfin/Subsonic/Plex 的登录信息。

包含内容

doudou-server 服务器 (packages/doudou_server)

独立的 Flutter 桌面应用,可在 Linux、macOS、Windows 上运行。使用 drift + SQLite 存储数据,HTTP REST API 提供同步接口。

CLI 命令:

  • -start 启动服务器(前台运行)
  • -stop 停止运行中的服务器
  • -clients 查看已同步的客户端
  • -set login <user> <pass> 设置共享密码
  • -status 查看服务器状态
  • -health 健康检查

REST API(/api/v1 下,需 X-Doudou-Key 头认证):

  • GET /health 健康检查(无需认证)
  • GET/PUT /servers 音乐服务器列表
  • DELETE /servers/{id} 删除音乐服务器
  • GET/PUT /snapshots 库快照推送/拉取
  • POST /clients/register 客户端注册

doudou 客户端集成

  • DoudouServerConfig 模型存储 doudou-server 连接配置
  • DoudouServerClient 封装 REST API HTTP 调用
  • DoudouServerSyncService 定期(30分钟)+ 启动时 + 手动同步本地库和 doudou-server
  • 设置页面新增 doudou-server 配置入口

CI

GitHub Actions 构建矩阵新增 doudou-server-linux、doudou-server-windows、doudou-server-macos 三个目标。

安全设计

  • 音乐服务器凭据只保存在每个 doudou 客户端本地,永远不经过 doudou-server
  • doudou-server 只存储音乐服务器 URL 和库快照数据
  • 共享密码以 sha256 哈希存储,客户端用明文密码认证

测试计划

  • doudou-server 在 Linux 上构建通过
  • doudou 客户端在 Linux 上构建通过
  • CLI 命令手动测试: -set login-start-health-status-stop-clients
  • REST API 手动测试: 健康检查、服务器列表、快照推送/拉取、客户端注册
  • doudou 客户端 UI 添加 doudou-server 并触发同步
  • macOS/Windows 构建验证

Summary by CodeRabbit

  • New Features
    • Added optional doudou-server integration for syncing music server settings and library snapshots, including scheduled sync and “sync on resume”.
    • Added doudou-server configuration to Settings with per-server sync badges and a “Sync now” action (plus improved add/edit dialog sync options).
    • Added a standalone doudou-server app offering health checks, an authenticated REST API, client registration, and snapshot storage.
  • Documentation
    • Added setup/build/CLI and API documentation for doudou-server.
  • Chores
    • Expanded CI to build/package new doudou-server targets for Linux, Windows, and macOS.
Edited by ien free

Merge request reports

Loading