MENU

道理鱼音乐管理系统

September 24, 2025 • Docker

道理鱼音乐管理平台

2025-09-24T00:50:24.png

自建 NAS 音乐管理与播放系统,提供媒体扫描、元数据补全、在线播放、收藏与队列管理、自动转码等能力,可通过 Docker 或本地环境快速部署。
2025-09-24T00:50:40.png
2025-09-24T00:51:15.png
2025-09-24T00:51:27.png

功能亮点

  • 媒体扫描:支持多目录配置,自动解析 ID3 元数据、封面、歌词并写入数据库。
  • 智能播放:Web 前端提供队列、收藏、下一首/上一首、音量与进度控制,支持令牌式音频流与 HLS。
  • 账号系统:区分管理员与普通用户,支持注册开关、资料修改、密码变更与头像上传。
  • 收藏体系:曲目、专辑收藏与歌单管理一应俱全,可直接加入播放器队列。
  • 实时通知:内置 WebSocket 网关,后续可扩展扫描与播放的实时反馈。
  • 转码缓存:集成 FFmpeg 实时转码,支持自动生成指定码率的缓存文件并在后台统计与清理。
  • 插件与元数据:插件清单自动识别目录内 manifest,元数据提供方支持启用、优先级配置与第三方源扩展。

目录结构

.
├── backend/              # Node.js + Express + Prisma API 服务
│   ├── src/              # 路由、服务、扫描、转码等核心代码
│   ├── prisma/           # 数据模型与迁移
│   └── Dockerfile        # 后端镜像构建配置
├── frontend/             # React + Vite 前端应用(生产镜像内置 Nginx)
│   ├── src/              # 页面、组件、状态与 API 封装
│   └── nginx.conf        # 生产部署反代配置(容器已包含)
├── media/                # 默认本地媒体目录(可自定义)
├── plugins/              # 插件清单目录
├── playlists/            # 歌单导入目录
├── docker-compose.yml    # 一键编排示例
└── README.md

使用 Docker Compose 部署(推荐)

Docker Compose 已包含前后端两个服务与持久化卷,开箱即用。

1) 准备目录(第一次使用会自动创建)

  • 媒体:./media
  • 歌单导入:./playlists
  • 插件:./plugins

2) 如需修改对外端口(避免与本地开发端口冲突),可使用覆盖文件:

services:
  backend:
    ports:
      - "4000:4000"
  frontend:
    ports:
      - "5173:80"

3) 构建并启动(后台运行)

docker compose build
docker compose up -d

4) 访问

5) 常用运维命令

# 查看运行状态与日志
docker compose ps
docker compose logs -f backend
docker compose logs -f frontend

# 重启/停止
docker compose restart
docker compose stop

# 下线并删除容器(保留数据卷)
docker compose down

# 下线并删除容器 + 数据卷(谨慎)
docker compose down -v

6) 升级与变更

git pull
# 任选其一
docker compose pull && docker compose up -d     # 若有远程镜像
docker compose build --no-cache && docker compose up -d

7) 自定义环境变量与挂载
docker-compose.yml 中预置了常用项(可按需调整):

  • backend.environment

    • DATABASE_URL: "file:/app/data/dev.db"(SQLite 路径,生产环境请使用容器卷持久化)
    • APP_PORT: 4000
    • ADMIN_DISPLAY_NAME: "Administrator"
    • ADMIN_EMAIL: "admin@example.com"
    • ADMIN_PASSWORD: "ChangeMe123"
    • LIBRARY_ROOT: "/data/media"(容器内扫描目录)
    • PLAYLISTS_IMPORT_ROOT: "/data/playlists"
    • REGISTRATION_OPEN: "true"
  • backend.volumes

    • backend_data:/app/data (数据库文件与迁移状态)
    • backend_storage:/app/storage (转码缓存、封面等)
    • ./media:/data/media
    • ./playlists:/data/playlists
    • ./plugins:/app/plugins
提示:Windows/macOS 请确保 Docker Desktop 已开启对应目录的文件共享权限。

使用 Docker(单机容器)部署

如果不使用 Compose,也可手动运行两个容器。注意:前端容器内的 Nginx 默认把 API 反代到名为 backend 的主机,因此建议把后端容器命名为 backend,并让两个容器加入同一自定义网络。

1) 构建镜像

docker build -t daoliyu-backend ./backend
docker build -t daoliyu-frontend ./frontend

2) 创建网络

docker network create daoliyu_net

3) 运行后端(命名为 backend 以便前端反代)

docker run -d --name backend --network daoliyu_net \
  -p 4000:4000 \
  -e DATABASE_URL="file:/app/data/dev.db" \
  -e APP_PORT=4000 \
  -e ADMIN_DISPLAY_NAME="Administrator" \
  -e ADMIN_EMAIL="admin@example.com" \
  -e ADMIN_PASSWORD="ChangeMe123" \
  -e LIBRARY_ROOT="/data/media" \
  -e PLAYLISTS_IMPORT_ROOT="/data/playlists" \
  -e REGISTRATION_OPEN="true" \
  -v daoliyu_db:/app/data \
  -v daoliyu_storage:/app/storage \
  -v "%cd%/media":/data/media \
  -v "%cd%/playlists":/data/playlists \
  -v "%cd%/plugins":/app/plugins \
  daoliyu-backend

4) 运行前端

docker run -d --name daoliyu-frontend --network daoliyu_net \
  -p 5173:80 \
  daoliyu-frontend

完成后访问 http://localhost:5173

欢迎友情赞助支持

2025-09-24T00:52:44.png
2025-09-24T00:52:55.png