Install Navidrome Music Server on FreeBSD

In this tutorial, I explain how to install the Navidrome music server on FreeBSD.

What is Navidrome?

Navidrome is an open source web-based music collection server and streamer. It gives us the freedom to liste to our music collection from any browser or mobile device. It's like our own personal Spotify!

Furthermore, it offers the following feature:

  • Manages huge music collections
  • Streams virtually any audio format available
  • Reads and uses all of our beautifully curated metadata
  • Great support for compilations (various artists albums) and box sets (multi-disc albums)
  • Multi-user, each user has their own playlists, favorites, etc.
  • Very low resource consumption
  • Automatically monitors your library for changes, imports new files and reloads new metadata
  • Modern and responsive web interface based on Material UI
  • Compatible with all Subsonic/Madsonic/Airsonic clients
  • Transcoding on the fly. It can be set per user/player. Opus encoding is supported.

How can we install it?

Installation is simple, we just need to run the following command:

shell: pkg install navidrome

After the installation is through, we can then edit the corresponding configuration file.

shell: nano /usr/local/etc/navidrome/config.toml

You can have a look at it. You will find a lot of configuration options. What is important is that you set the path to your music collection correctly.

If you have configured the whole thing according to your wishes, we still have to activate the rc service and then start it once.

shell: servive navidrome enable
shell: servive navidrome start

Nginx configuration

We use Nginx as a reverse proxy server. Likewise, we now create the following file under /usr /local/etc/nginx/vhosts:

shell: nano /usr/local/etc/nginx/vhosts/navidrome.conf  ⇒

server {
    server_name navidrome.<host>;

    location / {
        proxy_http_version 1.1;
        proxy_cache_bypass $http_upgrade;

        # proxy headers
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-forwarded-port $server_port;

        # proxy timeouts
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;

In our /etc/hosts, we add the following line.

shell: nano /etc/rc.conf ⇒ navidrome.(domain)

Then we restart the nginx.

shell: service nginx restart

We can now open Navidrome via web browser.

navidrome screen