飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

2026-04-23 20:57:23 30点赞 389收藏 10评论

MiMusic 是一个自托管的个人音乐服务器,用 Go 编写,单一可执行文件,不依赖系统运行时环境。服务端以二进制和 Docker 镜像形式分发,客户端基于 Flutter,支持 iOS、Android、macOS、Windows、Linux 和 Web。

项目在 github.com/mimusic-org/mimusic,Apache-2.0 协议。客户端已开源,服务端暂未开源。


功能

MiMusic 自动扫描音乐目录,支持 MP3、FLAC、WAV、APE、OGG、M4A 等格式,扫描时提取封面、歌词、艺术家等元数据。本地文件标签不完整,可以用"音乐标签刮削"插件从各平台补全。

插件跑在 WebAssembly 沙箱里,官方目前有三个:洛雪音源(聚合多平台网络音乐,可搜索导入)、音乐标签刮削(自动抓取封面、专辑、歌词)、小米音箱插件(登录小米账号后控制小爱音箱播放本地音乐,支持多账号)。

认证用 JWT 双 Token,REST API 遵循 OpenAPI 规范,文档在 http://NASIP:58091/swagger/index.html。


版本与部署

官方有两个版本。完整版(-full)内置 Web 前端,下载后直接运行,访问 http://NASIP:58091 就能用;精简版不含前端,适合配合 Flutter 客户端或前后端分离部署。第一次用选完整版。


飞牛 NAS Compose 部署

第一步:进入 Compose 项目管理

打开飞牛 NAS 的 Docker 管理界面,点左侧"项目",再点右上角"新建项目"。

飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

第二步:填写项目信息

项目名称填 mimusic,存储路径选一个放 Compose 文件的目录,比如 /vol1/docker/mimusic。

飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

第三步:编写 Compose 配置

在配置编辑框里粘贴以下内容:

services: mimusic: image: hanxi/mimusic:full container_name: mimusic restart: always network_mode: host volumes: - /vol1/music:/app/music - /vol1/mimusic/data:/app/data environment: - ADMIN_USERNAME=admin - ADMIN_PASSWORD=你的密码 - LISTEN_PORT=58091 - MUSIC_DIR=/app/music - DATA_DIR=/app/data

几个地方按实际情况改:

  • /vol1/music 换成 NAS 上存音乐文件的实际路径

  • /vol1/mimusic/data 换成存数据库和配置的路径,目录不存在飞牛会自动建

  • ADMIN_PASSWORD 必须改,默认 admin 暴露到外网谁都能登录

  • LISTEN_PORT 和其他容器冲突就换一个没被占的端口

飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

这里用了 network_mode: host,让容器直接用宿主机网络。host 模式下 ports 配置无效,不用写,端口通过 LISTEN_PORT 指定。为什么要用 host 模式,后面"小爱音箱的网络模式问题"一节里说。


第四步:部署

点"部署",飞牛自动拉取 hanxi/mimusic:full 并启动容器。网络正常的话一两分钟完成。

飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

第五步:访问 Web 界面

浏览器打开 http://NASIP:58091,用刚才设的账号密码登录。首次登录先确认音乐目录路径对,然后点"扫描"建库。

飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

升级

飞牛 Docker 管理界面进"项目",找到 mimusic,点"更新",飞牛拉取最新镜像并重建容器。数据目录挂载不变,歌单和配置都在。


主要环境变量:

飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

音乐库管理

MUSIC_DIR 挂载的是 NAS 上的实际音乐目录。挂载前先整理好目录结构,按"艺术家 / 专辑"分层存放,扫描后浏览顺手。平铺也能识别,但歌单自动生成时按文件夹路径分组,结构乱生成结果也会乱。

首次部署完成后,进 Web 界面点"扫描",系统遍历 MUSIC_DIR 下所有音频文件并提取元数据。扫描是增量的,后续新加文件再点一次只处理新增内容。

飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

