docker.recipes

Music Server Stack

intermediate

Navidrome music server with Lidarr for music management and Deemix downloader

Overview

Navidrome is a modern, web-based music server that implements the Subsonic API, allowing you to stream your personal music collection from anywhere with a sleek web interface and mobile app compatibility. Originally created as a lightweight alternative to heavier music servers like Plex or Jellyfin, Navidrome focuses exclusively on audio streaming with features like on-the-fly transcoding, playlist management, and support for various audio formats including FLAC, MP3, and OGG. This comprehensive music stack combines Navidrome with Lidarr for automated music library management, Prowlarr for indexer coordination, and qBittorrent as the download client to create a fully automated music acquisition and streaming system. The integration allows Lidarr to automatically search for, download, and organize music releases while Navidrome provides the streaming interface for your growing collection. This setup is ideal for music enthusiasts who want to maintain a high-quality personal music library with automatic metadata management, album art fetching, and the ability to stream their collection to any device through Subsonic-compatible mobile apps like DSub, Symfonium, or Ultrasonic.

Key Features

  • Subsonic/Airsonic API compatibility for seamless integration with dozens of mobile music apps
  • Real-time music library scanning with configurable intervals for automatic detection of new releases
  • On-the-fly audio transcoding to reduce bandwidth usage on mobile connections
  • Automatic music metadata fetching and organization through Lidarr's MusicBrainz integration
  • Smart playlist generation and management with support for various criteria and filters
  • Multi-user support with individual libraries, playlists, and playback history
  • Automated quality upgrading when better releases become available through Lidarr monitoring
  • Cross-platform web interface with responsive design for desktop and mobile browsers

Common Use Cases

  • 1Personal music streaming server for audiophiles with large FLAC collections requiring quality preservation
  • 2Family music sharing system with individual user accounts and personalized recommendations
  • 3Remote music access for frequent travelers who want their full library available anywhere
  • 4Automated music discovery and acquisition for users who want new releases from followed artists
  • 5Replacement for discontinued services like Google Play Music with personal library control
  • 6Home media center integration for whole-house audio streaming through various client devices
  • 7Music collection digitization project with automated organization and metadata management

Prerequisites

  • Minimum 2GB RAM (4GB recommended for large libraries over 10,000 tracks)
  • At least 20GB free disk space for application data plus storage for your music collection
  • Port availability: 4533 (Navidrome), 8686 (Lidarr), 9696 (Prowlarr), 8080 (qBittorrent)
  • Basic understanding of music file formats and quality profiles for Lidarr configuration
  • Familiarity with BitTorrent indexers and music release naming conventions
  • Network configuration knowledge for remote access setup and mobile app connectivity

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 navidrome:
3 image: deluan/navidrome:latest
4 container_name: navidrome
5 restart: unless-stopped
6 ports:
7 - "${NAVIDROME_PORT:-4533}:4533"
8 volumes:
9 - ./navidrome/data:/data
10 - ./music:/music:ro
11 environment:
12 - ND_SCANSCHEDULE=1h
13 - ND_LOGLEVEL=info
14 - ND_SESSIONTIMEOUT=24h
15 - ND_BASEURL=
16
17 lidarr:
18 image: lscr.io/linuxserver/lidarr:latest
19 container_name: lidarr
20 restart: unless-stopped
21 ports:
22 - "${LIDARR_PORT:-8686}:8686"
23 volumes:
24 - ./lidarr/config:/config
25 - ./music:/music
26 - ./downloads:/downloads
27 environment:
28 - PUID=${PUID:-1000}
29 - PGID=${PGID:-1000}
30 - TZ=${TZ:-UTC}
31
32 prowlarr:
33 image: lscr.io/linuxserver/prowlarr:latest
34 container_name: prowlarr
35 restart: unless-stopped
36 ports:
37 - "${PROWLARR_PORT:-9696}:9696"
38 volumes:
39 - ./prowlarr/config:/config
40 environment:
41 - PUID=${PUID:-1000}
42 - PGID=${PGID:-1000}
43 - TZ=${TZ:-UTC}
44
45 qbittorrent:
46 image: lscr.io/linuxserver/qbittorrent:latest
47 container_name: qbittorrent
48 restart: unless-stopped
49 ports:
50 - "${QBIT_PORT:-8080}:8080"
51 volumes:
52 - ./qbittorrent/config:/config
53 - ./downloads:/downloads
54 environment:
55 - PUID=${PUID:-1000}
56 - PGID=${PGID:-1000}
57 - TZ=${TZ:-UTC}

.env Template

.env
1# Music Server Stack
2NAVIDROME_PORT=4533
3LIDARR_PORT=8686
4PROWLARR_PORT=9696
5QBIT_PORT=8080
6
7# User/Group IDs
8PUID=1000
9PGID=1000
10TZ=UTC

Usage Notes

  1. 1Navidrome at http://localhost:4533 (create account on first visit)
  2. 2Lidarr at http://localhost:8686 for music management
  3. 3Subsonic/Airsonic API compatible for mobile apps
  4. 4Configure Lidarr with Prowlarr indexers
  5. 5Music stored in ./music directory
  6. 6Supports DSub, play:Sub, Symfonium apps

