...
🚀 how to deploy navidrome on ubuntu vps
Learn how to deploy navidrome on ubuntu vps!

This article provides a guide demonstrating how to deploy Navidrome on Ubuntu VPS.

What is Navidrome?

Navidrome is a free, open-source, self-hosted music streaming server that lets you create your own personal music streaming service using your existing music collection. Instead of uploading your music to a commercial service like Spotify or Apple Music, you store your audio files on your own server (or NAS), and Navidrome streams them securely to your web browser, smartphone, tablet, or desktop using its built-in web player or compatible third-party apps.

Think of it as “your own private Spotify”—except you own the music, control the server, and aren’t dependent on a subscription or internet service to access your library (other than connecting to your own server).

Key Features

  • Self-hosted – Your music stays on your own hardware or VPS.
  • Modern web player – Listen directly from any modern web browser.
  • Mobile app support – Works with a large ecosystem of Subsonic/OpenSubsonic-compatible apps for iOS and Android.
  • Multi-user support – Each user gets their own playlists, favorites, ratings, and listening history.
  • Large library support – Designed to efficiently manage libraries containing hundreds of thousands of songs.
  • Automatic library scanning – Detects new music and metadata changes automatically.
  • On-the-fly transcoding – Converts audio to lower bitrates when needed for slower connections or mobile devices.
  • Playlist support – Create playlists or import existing .m3u playlists.
  • Sharing – Share albums, playlists, or tracks with others via public links.
  • External authentication – Can integrate with external identity providers if desired.
  • Lightweight – Written in Go, requiring minimal system resources.

Supported Audio Formats

Navidrome can index and stream virtually any format supported by FFmpeg, including:

  • MP3
  • FLAC
  • AAC
  • OGG Vorbis
  • Opus
  • ALAC
  • WAV
  • AIFF
  • WMA (with FFmpeg support)
  • Many others

Compatible Clients

Besides the built-in web interface, you can use many third-party clients that support the Subsonic/OpenSubsonic API, including:

  • Symfonium (Android)
  • Tempo
  • Amperfy (iOS)
  • Substreamer
  • DSub
  • Sonixd
  • Supersonic
  • Feishin
  • Many desktop and TV clients

Typical Architecture

                Internet
                    │
             HTTPS (443)
                    │
               Nginx/Caddy
                    │
            Navidrome (4533)
                    │
         Music Library (/srv/music)
                    │
      MP3 • FLAC • AAC • ALAC • OGG

System Requirements

Navidrome is remarkably lightweight:

Component Recommended
CPU 1–2 vCPUs
RAM 512 MB minimum (1–2 GB recommended)
Storage SSD plus space for your music
OS Linux, Windows, macOS
Docker Fully supported
Raspberry Pi Supported

It can even run comfortably on a Raspberry Pi Zero or other low-power hardware.

Advantages

  • No monthly subscription
  • Full ownership of your music
  • No advertisements
  • Excellent FLAC and lossless audio support
  • Fast and responsive interface
  • Very low resource usage
  • Open source (GPL-3.0)
  • Large ecosystem of compatible client apps

Limitations

  • It does not provide licensed commercial music—you must supply your own legally obtained music library.
  • Music discovery and recommendation features are much more limited than services like Spotify or Apple Music.
  • Good organization depends on accurate metadata (artist, album, track tags) in your music files.

Navidrome vs. Jellyfin vs. Plex

Feature Navidrome Jellyfin Plex
Purpose Music only General media server General media server
Resource usage Very low Moderate Moderate
Music experience Excellent Good Very good (Plex Pass adds features)
Video support No Yes Yes
Photos No Yes Yes
Multi-user Yes Yes Yes
Mobile clients Extensive (OpenSubsonic ecosystem) Jellyfin apps Plex apps
Open source Yes Yes No (server is proprietary)

Who Should Use Navidrome?

Navidrome is an excellent choice if you:

  • Have a personal collection of MP3, FLAC, or other audio files.
  • Want to stream your music anywhere without relying on a commercial streaming service.
  • Prefer open-source software and control over your own data.
  • Need a lightweight music server for a VPS, NAS, Raspberry Pi, or home server.
  • Want to share your music library with family or friends while maintaining separate user accounts and playlists.

For users who primarily want a dedicated, self-hosted music server rather than a full media platform, Navidrome is widely regarded as one of the best options available due to its simplicity, performance, and excellent compatibility with the OpenSubsonic ecosystem.

Below is a production-style Ubuntu VPS deployment guide for Navidrome, a self-hosted music streaming server. Navidrome provides Linux binaries and .deb packages, requires ffmpeg, and uses port 4533 by default.
Launch 100% ssd ubuntu vps from $3. 19/mo!


