Folia 私有音乐播放器 NAS 部署教程:把家用 NAS 变成打开浏览器就能听歌的音乐站
【免费下载链接】folia-major专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major
把 Folia 私有音乐播放器架在 NAS 上,手机、电脑打开浏览器,网易云、酷狗、QQ 音乐和你自己的 Navidrome 曲库都能播,歌词还会全屏逐字动起来。整套 Docker 部署只带走仓库里 2 个文件、敲 4 条左右命令,占用 18080、13000 两个端口,配完之后你只需要记住一个网址。
Folia 部署后长什么样:多源曲库浏览与全屏歌词动画
首页是横向 3D 封面轮播,顶部搜索框直接搜三个在线源。点进歌曲,歌词进入全屏动画模式:
歌词动画不止一种风格,另一种偏海报式大字排版的效果长这样:
Folia Docker 部署清单:环境、端口与要带走的 2 个文件
NAS 终端里跑一条命令确认环境:
docker version && docker compose version判断标准:Docker Engine 输出 24 及以上的版本号,docker compose version能正常输出一行 v2 信息。另外确认 18080、13000 两个端口没被其他服务占用。
部署不需要同整个源码,deploy/docker/ 目录下只需要带走两个文件:
| 文件 | 仓库路径 | 用途 |
|---|---|---|
| 编排文件 | compose.yaml | 定义 6 个容器、4 张网络,是整站骨架 |
| 配置模板 | .env.example | 重命名为.env后填入你的配置 |
提前知道 6 个容器的分工,排障时能省不少时间:
gateway:Nginx 网关,唯一对外入口,占 18080backend:Web API(AI 主题、歌词分词),仅内网netease-api/kugou-api/qq-api:三个音乐源接口,仅内网sync-server:数据同步服务,占 13000
"仅内网"指这几个容器挂在 Docker 的internal: true网络上,外部无法绕过网关直接访问它们;Sync Server 更独立,挂在单独的folia-sync网络上。
Folia NAS 一条命令跑通:拉配置、生成令牌、点火启动
第 1 步:把两个文件弄到 NAS 上(约 1~2 分钟,看网速):
git clone https://gitcode.com/GitHub_Trending/fo/folia-major folia-major mkdir -p folia-docker cp folia-major/deploy/docker/compose.yaml folia-docker/ cp folia-major/deploy/docker/.env.example folia-docker/.env判断标准:folia-docker/里只有compose.yaml和.env两个文件。仓库目录folia-major/之后不再需要。
第 2 步:生成同步令牌:
openssl rand -hex 32判断标准:终端打印出一串 64 位十六进制字符。这是 Sync Server 的 Bearer 令牌,可以理解为客户端访问同步接口时出示的身份凭证。
第 3 步:写配置。打开.env,至少保证这两行有值:
FOLIA_IMAGE_NAMESPACE=papersman SYNC_TOKEN=粘贴第2步的64位字符串FOLIA_IMAGE_NAMESPACE是镜像所在命名空间,模板已填好,保留即可。AI 密钥两行留空没关系,只是暂时用不了 AI 主题生成和歌词分词,播放照常。
第 4 步:校验并启动:
cd folia-docker docker compose config判断标准:完整打印出展开后的 YAML,末尾没有required variable之类报错,说明.env解析通过。
docker compose pull判断标准:依次拉下 folia-web、folia-web-api、folia-netease-api、folia-kugou-api、folia-qq-api、folia-sync-server 六个镜像。这是全程最慢的一步,首次拉镜像大小几百 MB,耐心等待。
docker compose up -d --wait--wait会一直等到所有健康检查通过才返回。判断标准:命令无报错地结束,一般 1~3 分钟。
第 5 步:自检:
docker compose ps判断标准:6 个服务的 STATUS 列全是(healthy),没有restarting。
再用两条 curl 从用户视角确认:
curl http://NAS-IP:18080/healthz curl http://NAS-IP:13000/health判断标准:第一条返回{"ok":true,"service":"folia-gateway"},第二条返回 200。最后浏览器打开http://NAS-IP:18080,能看到首页就算部署成功。
Folia 配置速查:哪两个变量必填,哪几个可选
.env.example 里其余项保持默认即可,只有下表需要你亲自过一遍:
| 变量 | 默认值 | 作用 | 不填会怎样 |
|---|---|---|---|
FOLIA_IMAGE_NAMESPACE | 模板已填papersman | 镜像命名空间 | Compose 直接拒绝启动 |
SYNC_TOKEN | 空 | Sync Server 的 Bearer 令牌,至少 8 位 | up时报错,整站起不来 |
FOLIA_HTTP_PORT | 18080 | Web 网关端口 | 端口被占用时必须改 |
GEMINI_API_KEY/OPENAI_API_KEY | 空 | AI 主题生成与歌词分词 | 两个功能不可用,播放正常 |
NAVIDROME_URL/NAVIDROME_USERNAME/NAVIDROME_PASSWORD | 空 | 服务端预置 Navidrome 自动登录 | 每台设备都要手动填一次账号 |
版本不用操心:不设FOLIA_STACK_VERSION就是latest。想固定版本就显式写出A.B.C标签,当前版本见 deploy/docker/VERSION。
接入自己的曲库:Navidrome 账号手动填还是服务端预置
前提:你的音乐文件已经由一个 Navidrome 实例托管(Navidrome 负责管理本地音乐文件和元数据)。没有就先部署一个,这一步与 Folia 无关。
在线源的登录很简单:页面上对应标签页里扫码即可,QQ 音乐支持手机 QQ 扫码和微信扫码。想让"自己的歌"进场,Navidrome 有两条连接路径:
- 手动填:在 Folia 的 Navidrome 设置页填地址(例如
http://NAS-IP:4533)和账号密码,测试通过即可。适合只在一两台设备上用。代价是每台设备(手机、电脑)都要重复填一遍。 - 服务端预置:
.env里填NAVIDROME_URL、NAVIDROME_USERNAME、NAVIDROME_PASSWORD三项,之后新打开的浏览器自动登录。注意NAVIDROME_URL必须写成各设备都能直连的地址,不能写 Docker 内部主机名;改完执行docker compose up -d --force-recreate backend。
预置有代价要知道:凭据默认只下发给局域网来源(NAVIDROME_PRESET_ALLOW=private),能打开 Folia 页面的人理论上都能读到这组账号密码,建议在 Navidrome 里单建一个专用账号给 Folia 用。
为什么要把 Folia 放到带域名的 HTTPS 后面:三件配套配置
http://NAS-IP:18080能搜能播,但局域网 IP + HTTP 不属于浏览器"安全上下文",这几项能力直接缺席:
- 本地音乐目录导入(File System Access API)
- PWA 安装与离线运行
- 音频输出设备选择
- 标准剪贴板复制
想让本地音乐进场,就靠 NAS 上现成的反向代理(Nginx Proxy Manager、Caddy、Traefik 都行)终止 HTTPS:
https://folia.example.com/ -> http://127.0.0.1:18080 https://sync.example.com/ -> http://127.0.0.1:13000三件配套的事,缺一不可:
- 证书必须是浏览器信任的完整证书链,自签证书不算数;
- 代理要转发
Host、X-Forwarded-Host、X-Forwarded-Proto: https、X-Forwarded-For,并把 HTTP 请求重定向到 HTTPS; .env里把FOLIA_HTTP_BIND、FOLIA_SYNC_BIND改成127.0.0.1堵住直连绕过的口子,同时把代理自身地址填进FOLIA_TRUSTED_PROXIES,否则局域网访问限制看到的永远是代理地址。
两点提醒:应用不支持挂在/folia/子路径下,建议独立子域;HTTP 和 HTTPS 是两个独立 origin,切过去后旧的 IndexedDB、登录态、本地曲库索引不会自动迁移,重新登录一次即可。
Folia 日常运维速记:更新、回滚、备份五个常用动作
# 更新:latest 不会自动拉新,必须手动执行 docker compose pull docker compose up -d# 回滚:.env 里加一行 FOLIA_STACK_VERSION=1.2.2(历史版本自行填 A.B.C),再跑上面两条# 备份:数据全在 FOLIA_SYNC_DATA_DIR(默认 ./data/sync),停服打包再恢复 docker compose stop sync-server tar -czf folia-sync-backup.tar.gz ./data/sync docker compose start sync-server# 查日志与健康检查 docker compose ps docker compose logs --tail=200 gateway backend netease-api kugou-api qq-api sync-server curl http://127.0.0.1:18080/healthz curl http://127.0.0.1:18080/api/healthz curl http://127.0.0.1:18080/qq/login/status curl http://127.0.0.1:13000/health# 重置 QQ 装置身份(换设备注册时才需要) docker compose down docker volume rm folia_qq-api-state docker compose up -d --wait装置状态存在具名卷qq-api-state里,正常更新镜像跨重启复用,不需要动它。
Folia 部署排错:6 个高频问题的现象、原因与解法
1.docker compose up直接报Set SYNC_TOKEN to at least 8 characters现象:启动命令当场报错退出。原因:SYNC_TOKEN为空或少于 8 位;FOLIA_IMAGE_NAMESPACE缺失也会触发同样的硬性校验。解法:openssl rand -hex 32生成 64 位字符串填进.env,再执行docker compose up -d --wait。
2. 网关反复重启,日志提示端口冲突现象:18080 起不来,docker compose ps里 gateway 状态是restarting。原因:NAS 上已有别的服务占了 18080。解法:.env里把FOLIA_HTTP_PORT改成空闲端口(如18081),docker compose up -d重建。
3. 网页能打开,但某个在线源搜索没结果现象:只有单一音源无结果或超时,其他源正常。原因:对应 API 容器不健康,或上游在限流。解法:先docker compose ps确认容器 healthy,再看docker compose logs --tail=200 netease-api(换成对应服务名)里的上游报错;限流一般隔几分钟再试即可恢复。
4. 改了FOLIA_AI_PROVIDER或 Navidrome 账号,界面没变化现象:.env改完刷新页面,行为还是旧的。原因:环境变量只在容器重建时重新注入。解法:执行docker compose up -d --force-recreate gateway backend再刷新页面。
5. QQ 扫码总是提示装置异常,重新扫码也没用现象:反复出现装置类报错,换网络也一样。原因:装置状态卷里残留的旧状态与新设备冲突。解法:执行上面运维速记里的"重置 QQ 装置身份"三条命令,下次扫码会以新装置身份注册。
6. 预置的 Navidrome 不自动登录,新浏览器还要手动填现象:.env三项都填了,新设备打开仍是未登录状态。原因:三项必须同时完整,且NAVIDROME_URL要是浏览器能直连的完整 http(s) 地址,缺一项或地址不通,backend 日志会有警告,预置静默不生效。解法:补齐三项并核对地址,docker compose up -d --force-recreate backend,再看docker compose logs backend确认警告消失。
下一步:官方文档与版本信息
到这里,NAS 上已经跑着整套多源播放 + 全屏歌词动画的 Folia 私有音乐站。更完整的环境变量表、QQ 登录态持久化和本地镜像验证方法,看官方文档 deploy/docker/README.md;镜像与版本信息见 deploy/docker/VERSION。
【免费下载链接】folia-major专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考