Individual Services(4 services)

Copy individual services to mix and match with your existing compose files.

navidrome
navidrome:
  image: deluan/navidrome:latest
  container_name: navidrome
  restart: unless-stopped
  ports:
    - ${NAVIDROME_PORT:-4533}:4533
  volumes:
    - ./navidrome/data:/data
    - ./music:/music:ro
  environment:
    - ND_SCANSCHEDULE=1h
    - ND_LOGLEVEL=info
    - ND_SESSIONTIMEOUT=24h
    - ND_BASEURL=
lidarr
lidarr:
  image: lscr.io/linuxserver/lidarr:latest
  container_name: lidarr
  restart: unless-stopped
  ports:
    - ${LIDARR_PORT:-8686}:8686
  volumes:
    - ./lidarr/config:/config
    - ./music:/music
    - ./downloads:/downloads
  environment:
    - PUID=${PUID:-1000}
    - PGID=${PGID:-1000}
    - TZ=${TZ:-UTC}
prowlarr
prowlarr:
  image: lscr.io/linuxserver/prowlarr:latest
  container_name: prowlarr
  restart: unless-stopped
  ports:
    - ${PROWLARR_PORT:-9696}:9696
  volumes:
    - ./prowlarr/config:/config
  environment:
    - PUID=${PUID:-1000}
    - PGID=${PGID:-1000}
    - TZ=${TZ:-UTC}
qbittorrent
qbittorrent:
  image: lscr.io/linuxserver/qbittorrent:latest
  container_name: qbittorrent
  restart: unless-stopped
  ports:
    - ${QBIT_PORT:-8080}:8080
  volumes:
    - ./qbittorrent/config:/config
    - ./downloads:/downloads
  environment:
    - PUID=${PUID:-1000}
    - PGID=${PGID:-1000}
    - TZ=${TZ:-UTC}

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 navidrome:
5 image: deluan/navidrome:latest
6 container_name: navidrome
7 restart: unless-stopped
8 ports:
9 - "${NAVIDROME_PORT:-4533}:4533"
10 volumes:
11 - ./navidrome/data:/data
12 - ./music:/music:ro
13 environment:
14 - ND_SCANSCHEDULE=1h
15 - ND_LOGLEVEL=info
16 - ND_SESSIONTIMEOUT=24h
17 - ND_BASEURL=
18
19 lidarr:
20 image: lscr.io/linuxserver/lidarr:latest
21 container_name: lidarr
22 restart: unless-stopped
23 ports:
24 - "${LIDARR_PORT:-8686}:8686"
25 volumes:
26 - ./lidarr/config:/config
27 - ./music:/music
28 - ./downloads:/downloads
29 environment:
30 - PUID=${PUID:-1000}
31 - PGID=${PGID:-1000}
32 - TZ=${TZ:-UTC}
33
34 prowlarr:
35 image: lscr.io/linuxserver/prowlarr:latest
36 container_name: prowlarr
37 restart: unless-stopped
38 ports:
39 - "${PROWLARR_PORT:-9696}:9696"
40 volumes:
41 - ./prowlarr/config:/config
42 environment:
43 - PUID=${PUID:-1000}
44 - PGID=${PGID:-1000}
45 - TZ=${TZ:-UTC}
46
47 qbittorrent:
48 image: lscr.io/linuxserver/qbittorrent:latest
49 container_name: qbittorrent
50 restart: unless-stopped
51 ports:
52 - "${QBIT_PORT:-8080}:8080"
53 volumes:
54 - ./qbittorrent/config:/config
55 - ./downloads:/downloads
56 environment:
57 - PUID=${PUID:-1000}
58 - PGID=${PGID:-1000}
59 - TZ=${TZ:-UTC}
60EOF
61
62# 2. Create the .env file
63cat > .env << 'EOF'
64# Music Server Stack
65NAVIDROME_PORT=4533
66LIDARR_PORT=8686
67PROWLARR_PORT=9696
68QBIT_PORT=8080
69
70# User/Group IDs
71PUID=1000
72PGID=1000
73TZ=UTC
74EOF
75
76# 3. Start the services
77docker compose up -d
78
79# 4. View logs
80docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/music-server-stack/run | bash

Troubleshooting

  • Navidrome shows empty library after startup: Ensure the music directory contains properly tagged audio files and check scan logs for permission issues
  • Lidarr cannot connect to qBittorrent: Verify qBittorrent web UI is enabled and check the connection settings in Lidarr's download client configuration
  • Mobile apps cannot find Navidrome server: Confirm the Subsonic API is enabled and use the correct server URL format with /rest endpoint
  • Music files not importing after download: Check file permissions match PUID/PGID settings and verify Lidarr's root folder configuration
  • Prowlarr indexers failing to sync with Lidarr: Ensure both containers can communicate and check API key configuration in both applications
  • Transcoding fails on mobile playback: Verify FFmpeg is properly installed in the Navidrome container and check transcoding settings for supported formats

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Components

navidromelidarrdeemix

Tags

#navidrome#music#lidarr#streaming#subsonic

Category

Media & Entertainment
Ad Space