Compare Ubuntu VPS Plans

KVM-SSD-1
KVM-SSD-8
KVM-SSD-16
KVM-SSD-32
CPU
1 Core
2 Cores
4 Cores
8 Cores
Memory
1 GB
8 GB
16 GB
32 GB
Storage
16 GB NVMe
128 GB NVMe
256 GB NVMe
512 GB NVMe
Bandwidth
1 TB
4 TB
8 TB
16 TB
Network
1 Gbps
1 Gbps
1 Gbps
1 Gbps
Delivery Time
⏱️ Instant
⏱️ Instant
⏱️ Instant
⏱️ Instant
Location
US/EU/APAC
US/EU/APAC
US/EU/APAC
US/EU/APAC
Price
$7.58*
$39.50*
$79.40*
$151.22*
KVM-SSD-1
$7.58*
CPU 1 Core
Memory 1 GB
Storage 16 GB NVMe
Bandwidth 1 TB
Network 1 Gbps
Delivery Time ⏱️ Instant
Location US/EU/APAC
KVM-SSD-8
$39.50*
CPU 2 Cores
Memory 8 GB
Storage 128 GB NVMe
Bandwidth 4 TB
Network 1 Gbps
Delivery Time ⏱️ Instant
Location US/EU/APAC
KVM-SSD-16
$79.40*
CPU 4 Cores
Memory 16 GB
Storage 256 GB NVMe
Bandwidth 8 TB
Network 1 Gbps
Delivery Time ⏱️ Instant
Location US/EU/APAC
KVM-SSD-32
$151.22*
CPU 8 Cores
Memory 32 GB
Storage 512 GB NVMe
Bandwidth 16 TB
Network 1 Gbps
Delivery Time ⏱️ Instant
Location US/EU/APAC

Deploy Navidrome on Ubuntu VPS

