24 Agustus 2026
Navidrome: Musik Pribadi dengan Protokol OpenSubsonic
Server streaming musik self-hosted berbasis Go yang berbicara protokol OpenSubsonic: ringan, library berbasis tag, dan kompatibel dengan lusinan aplikasi pemutar.
Navidrome adalah server streaming musik self-hosted berbasis Go. Alih-alih mengunggah koleksi ke layanan cloud, ia memutar file audio milik sendiri dari direktori lokal — lewat browser atau aplikasi mana pun yang berbicara protokol OpenSubsonic.
Mengapa Navidrome
Masalah nyatanya: koleksi musik pribadi, termasuk format lossless seperti FLAC, tidak pernah tersedia penuh di platform streaming berlangganan — ada yang hilang, ada yang beda mastering, dan semuanya bergantung pada layanan sewaan. Solusi umum homelabber adalah server Subsonic-compatible, dan Navidrome salah satu yang paling ringan.
- Sangat ringan. Ditulis dalam Go; menurut dokumentasi resmi berjalan nyaman bahkan di Raspberry Pi Zero. Di homeserver satu mesin, berarti tidak rebutan RAM dengan service lain.
- Ekosistem OpenSubsonic. Kompatibel dengan Subsonic API v1.16.1 plus ekstensi OpenSubsonic yang terus ditambahkan. Lusinan pemutar mobile dan desktop langsung jalan: Symfonium, Feishin, Substreamer, dan lainnya.
- Perlindungan koleksi asli. Direktori file musik di-mount secara read-only sehingga Navidrome tidak dapat mengonsumsi atau merusak berkas audio kanonikal.
Arsitektur dan Cara Kerja
Navidrome memandang koleksi dari sisi tag, bukan struktur folder. Scanner terjadwal (default @every 24h) membaca metadata file audio dan menyimpannya ke database SQLite di folder data. Saat diputar, server streaming langsung dari file asli — tanpa konversi di awal.
- Library berbasis tag: kompilasi Various Artists dan box set multi-disc ditangani native.
- Multi-user: tiap akun punya play count, playlist, dan favorit sendiri.
- Fokus musik: API sengaja tidak mengimplementasikan fitur video.
Deployment dengan Docker Compose
Konfigurasi berikut mengikuti contoh resmi dari dokumentasi Docker Navidrome:
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: 1000:1000
restart: unless-stopped
ports:
- "4533:4533"
environment:
ND_SCANSCHEDULE: 1h
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
volumes:
- ./navidrome-data:/data
- ./music-library:/music:ro
user: 1000:1000 harus punya akses tulis ke folder data dan akses baca ke folder musik. Image resmi tersedia untuk amd64, arm v6/v7, dan arm64, jadi setup yang sama bisa jalan di Raspberry Pi.
Catatan Keamanan: Mount direktori
./music-librarymenggunakan flag:ro(read-only) untuk menjamin berkas musik fisik aman dari modifikasi yang tidak disengaja.
Kontainer ini hanya mengekspos port 4533; akses dari luar sebaiknya lewat reverse proxy.
Keamanan dan Operasional
- Jangan jalankan sebagai root. Navidrome cukup diberi akses read-only ke folder musik dan read-write ke folder data; opsi
EnforceNonRootUsermemblokir kontainer yang jalan sebagai root. - Pakai reverse proxy. Server HTTP bawaan cukup untuk produksi di belakang reverse proxy (Caddy, Nginx, Traefik, Apache) dengan SSL; server bisa dibatasi listen di localhost via
Address(ND_ADDRESS). - Sesi browser.
ND_SESSIONTIMEOUTmengontrol kapan sesi idle ditutup; default 48 jam, konfigurasi di atas memakai 24 jam. - Credential di database. Karena kompatibilitas Subsonic API, password user disimpan di database — terenkripsi kunci bersama; bisa diganti sekali via
PasswordEncryptionKey, setelah itu tidak bisa diubah lagi.
Lirik Terintegrasi dan Transcoding
Lirik tersinkronisasi dibaca dari berkas sidecar .lrc yang bernama sama dengan berkas lagu. Urutan sumber lirik dikontrol lewat LyricsPriority:
# navidrome.toml
LyricsPriority = ".lrc,embedded,.txt"
Untuk bandwidth seluler, Navidrome memakai ffmpeg untuk menurunkan bitrate saat diminta client. Format downsampling default opus; hasil transcode di-cache terpisah, jadi koleksi FLAC tidak diubah.
Kontra dan Keterbatasan
- Tidak ada upload dari web. Ini by design; file musik dikelola di luar Navidrome.
- Tidak bisa edit metadata lewat UI. Tagging yang berantakan harus dibereskan dengan tool eksternal (MusicBrainz Picard, beets, dsb) lalu rescan. Navidrome tag-first: browsing by folder tidak direncanakan, endpoint seperti
getIndexeshanya mengembalikan pohon simulasi/Artist/Album/01 - Song.mp3. - Terbatas untuk musik. Tidak ada dukungan video.
- Tag multi-nilai di M4A/AAC kadang bermasalah.
ARTISTS/ALBUMARTISTSdi file AAC/M4A terkadang hanya terbaca satu artis, tergantung tool tagging yang dipakai.
Backup dan Recovery
State Navidrome (user, play count, playlist, favorit) tersimpan di SQLite dalam ./navidrome-data. Karena folder musik read-only, pemulihan server cukup mengembalikan folder data — scanner lalu membangun ulang index dari file musik.
Sejak v0.54, Navidrome punya backup terjadwal bawaan yang mengekspor database secara periodik:
[Backup]
Path = "/path/to/backup/folder"
Count = 7
Schedule = "0 0 * * *"
Backup ini hanya mencakup database (user dan play count), bukan file musik dan konfigurasi. Koleksi musik tetap butuh backup terpisah — misalnya ke storage off-host, mengikuti strategi backup homeserver.
Kesimpulan
Navidrome pilihan kuat untuk streaming musik pribadi di homeserver: ringan, ekosistem client OpenSubsonic matang, dan perlakuan read-only terhadap koleksi asli. Di satu mesin dengan resource terbatas, ia jalan tanpa beban berarti dan tetap memberi kualitas audio penuh.
Jujurnya, ia bukan untuk semua orang: koleksi yang tagging-nya tidak rapi atau kamu lebih suka menjelajah struktur folder akan butuh penyesuaian. Tapi untuk koleksi metadata terawat yang ingin diputar dari perangkat apa pun tanpa langganan cloud, Navidrome bekerja sangat baik.
