Navidrome 是免費開源的音樂串流伺服器:把你硬碟裡的 MP3、FLAC、Opus 變成一個自己的 Spotify,瀏覽器、手機、CarPlay 與 Sonos 都能播,多使用者、多音樂庫、分享連結與智慧播放清單全部免費。2026 年 9 月的最新穩定版是 v0.64.2。
為什麼 2026 年還值得自架一套音樂伺服器?
理由和自架影音庫很像,但音樂這一塊在 2026 年多了一個新變數。第一,你的歌庫不會被平台下架或改版;串流平台的目錄、推薦與廣告策略一直在動,自己那份 FLAC 永遠在。第二,AI 音樂正在稀釋「人做的音樂」:Deezer 每日收到近 9 萬首全 AI 生成曲目、佔每日上傳量超過五成,平台端開始加標籤、做過濾,但對「只想聽自己選的歌」的人來說,最徹底的過濾方式就是自己養一份歌庫(背景見文末延伸閱讀)。第三,冷門音樂只有自架找得到:獨立樂團的現場盤、自己轉的黑膠、買不到的數位單曲,平台沒有就是沒有。
Navidrome 與主流訂閱服務:能力對照,不是價格之爭
| 項目 | Navidrome(自架) | Spotify | Apple Music | YouTube Music |
|---|---|---|---|---|
| 收費模式 | 開源免費,成本=硬體+硬碟電費 | 月訂閱 | 月訂閱 | 月訂閱 |
| 音源 | 你自己的檔案(MP3/FLAC/ALAC/Opus/AAC 幾乎全吃) | 平台曲庫 | 平台曲庫 | 平台曲庫 |
| 離線播放 | 由 App 下載,容量自己決定 | 有(限裝置數) | 有 | 有 |
| 冷門/已下架曲目 | 有,只要你有檔案 | 常常找不到 | 常常找不到 | 常常找不到 |
| 多使用者 | 有(各自獨立播放次數、清單、最愛) | 家庭方案 | 家庭方案 | 家庭方案 |
| 音樂 AI 推薦 | 需自行加裝(AudioMuse-AI 外掛) | 平台演算法 | 平台演算法 | 平台演算法 |
| 手機 App | 102 個相容 App 可選(見下文) | 官方 App | 官方 App | 官方 App |
| 維護成本 | 要自己顧 Docker、備份、憑證 | 幾乎為零 | 幾乎為零 | 幾乎為零 |
用法建議很直白:主力聽串流、自架庫當「保底與冷門盤」,兩者並存最舒服。Navidrome 一個人維護、一台舊筆電或 NAS 就跑得動。
Navidrome 是什麼?規格與現況(2026/10 查證)
| 項目 | 內容 |
|---|---|
| 定位 | 網頁版音樂收藏伺服器與串流器,README 自稱「your personal Spotify」 |
| 語言/授權 | Go 撰寫/GPL-3.0 |
| GitHub 星數 | 24,165 stars、1,757 forks(2026/10/14 查證) |
| 首次釋出 | 2016/2/24(已十年) |
| 最新版本 | v0.64.2(2026/9/24 發布,bug fix 版) |
| 相容協定 | Subsonic/Madsonic/Airsonic API+OpenSubsonic 擴充 |
| 官方客戶端生態 | 官網 Apps 頁列 102 個相容 App |
| 介面語言 | 已翻譯 34 種語言(含繁體中文) |
| 平台 | Linux/macOS/Windows、Docker(amd64/arm64/armv6/armv7)、官方 Raspberry Pi 執行檔 |
核心特色:極低資源占用(文件明寫連 Raspberry Pi Zero 都能跑)、大歌庫處理、自動監看資料夾匯入新檔與更新標籤、每位使用者獨立的播放次數/清單/最愛、多音樂庫與個別存取權限、轉碼(per user/player,支援 Opus 編碼)、歌詞(外掛字幕檔 .lrc/.srt/.ttml/.txt 與內嵌標籤)、智慧/動態播放清單(Beta)、分享公開連結、Scrobbling(Last.fm/ListenBrainz/Maloja)、外部驗證整合、Jukebox 模式(用伺服器接的音效裝置播放)、外掛系統。
用 Docker 部署:可直接複製的 docker-compose.yml
官方映像檔是 deluan/navidrome。這份設定是從官方文件改寫的最小可運作版本:
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: "1000:1000" # 必須同時擁有 data 目錄寫入權與 music 目錄讀取權
ports:
- "4533:4533"
restart: unless-stopped
environment:
# 以下都可省略,範例值就是預設值
ND_LOGLEVEL: info
ND_SCANSCHEDULE: "@every 24h"
ND_ENABLEINSIGHTSCOLLECTOR: "false" # 關掉匿名統計回傳
volumes:
- "/srv/navidrome/data:/data" # 資料庫、快取、外掛(可寫)
- "/srv/music:/music:ro" # 音樂庫(唯讀即可)
mkdir -p /srv/navidrome/data
sudo chown -R 1000:1000 /srv/navidrome/data # 換成你自己的 uid:gid
docker compose up -d
docker compose logs -f navidrome
啟動後開 http://<主機IP>:4533,第一次登入會要你建立管理員帳號(預設帳密 admin/admin,務必立刻改掉)。
內網先用就好:Navidrome 內建帳號系統沒有 2FA,直接曝露到公網風險很高。要外網存取請走反向代理+HTTPS,或直接用 Tailscale/WireGuard 這類 VPN 打進內網。
權限陷阱:實際會看到的錯誤訊息對照表
新手卡關 90% 都在這裡。兩個掛載目錄的失敗方式不一樣,看 log 就能判斷哪一個錯:
| 症狀/log 訊息 | 原因 | 解法 |
|---|---|---|
Error applying PRAGMA optimize / unable to open database file / 啟動即 panic 退出 | /data 不可寫 | mkdir -p 後 chown -R $(id -u):$(id -g) 給它 |
網頁正常但音樂庫永遠是空的;Error starting watcher ... permission denied、Scanner: Target folder does not exist | 容器使用者讀不到 /music | chown -R 換擁有者,或 chmod -R a+rX /srv/music |
想用 PUID/PGID 控制權限但沒反應 | 那組變數是 linuxserver.io 的慣例,Navidrome 映像檔直接忽略 | 改用 compose 的 user: 指令 |
拿掉 user: 之後錯誤全消失 | 容器變成 root 在跑,什麼都寫得進去 | 不要這樣做,回去修資料夾權限 |
補充兩個實務細節:/music 掛成 :ro(唯讀)完全沒問題,Navidrome 只需要讀;多音樂庫的進階用法則是為每個庫再掛額外的磁碟區。
反向代理與 BaseUrl:/music 或子網域都能走
放在 Nginx/Caddy/Cloudflare Tunnel 後面時,記得設定 BaseUrl,否則分享連結與 Jellyfin API 路徑會組錯:
# /srv/navidrome/data/navidrome.toml
BaseUrl = "https://music.example.com"
Port = 4533
- 走子網域:
BaseUrl = "https://music.example.com" - 走子路徑:
BaseUrl = "/music" - 分享連結格式是
http://yourserver.com/share/XXXXXXXXXX,反向代理要放行/share;用子路徑時記得把/music前綴一起轉發。
設定方式:環境變數、設定檔、命令列三選一
官方規則:任何設定選項都能用環境變數設定,只要加上 ND_ 前綴並全大寫,例如 ND_LOGLEVEL=debug。優先順序(高到低)是環境變數 → 命令列參數 → 設定檔。Docker 使用者若想要設定檔,把 navidrome.toml 放進對應到 /data 的資料夾,Navidrome 會自動讀取;也能用 ND_CONFIGFILE=/data/navidrome.toml 指定路徑,或 -c/--configfile 帶入(支援 toml/json/yml/ini)。
# 常用選項範例(/data/navidrome.toml)
LogLevel = 'info'
MusicFolder = '/music'
Scanner.Schedule = '@every 24h' # cron 或 @every 語法
TranscodingCacheSize = '150MiB'
Agents = 'deezer,lastfm,listenbrainz' # 藝人簡介/圖片的資料來源與優先序
EnableSharing = true
DefaultShareExpiration = '8760h' # 分享連結預設 1 年到期
| 環境變數 | 用途 | 預設 |
|---|---|---|
ND_MUSICFOLDER | 音樂庫路徑(可唯讀;多音樂庫時作為預設庫) | ./music |
ND_DATAFOLDER | 資料庫與快取所在 | ./data |
ND_CACHEFOLDER | 轉碼與圖片快取 | <DataFolder>/cache |
ND_PORT / ND_ADDRESS | HTTP 埠(4533)/綁定位址 | 0.0.0.0、:: |
ND_BASEURL | 反向代理用的基底網址 | 空 |
ND_LOGLEVEL | error/warn/info/debug/trace | info |
ND_SCANSCHEDULE | 掃描排程(cron 或 @every) | @every 24h |
ND_TRANSCODINGCACHESIZE | 轉碼快取上限 | 150MiB |
ND_ENABLESHARING | 對外分享連結開關 | true |
ND_AGENTS | 藝人資訊來源順序 | deezer,lastfm,listenbrainz |
ND_ENABLEINSIGHTSCOLLECTOR | 匿名使用統計回傳 | true |
中文/日文標籤亂碼怎麼修(台灣使用者最常踩的坑)
Navidrome 完全依照檔案內的 metadata 標籤來組織音樂,不看資料夾名稱、也不看檔名。 這件事的實際後果是:你的 Music/周杰倫/范特西/01 - 愛在西元前.flac 檔名再漂亮,只要標籤是空的或亂碼,介面上就會顯示亂碼或變成「Unknown Artist」。
最少要填的欄位:Title、Artist、Album、Album Artist、Track Number;選填 Genre、Year/Date、Disc Number。其中 Album Artist 是專輯不被拆散的唯一關鍵——同專輯所有曲目必須一致;合輯則統一填「Various Artists」,並把 Compilation 標記設為 1(MP3/ID3 是 TCMP=1,FLAC/Vorbis 是 COMPILATION=1)。
亂碼的三種成因與修法
| 成因 | 症狀 | 解法 |
|---|---|---|
| 舊 CD 轉檔或對岸來源寫入 Big5/GBK 編碼的 ID3v2.3 標籤 | 中文變成一串「燙燙」或問號 | 用 Mp3tag(Windows)或 MusicBrainz Picard 重新以 UTF-8/ID3v2.4 寫入標籤 |
| ID3v1 與 ID3v2 標籤並存且內容不一致 | 同一首歌在不同 App 顯示不同名字 | 兩個都對齊,或直接移除 ID3v1 |
| 日文曲目用了 Shift-JIS 且無 UTF-8 標籤 | 日文漢字/假名亂碼、專輯被拆成兩張 | 以 Picard/beets 批次重寫;beets 可用 beet write 統一寫回 |
批量處理的實務流程是:先用 Picard 依 MusicBrainz 指紋比對(一次修正整張專輯的曲序與標籤),剩下查不到的再由 beets 或 Mp3tag 手動補。改完標籤後回 Navidrome 按一次重新掃描即可,資料庫會更新;Navidrome 也會自動監看資料夾變化。若某些檔案永遠不該入庫(例如練團用的母帶、sample 庫),可在資料夾放 .ndignore 排除。
標籤整理是一次性投資:整理乾淨之後,未來就算換到別的音樂伺服器(Jellyfin、Plex、Emby)或播放軟體,整份歌庫都能無痛搬過去。
掃描、備份與診斷:CLI 就夠用
Navidrome 內建 CLI,常見指令如下(Docker 就在 docker compose exec navidrome navidrome <指令>):
navidrome scan # 手動觸發掃描(會顯示新增/更新曲目數)
navidrome backup # 備份資料庫與設定
navidrome doctor # 環境自我檢查
navidrome inspect <path> # 檢查單一檔案被解析出的標籤
navidrome missing # 找出資料庫裡對應不到檔案的曲目
navidrome user list # 使用者管理
navidrome pls ... # 播放清單相關操作
navidrome service ... # 背景服務管理
備份鐵則:真正要備份的是 /data(資料庫與設定),不是音樂檔本身——音樂檔的備份屬於另一個題目。navidrome backup 之外,直接把 /data 目錄定期打包/同步即可;資料庫是 SQLite,備份時要先停容器或用內建 backup,硬拷正在寫入的 SQLite 檔可能拿到不一致的內容。
手機與桌面 App 怎麼挑(102 個相容 App 的選型法)
只要支援 Subsonic/OpenSubsonic API,任何 App 都能連上 Navidrome。官方 Apps 頁目前列出 102 個,實際挑選建議按平台與需求:
| 平台 | 推薦 App | 亮點 |
|---|---|---|
| Android | Symfonium(付費)、Substreamer、Chora、CapAudio | Symfonium 功能最完整;Chora 支援 Android Auto;CapAudio 有裝置端 AI 播放清單 |
| iOS/macOS | Amperfy(開源)、Arpeggi、AmpSonic、Cassette、Cadence | Amperfy 支援 CarPlay、離線、ReplayGain;Arpeggi/AmpSonic 走 SwiftUI 原生體感 |
| 桌面 | Feishin、Aonsoku(Electron)、Aura(Rust) | Feishin 同時支援 Navidrome 與 Jellyfin;Aura 記憶體占用極小 |
| 網頁/PWA | 內建 Web UI、Airdrome、Airsonic Refix | 不想裝 App 時最省事 |
| 音響整合 | bonob(Sonos SMAPI) | 讓 Sonos 喇叭直接吃自架歌庫 |
| Jellyfin 生態 | Finamp、Jellify | 透過 Navidrome 的 Jellyfin API 連線(見下文) |
連線設定都一樣:伺服器位址(外網就用你的 HTTPS 網址)、帳號密碼、可選是否轉碼。每位連上的裝置會在 Settings > Players 出現一筆播放器設定,你可以在那裡替個別裝置指定轉碼格式(例如手機在外用 Opus 降流量、家中 WiFi 直出 FLAC)。
轉碼怎麼想
Navidrome 能即時轉碼,而且是按使用者/播放器設定。原則:內網有頻寬就別轉(保留原始無損),外網或行動網路再轉(Opus 是官方支援的編碼,流量效率好)。轉碼需要 FFmpeg,Docker 映像檔已內含;自行安裝執行檔時要設定 FFmpegPath。轉碼快取預設上限 150MiB,大量轉碼的站台可以再調高。
進階玩法:分享、Scrobbling、多音樂庫、智慧播放清單
- 分享連結:任何曲目/專輯/藝人/播放清單都能產生
http://yourserver.com/share/XXXX的公開連結,對方不用有帳號就能聽或下載。每個使用者只看得到自己建立的分享,管理員可管理全部;預設 1 年到期,可用DefaultShareExpiration調整。不想讓使用者對外開連結就關掉ND_ENABLESHARING——這是一個全站總開關,沒有 per-user 設定。 - Scrobbling:支援 Last.fm、ListenBrainz,也能透過自訂 ListenBrainz URL 走 Maloja。
- 多音樂庫:可掛多個音樂資料夾,並用個別使用者的存取權限區隔(例如家人庫與自己的庫分開)。
- 智慧/動態播放清單(Beta):類似 iTunes 的條件式清單;另支援自動匯入並同步
.m3u檔。 - Jukebox 模式:伺服器接著 DAC 或音響時,可用手機當遙控器叫伺服器自己播。
- 外掛系統:
<DataFolder>/plugins放外掛,Plugins.AutoReload開啟後可自動載入。
兩個 0.64 之後才有的新東西
1. Jellyfin API(實驗性):讓 Jellyfin 音樂 App 直接連 Navidrome
從 0.64.0 起,Navidrome 能回應一部分 Jellyfin API,所以為 Jellyfin 寫的音樂 App 可以連上 Navidrome——你不需要架 Jellyfin。它預設關閉:
environment:
ND_JELLYFIN_ENABLED: "true"
# 想讓客戶端自動搜尋到伺服器再加這行:
ND_JELLYFIN_AUTODISCOVERY: "true"
啟用後 API 在 /jellyfin 路徑(例:http://192.168.1.10:4533/jellyfin;有 BaseUrl 時是 https://example.com/music/jellyfin)。客戶端就填這個網址+Navidrome 帳密。官方測試過的 App 是 Finamp、Jellify、Feishin;影片、Live TV 與 Jellyfin 管理後台不在支援範圍。自動搜尋走 UDP 7359,Docker 預設 bridge 網路收不到廣播,必須用 network_mode: host(此時 ports: 會被忽略,直接用主機的 4533/7359)。
2. AudioMuse-AI:本機音訊分析做出「Instant Mix」
外部 metadata 代理(Deezer/Last.fm)靠的是別人的資料庫,冷門與未發行作品常常查不到。AudioMuse-AI 是自架服務,直接分析你檔案裡的節奏、音色、能量等聲音特徵,找出「聽起來相似」的歌,透過 AudioMuse-AI-NV-plugin 外掛接進 Navidrome。裝好之後你會得到:
- Instant Mix:在 Web UI 對任一首歌點右鍵就能生出相似歌曲佇列;
- 相似歌曲/相似藝人:在 Symfonium、Feishin、Substreamer 等 App 裡透過標準
getSimilarSongs端點直接生效; - OpenSubsonic
sonicSimilarity擴充:提供getSonicSimilarTracks(附相似分數)與findSonicPath(指定起訖歌,串出一條逐步過渡的播放路徑)。
安裝流程簡述:跑起 AudioMuse-AI 核心服務並在 Setup Wizard 設一組 API token → 到外掛頁下載最新 audiomuseai.ndp → 丟進 <DataFolder>/plugins → 重啟 Navidrome(或開 Plugins.AutoReload 讓它自動載入)→ 在 Settings > Plugins 啟用外掛,填 API URL(例如 http://192.168.1.50:8000,不能用 localhost,要用容器實際連得到的位址)與同一組 token。除錯口訣:401 Unauthorized 是 token 不一致;AudioMuse 端完全沒有請求進來就是 URL/網路不通;結果很爛通常只是分析還沒跑完。
常見問題排查速查
| 症狀 | 檢查順序 |
|---|---|
| 網頁打不開 | docker compose logs 有沒有 panic → ND_PORT 是否被占用 → 防火牆 |
| 音樂庫空白 | /music 權限(見前表)→ ND_MUSICFOLDER 路徑 → 標籤是否全空 |
| 專輯被拆成好幾張 | Album Artist 不一致(最常見)→ 合輯缺 Compilation 標記 → 多片裝 Disc Number 沒填 |
| 掃描卡住/UI 凍結 | 0.64.0 在慢速儲存(USB 硬碟、網路磁碟)曾有 database is locked 問題,升到 v0.64.2 已修(掃描期間暫停封面處理、ANALYZE 不再長時間持有寫鎖) |
| 手機 App 連不上 | 先確認內網 IP 能連 → 再測外網 HTTPS/VPN → 檢查 BaseUrl 是否正確 |
| 分享連結在聊天軟體沒預覽 | 反向代理要放行 /share,並保留 meta-tags |
| 想省資源 | 關掉 EnableInsightsCollector、降低掃描頻率、內網不要轉碼 |
結語
Navidrome 最漂亮的設計是它「什麼都不做太多」:不幫你下載音樂、不做音樂目錄,只管好你已經擁有的一切——用一個 24K 星的 Go 服務、24MB 級別的記憶體占用,把你那份歌庫變成全家可用的串流服務。部署大約 10 分鐘,真正花時間的是把標籤整理乾淨;而那份整理過的中文/日文標籤,會一路陪你換過下一個十年的播放工具。
如果你正在建立自己的自架全家桶,建議搭配閱讀:照片交給 Immich、影片交給 Jellyfin、檔案同步交給 Syncthing,四件事湊齊就是一套沒有訂閱費的個人雲。
站內延伸閱讀
- 自架媒體伺服器的另一塊拼圖:Jellyfin 完整教學 2026
- 照片也要自己管:Immich 開源自託管照片和影片管理器
- 私有雲硬碟:Nextcloud 完整教學 2026
- P2P 檔案同步:Syncthing 完整教學 2026
- 把音樂庫藏在外網之後:Cloudflare Tunnel 完整教學 2026
- 為什麼要自建音樂庫?串流平台的 AI 音樂分艙時代:YouTube Music 上線 AI 標籤、Deezer 讓你一鍵過濾
原始來源
- Navidrome 官方網站/GitHub 專案
- Installing with Docker(官方文件,含權限說明)
- Configuration Options(環境變數與設定檔全表)
- Tagging Guidelines(標籤規範)
- Jellyfin API (Experimental)
- AudioMuse-AI 整合說明
- Client Apps(102 個相容 App 清單)
- Sharing/Smart Playlists/CLI 官方文件
版本與數據查證時間:2026-10-14(stars/forks 取自 GitHub API,最新版本 v0.64.2 發布於 2026-09-24)。Jellyfin API 為實驗性功能,不同客戶端可能仍會打到 Navidrome 尚未實作的請求。