To deploy Navidrome on Ubuntu VPS, follow the steps outlined below:

  1. Prepare the server

    Use Ubuntu 22.04 or Ubuntu 24.04.

    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y curl wget unzip ffmpeg nginx certbot python3-certbot-nginx ufw
    

    Enable a basic firewall:

    sudo ufw allow OpenSSH
    sudo ufw allow 'Nginx Full'
    sudo ufw enable
    
  2. Create a Navidrome user and directories

    sudo useradd -r -s /usr/sbin/nologin navidrome
    sudo mkdir -p /var/lib/navidrome
    sudo mkdir -p /srv/music
    sudo chown -R navidrome:navidrome /var/lib/navidrome
    sudo chown -R navidrome:navidrome /srv/music
    

    Recommended layout:

    /var/lib/navidrome     Navidrome database, cache, config
    /srv/music             Your music library
    

    Upload your music files into:

    /srv/music
    

    Example using rsync from your local machine:

    rsync -avz ./Music/ root@YOUR_SERVER_IP:/srv/music/
    

    Then fix permissions:

    sudo chown -R navidrome:navidrome /srv/music
    
  3. Install Navidrome

    The official Linux install docs recommend using the prebuilt package or binary.

    Check the latest release URL from:

    https://github.com/navidrome/navidrome/releases
    

    For Ubuntu x86_64, download the latest .deb. Example:

    cd /tmp
    wget https://github.com/navidrome/navidrome/releases/download/v0.63.1/navidrome_0.63.1_linux_amd64.deb
    sudo apt install ./navidrome_0.63.1_linux_amd64.deb -y
    

    If the version has changed, replace v0.63.1 and the filename with the latest release.

    Confirm installation:

    navidrome --version
    
  4. Create the Navidrome config file

    Navidrome loads configuration from a navidrome.toml file, and its docs list many configurable options including address, port, music folder, data folder, scanner behavior, logging, and UI options.

    Create the config:

    sudo nano /var/lib/navidrome/navidrome.toml
    

    Add:

    MusicFolder = "/srv/music"
    DataFolder = "/var/lib/navidrome"
    Address = "127.0.0.1"
    Port = 4533
    
    LogLevel = "info"
    ScanSchedule = "@every 1h"
    
    EnableTranscodingConfig = true
    EnableSharing = false
    
    BaseURL = ""
    

    Save and exit.

    Fix ownership:

    sudo chown navidrome:navidrome /var/lib/navidrome/navidrome.toml
    sudo chmod 640 /var/lib/navidrome/navidrome.toml
    
  5. Create a systemd service

    sudo nano /etc/systemd/system/navidrome.service
    

    Add:

    [Unit]
    Description=Navidrome Music Server
    After=network.target
    
    [Service]
    User=navidrome
    Group=navidrome
    Type=simple
    ExecStart=/usr/bin/navidrome --configfile /var/lib/navidrome/navidrome.toml
    WorkingDirectory=/var/lib/navidrome
    Restart=on-failure
    RestartSec=5
    
    NoNewPrivileges=true
    PrivateTmp=true
    ProtectSystem=full
    ProtectHome=true
    ReadWritePaths=/var/lib/navidrome /srv/music
    
    [Install]
    WantedBy=multi-user.target
    

    Reload systemd:

    sudo systemctl daemon-reload
    sudo systemctl enable --now navidrome
    

    Check status:

    sudo systemctl status navidrome
    

    View logs:

    journalctl -u navidrome -f
    
  6. Test Navidrome locally

    From the server:

    curl -I http://127.0.0.1:4533
    

    You should receive an HTTP response.

    At this point, Navidrome is running locally but not exposed directly to the internet.

  7. Configure Nginx reverse proxy

    Replace music.example.com with your real domain.

    Create the Nginx site:

    sudo nano /etc/nginx/sites-available/navidrome
    

    Add:

    server {
        listen 80;
        server_name music.example.com;
    
        client_max_body_size 100M;
    
        location / {
            proxy_pass http://127.0.0.1:4533;
            proxy_http_version 1.1;
    
            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 Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    
            proxy_buffering off;
        }
    }
    

    Enable it:

    sudo ln -s /etc/nginx/sites-available/navidrome /etc/nginx/sites-enabled/navidrome
    sudo nginx -t
    sudo systemctl reload nginx
    
  8. Point DNS to the VPS

    Create an A record:

    music.example.com → YOUR_SERVER_IP
    

    Wait for DNS propagation.

    Test:

    curl -I http://music.example.com
    
  9. Install SSL with Let’s Encrypt

    Certbot with the Nginx plugin is commonly installed on Ubuntu using certbot and python3-certbot-nginx.

    Run:

    sudo certbot --nginx -d music.example.com
    

    Choose the redirect option when prompted.

    Test renewal:

    sudo certbot renew --dry-run
    
  10. Access Navidrome

    Open:

    https://music.example.com
    

    On first login, Navidrome will prompt you to create the first admin account.

    Create navidrome admin account
    Create navidrome admin account

    Navidrome scans the music folder in the background. Large libraries may take several minutes or longer to appear fully.

    Watch logs:

    journalctl -u navidrome -f
    
  11. Add music safely

    Upload files to:

    /srv/music
    

    Then run:

    sudo chown -R navidrome:navidrome /srv/music
    

    Navidrome will automatically rescan based on your ScanSchedule.

    Navidrome music player
    Navidrome music player

    You can also restart it:

    sudo systemctl restart navidrome
    
  12. Optional: lock down direct port access

    Because Nginx proxies traffic, port 4533 should not be publicly open.

    Confirm:

    sudo ss -tulpn | grep 4533
    

    It should bind to:

    127.0.0.1:4533
    

    Not:

    0.0.0.0:4533
    
  13. Backup Navidrome

    Back up:

    /var/lib/navidrome
    /srv/music
    /etc/systemd/system/navidrome.service
    /etc/nginx/sites-available/navidrome
    

    Example backup:

    sudo tar -czf /root/navidrome-backup-$(date +%F).tar.gz \
      /var/lib/navidrome \
      /srv/music \
      /etc/systemd/system/navidrome.service \
      /etc/nginx/sites-available/navidrome
    
  14. Update Navidrome

    Check the latest release:

    https://github.com/navidrome/navidrome/releases
    

    Then:

    cd /tmp
    wget https://github.com/navidrome/navidrome/releases/download/vNEW_VERSION/navidrome_NEW_VERSION_linux_amd64.deb
    sudo systemctl stop navidrome
    sudo apt install ./navidrome_NEW_VERSION_linux_amd64.deb -y
    sudo systemctl start navidrome
    

    Verify:

    navidrome --version
    sudo systemctl status navidrome
    
  15. Useful commands

    Restart Navidrome:

    sudo systemctl restart navidrome
    

    Check logs:

    journalctl -u navidrome -n 100 --no-pager
    

    Follow logs live:

    journalctl -u navidrome -f
    

    Check Nginx config:

    sudo nginx -t
    

    Reload Nginx:

    sudo systemctl reload nginx
    

Finished

Your Navidrome instance should now be available at:

https://music.example.com

Launch 100% ssd ubuntu vps from $3. 19/mo!

Conclusion

You now know how to deploy Navidrome on Ubuntu VPS.

Avatar of editorial staff

Editorial Staff

Rad Web Hosting is a leading provider of web hosting, Cloud VPS, and Dedicated Servers in Dallas, TX.
lg