{"id":9982,"date":"2024-12-31T08:17:17","date_gmt":"2024-12-31T15:17:17","guid":{"rendered":"https:\/\/jasonsblog.ddns.net\/?p=9982"},"modified":"2024-12-31T08:17:17","modified_gmt":"2024-12-31T15:17:17","slug":"how-to-install-navidrome-with-docker-a-step-by-step-guide","status":"publish","type":"post","link":"https:\/\/jasonsblog.ddns.net\/index.php\/2024\/12\/31\/how-to-install-navidrome-with-docker-a-step-by-step-guide\/","title":{"rendered":"How to Install Navidrome with Docker: A Step-by-Step Guide"},"content":{"rendered":"\n<p>There was a time when we bought CDs, and then with the MP3 format we started to rip our CD&#8217;s and just use our computer like a jukebox, eventually just buying the MP3 files online. Of course today we have streaming services giving you access to just about all music for about the price of a CD per month, but if you&#8217;re older you might have a bunch of ripped MP3&#8217;s sitting around you might want to listen to, and <a href=\"https:\/\/www.navidrome.org\/about\/\" target=\"_blank\" rel=\"noreferrer noopener\">Navidrome<\/a> is a nice web based music server that makes searching and pulling up those MP3&#8217;s pretty easy. Funny, I still have a storage containers of physical media CDs and records in the garage where many of the MP3&#8217;s came from, and recently I saw one of the manufacturers were no longer going to make Blue-ray\/DVD players signalling the incoming end of physical video media as well. Anyway, this project keeps your digital media alive and accessible.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/jasonsblog.ddns.net\/index.php\/2023\/04\/13\/a-different-type-of-fasting\/\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"689\" src=\"https:\/\/jasonsblog.ddns.net\/wp-content\/uploads\/2024\/12\/image-55-1024x689.png\" alt=\"\" class=\"wp-image-9998\" srcset=\"https:\/\/jasonsblog.ddns.net\/wp-content\/uploads\/2024\/12\/image-55-1024x689.png 1024w, https:\/\/jasonsblog.ddns.net\/wp-content\/uploads\/2024\/12\/image-55-300x202.png 300w, https:\/\/jasonsblog.ddns.net\/wp-content\/uploads\/2024\/12\/image-55-768x517.png 768w, https:\/\/jasonsblog.ddns.net\/wp-content\/uploads\/2024\/12\/image-55.png 1367w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><a href=\"https:\/\/linuxiac.com\/install-navidrome-music-streaming-server-with-docker\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/linuxiac.com\/install-navidrome-music-streaming-server-with-docker\/<\/a><\/p>\n\n\n<div class=\"wp-block-ub-divider ub_divider ub-divider-orientation-horizontal\" id=\"ub_divider_f6a416d5-1520-46b9-9982-cf9ac8f366bc\"><div class=\"ub_divider_wrapper\" style=\"position: relative; margin-bottom: 2px; width: 100%; height: 2px; \" data-divider-alignment=\"center\"><div class=\"ub_divider_line\" style=\"border-top: 2px solid #ccc; margin-top: 2px; \"><\/div><\/div><\/div>\n\n\n<h5 class=\"wp-block-heading\">Learn how to set up Navidrome with Docker in minutes with this step-by-step guide, perfect for streaming your music collection effortlessly.<\/h5>\n\n\n\n<p>By Bobby Borisov<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cdn.shortpixel.ai\/spai\/q_lossy+ret_img+to_auto\/linuxiac.com\/wp-content\/uploads\/2024\/12\/navidrome-docker-1024x576.jpg\" alt=\"How to Install Navidrome with Docker: A Step-by-Step Guide\"\/><\/figure>\n\n\n\n<p>Our music collections often feel scattered across countless devices, drives, and platforms. Wouldn\u2019t it be great to store all your tunes in one convenient place that is accessible anytime, anywhere? That\u2019s exactly what Navidrome, a free and open-source lightweight music server, makes possible.<\/p>\n\n\n\n<p>Built with speed and efficiency in mind, Navidrome is one of the <a href=\"https:\/\/linuxiac.com\/best-free-self-hosted-music-streaming-software\/\">best free self-hosted music streaming software<\/a> that can run on various hardware\u2014ranging from powerful servers to modest single-board computers\u2014yet robust enough to easily handle large libraries.<\/p>\n\n\n\n<p>In this guide, I\u2019ll walk you through the entire setup process and highlight a few handy tips so you can feel confident that you\u2019re getting the most out of your new setup. By the end, you\u2019ll have a powerful, user-friendly music streaming server at your fingertips.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p>Before proceeding with the installation, ensure you have Docker installed on your system.<\/p>\n\n\n\n<p>But if you don\u2019t have it, fear not; any of the following guides will help you get it quickly. Pick the distribution you are using in one of the following links: <a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-ubuntu-24-04-lts\/\">Ubuntu 24.04<\/a>, <a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-debian-12-bookworm\/\">Debian 12<\/a>, <a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-arch-linux\/\">Arch<\/a>, <a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-almalinux-or-rocky-linux\/\">Alma\/Rocky<\/a>, <a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-fedora-linux\/\">Fedora<\/a>, <a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-linux-mint-22\/\">Linux Mint 22<\/a>, <a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-pop-os-22-04\/\">Pop!_OS 22.04<\/a>, or <a href=\"https:\/\/linuxiac.com\/how-to-install-docker-on-raspberry-pi\/\">Raspberry Pi OS<\/a>.<\/p>\n\n\n\n<p>The other essential component is Docker Compose. Recent Docker versions now include Docker Compose by installing the \u201c<em>docker-compose-plugin<\/em>\u201d package. So, install it if it\u2019s not already in your setup.<\/p>\n\n\n\n<p>However, if you prefer, you can get it separately using both commands below. In that case, remember, when running the tool, type \u201c<code>docker-compose<\/code>\u201d instead of \u201c<code>docker compose<\/code>.\u201d<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>sudo curl -L \"https:\/\/github.com\/docker\/compose\/releases\/latest\/download\/docker-compose-linux-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose\nsudo chmod +x \/usr\/local\/bin\/docker-compose<\/code><small>Code language: Bash (bash)<\/small><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Install Navidrome with Docker Compose<\/h2>\n\n\n\n<p>The first step is to create the project directory in which our Docker Compose deployment file will be placed. Then switch to it; from here on, you need to execute all commands further down in this guide from that location.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>mkdir navidrome\ncd navidrome<\/code><small>Code language: Bash (bash)<\/small><\/pre>\n\n\n\n<p>Next, create a \u201c<em><strong>docker-compose.yml<\/strong><\/em>\u201d file, like a blueprint for our Docker setup. This file will define the services, volumes, ports, etc., telling Docker Compose what to do and how to set up our Navidrome instance.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>nano docker-compose.yml<\/code><small>Code language: Bash (bash)<\/small><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>services:\n  navidrome:\n    image: deluan\/navidrome:latest\n    container_name: navidrome\n    ports:\n      - \"4533:4533\"\n    restart: unless-stopped\n    environment:\n      ND_SCANSCHEDULE: 1h\n    volumes:\n      - \".\/data:\/data\"\n      - \"\/path\/to\/your\/music\/folder:\/music:ro\"<\/code><small>Code language: Dockerfile (dockerfile)<\/small><\/pre>\n\n\n\n<p>Agree that our deployment couldn\u2019t be simpler. The main thing to focus on is the \u201c<em>volumes<\/em>\u201d section. Here\u2019s how it works:<\/p>\n\n\n\n<p>When you start the container, a \u201c<em>data<\/em>\u201d directory will automatically be created in your current one, providing persistence for Navidrome\u2019s data, like the SQLite database and cache directory.<\/p>\n\n\n\n<p>Now, about the second volume mount\u2014this is where you\u2019ll want to make a quick adjustment. The first part of the line, \u201c<em>\/path\/to\/your\/music\/folder<\/em>,\u201d must be updated to point to the folder where your music collection is stored. And that\u2019s it.<\/p>\n\n\n\n<p>Save the changes and run the container in the background (detached mode):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>docker compose up -d<\/code><small>Code language: Bash (bash)<\/small><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/linuxiac.b-cdn.net\/wp-content\/uploads\/2024\/12\/navidrome-docker-02.jpg\"><img decoding=\"async\" src=\"https:\/\/cdn.shortpixel.ai\/spai\/q_lossy+ret_img+to_auto\/linuxiac.com\/wp-content\/uploads\/2024\/12\/navidrome-docker-02.jpg\" alt=\"Deploying Navidrome music streaming server with Docker Compose.\" class=\"wp-image-148755\"\/><\/a><figcaption class=\"wp-element-caption\">Deploying Navidrome music streaming server with Docker Compose.<\/figcaption><\/figure>\n\n\n\n<p>Now, let\u2019s move to the most exciting part. Open your browser and navigate to \u201c<strong><em>http:\/\/localhost:4533<\/em><\/strong>\u201d (if you access Nvidrome from the same host) or \u201c<strong><em>http:\/\/&lt;server-ip-address&gt;:4533<\/em><\/strong>\u201c (if you access it remotely). Of course, replace the \u201c<em>&lt;server-ip-address&gt;<\/em>\u201d part with your actual server\u2019s IP address.<\/p>\n\n\n\n<p>If, for some reason, something goes wrong, you can easily figure out what happened by checking the container log with this simple Docker command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>docker logs navidrome<\/code><small>Code language: Bash (bash)<\/small><\/pre>\n\n\n\n<p>When accessing Navidrome for the first time, you\u2019ll be prompted to create an admin account. Fill in the username and password fields and click \u201c<em>CREATE ADMIN<\/em>.\u201d<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/linuxiac.b-cdn.net\/wp-content\/uploads\/2024\/12\/navidrome-docker-05.jpg\"><img decoding=\"async\" src=\"https:\/\/cdn.shortpixel.ai\/spai\/q_lossy+ret_img+to_auto\/linuxiac.com\/wp-content\/uploads\/2024\/12\/navidrome-docker-05-1024x671.jpg\" alt=\"Creating an administrative user.\" class=\"wp-image-148782\"\/><\/a><figcaption class=\"wp-element-caption\">Creating an administrative user.<\/figcaption><\/figure>\n\n\n\n<p>Once you\u2019re logged into the Navidrome music streaming server, you\u2019re all set. There\u2019s nothing else to configure at this point, so go ahead and dive into the best part\u2014enjoying your music collection!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/linuxiac.b-cdn.net\/wp-content\/uploads\/2024\/12\/navidrome-docker-04.jpg\"><img decoding=\"async\" src=\"https:\/\/cdn.shortpixel.ai\/spai\/q_lossy+ret_img+to_auto\/linuxiac.com\/wp-content\/uploads\/2024\/12\/navidrome-docker-04-1024x677.jpg\" alt=\"Navidrome music streaming server.\" class=\"wp-image-148773\"\/><\/a><figcaption class=\"wp-element-caption\">Navidrome music streaming server.<\/figcaption><\/figure>\n\n\n\n<p>But before we wrap up, though, I\u2019d like to share one more Navidrome setting that can significantly enhance your experience: artwork location resolution. This feature helps with displaying album covers and extra artist or album details.<\/p>\n\n\n\n<p>Keep in mind that if this information isn\u2019t already included as metadata in your music files, Navidrome won\u2019t retrieve it automatically. I mean you can see the difference below, with and without the extracted meta information for the music files.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/linuxiac.b-cdn.net\/wp-content\/uploads\/2024\/12\/navidrome-docker-06.jpg\"><img decoding=\"async\" src=\"https:\/\/cdn.shortpixel.ai\/spai\/q_lossy+ret_img+to_auto\/linuxiac.com\/wp-content\/uploads\/2024\/12\/navidrome-docker-06-1024x671.jpg\" alt=\"Navidrome\" class=\"wp-image-148791\"\/><\/a><\/figure>\n\n\n\n<p>The good news is, if the metadata you need isn\u2019t already included in the files of your music collection, Navidrome can fetch it from external sources like Spotify and Last.fm.<\/p>\n\n\n\n<p>However, to enable this feature, you\u2019ll need to set up free API accounts with both services first. Don\u2019t worry\u2014Navidrome\u2019s official documentation has clear, <a href=\"https:\/\/www.navidrome.org\/docs\/usage\/external-integrations\/\" target=\"_blank\" rel=\"noreferrer noopener\">step-by-step instructions<\/a> to guide you.<\/p>\n\n\n\n<p>Once you have the API keys and secrets for both services, add them as environment variables to the Docker Compose deployment as shown below:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>services:\n  navidrome:\n    image: deluan\/navidrome:latest\n    container_name: navidrome\n    ports:\n      - \"4533:4533\"\n    restart: unless-stopped\n    environment:\n      ND_SCANSCHEDULE: 1h\n      ND_LASTFM_APIKEY: your-last-fm-api-key\n      ND_LASTFM_SECRET: your-last-fm-api-secret\n      ND_SPOTIFY_ID: your-spotify-api-key\n      ND_SPOTIFY_SECRET: your-spotify-api-secret\n    volumes:\n      - \".\/data:\/data\"\n      - \"\/path\/to\/your\/music\/folder:\/music:ro\"<\/code><small>Code language: Dockerfile (dockerfile)<\/small><\/pre>\n\n\n\n<p>Finally, stop the Navidrome container and redeploy it:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>docker compose down\ndocker compose up -d<\/code><small>Code language: Bash (bash)<\/small><\/pre>\n\n\n\n<p>From now on, you can rest assured that if your music files are missing meta tags, Navidrome will automatically extract and display them beautifully in its interface.<\/p>\n\n\n\n<p>Just a heads-up: Navidrome doesn\u2019t let you edit any meta information or import it into your music collection. It\u2019s purely for display within the app\u2019s UI\u2014nothing more, nothing less.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>And there you have it! Setting up Navidrome with Docker is simple once you follow the steps. With your music collection now streaming effortlessly, you can enjoy your favorite tunes anytime, anywhere, without a hitch.<\/p>\n\n\n\n<p>I hope this guide was helpful and made the process straightforward for you. If you have any questions or feedback, feel free to reach out in the comment section below.<\/p>\n\n\n\n<p>For more detailed information about Navidrome, visit the <a href=\"https:\/\/www.navidrome.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">project\u2019s website<\/a>. In addition, I strongly recommend checking out the <a href=\"https:\/\/www.navidrome.org\/docs\/\" target=\"_blank\" rel=\"noreferrer noopener\">official documentation<\/a>, particularly the section on <a href=\"https:\/\/www.navidrome.org\/docs\/usage\/configuration-options\/\" target=\"_blank\" rel=\"noreferrer noopener\">environment variables<\/a>.<\/p>\n\n\n\n<p>Now go ahead, crank up the volume, and enjoy the sweet sound of success\u2014literally. Happy listening!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There was a time when we bought CDs, and then with the MP3 format we started to rip our CD&#8217;s and just use our computer like a jukebox, eventually just buying the MP3 files online. Of course today we have streaming services giving you access to just about all music for about the price of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-9982","post","type-post","status-publish","format-standard","hentry","category-tech"],"blocksy_meta":[],"featured_image_src":null,"author_info":{"display_name":"Jason","author_link":"https:\/\/jasonsblog.ddns.net\/index.php\/author\/jturning\/"},"_links":{"self":[{"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/9982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/comments?post=9982"}],"version-history":[{"count":10,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/9982\/revisions"}],"predecessor-version":[{"id":10049,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/posts\/9982\/revisions\/10049"}],"wp:attachment":[{"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/media?parent=9982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/categories?post=9982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jasonsblog.ddns.net\/index.php\/wp-json\/wp\/v2\/tags?post=9982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}