部分歌曲封面或歌词为空,打开"音乐标签刮削"插件,选中歌曲触发刮削,插件从各平台匹配写入。匹配失败的,歌曲详情页可以手动编辑标签。

飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损飞牛 NAS 部署 MiMusic:自建音乐服务器,六端同步听无损

外网访问

有公网 IP:路由器做端口转发,把外网端口映射到 NAS 的 58091,配合 DDNS 绑个域名,直接访问。延迟最低。

没有公网 IP(大多数家庭宽带):用 Tailscale。基于 WireGuard,在手机和 NAS 之间建加密隧道,不用配端口映射,免费版支持最多 100 台设备。手机和 NAS 都装上并登录同一账号,手机通过 Tailscale 分配的 IP 访问 NAS,和在家里局域网里一样。frp 也行,但需要一台有公网 IP 的云服务器做中转,速度看服务器带宽。

开外网访问前先改密码。默认账号密码都是 admin,暴露到公网就是裸奔。在 Compose 配置里把 ADMIN_PASSWORD 换掉,重新部署生效。


数据备份与迁移

运行数据全在 DATA_DIR 里,核心是 data/mimusic.db,一个 SQLite 数据库,存着歌单、收藏、配置和用户信息。音乐文件还在原来的 MUSIC_DIR 下,不在这里。

备份只需要定期复制 DATA_DIR。飞牛有计划任务,设每天自动备份一次就行。几千首歌的库,数据库通常也就几 MB。

换机或重建容器时,把 DATA_DIR 备份复制到新路径,新容器挂载同一目录,启动后歌单和配置都回来了。升级版本后出异常,官方 FAQ 建议删掉 data/mimusic.db 重启,但这会清空所有用户数据,操作前先备份。


多用户使用

目前只有一个管理员账号。家里多人共用时,所有人登同一个账号,播放历史和歌单不隔离。口味差异大的话,靠命名区分歌单,比如"张三的歌单""李四的歌单"。多账号在官方 TODO 里,进展可以看 GitHub 项目页


小爱音箱的网络模式问题

小米音箱插件靠局域网广播发现音箱。Docker 默认 bridge 模式隔离了容器和宿主机网络,插件扫不到音箱。改成 host 模式,容器直接用宿主机网络接口,问题解决。

Compose 配置里已经写了 network_mode: host,不用额外操作。如果之前是手动建的容器,进容器设置把网络模式改成"host",重启生效。host 模式下 ports 映射失效,端口用 LISTEN_PORT 指定。


关于开源状态

客户端完全开源。服务端以预编译二进制和 Docker 镜像分发,代码目前无法审计。整体免费,对隐私要求高的用户自己判断。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
10评论

  • 精彩
  • 最新
  • 如果bridge网络多开几个关键port,小爱音箱也不行么?

    校验提示文案

    提交
    小爱走的是局域网广播,bridge 转发端口解决不了。

    校验提示文案

    提交
    收起所有回复
  • 请问是否支持识别整轨音频文件同目录下的CUE文件?

    校验提示文案

    提交
    暂时不支持 CUE 分轨。

    校验提示文案

    提交
    收起所有回复
  • 刮削music_web_tag,客户端用音流,无敌配置。

    校验提示文案

    提交
    这套组合确实强,属于进阶玩法了。

    校验提示文案

    提交
    一直没发现音流有什么优势

    校验提示文案

    提交
    收起所有回复
  • 无损音乐资源哪里来呢,有支持QQ音乐格式的吗

    校验提示文案

    提交
    这个docker的功能和navidrome、道理鱼差不多,主要是管理歌曲库的。
    需要下载,可以了解下sq-music,各大平台的无损基本都可以搜索下载,还能自动刮削信息,下载封面、歌词。
    目前我的流程是sq-music负责下载,通过道理鱼管理歌曲库,手机端使用箭头音乐。

    校验提示文案

    提交
    有网盘还搜不到歌?

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
389
扫一下,分享更方便,购买更轻松