Navidrome è un music server open-source che permette di accedere alla propria libreria musicale in streaming da qualsiasi dispositivo tramite una semplice interfaccia web. È compatibile con il protocollo Subsonic e può essere utilizzato con decine di app client disponibili per ogni piattaforma (iOS, Android, desktop, web). Questo lo rende la soluzione ideale per chi desidera avere il pieno controllo della propria musica senza dipendere da servizi di streaming commerciali.

Navidrome può essere utilizzato come server standalone, permettendo di sfogliare e ascoltare la propria collezione musicale direttamente dal browser. Utilizza pochissime risorse (funziona anche su un Raspberry Pi Zero) ed è in grado di gestire collezioni audio molto grandi, supportando numerosi formati audio. Il sistema supporta più utenti grazie al sistema di autenticazione integrato. Tra le funzionalità più interessanti c’è l’integrazione con Last.fm per ottenere informazioni su artisti e brani, oltre alla capacità di eseguire la transcodifica al volo.

Navidrome

Configurazione NixOS

La configurazione seguente installa Navidrome come servizio systemd su NixOS. Il modulo Nix gestisce automaticamente la creazione dell’utente di sistema e l’avvio del servizio.

Nello specifico, la configurazione è così strutturata:

  • Creazione delle directory: vengono create le cartelle per i dati e la cache di Navidrome tramite systemd.tmpfiles.rules, assicurando i permessi corretti.
  • Firewall: viene aperta la porta 5001 per consentire l’accesso al servizio dalla rete locale.
  • Servizio Navidrome: la sezione services.navidrome configura l’indirizzo di ascolto, la porta, la cartella della musica e le directory per dati e cache.
  • Override systemd: viene personalizzato il servizio per utilizzare directory custom invece di quelle di default gestite da StateDirectory.
  • Permessi utente: l’utente navidrome viene creato ed aggiunto al gruppo users per accedere alla libreria musicale.
nix
{ config, pkgs, lib, ... }:

{

  # Creazione delle directory
  # Crea le cartelle per dati e cache con i permessi corretti
  systemd.tmpfiles.rules = [
    "d /srv/navidrome 0755 navidrome navidrome -"
    "d /srv/navidrome/data 0750 navidrome navidrome -"
    "d /srv/navidrome/cache 0750 navidrome navidrome -"
  ];

  # Firewall
  # Apre la porta 5001 per l'accesso dalla rete locale
  networking.firewall = {
    allowedTCPPorts = [ 5001 ];
  };

  environment.systemPackages = with pkgs; [
    navidrome
  ];

  # Servizio Navidrome
  # Configura indirizzo, porta e directory per musica, dati e cache
  services.navidrome = {
    enable = true;
    settings = {
      Address = "0.0.0.0";
      Port = 5001;
      MusicFolder = "/mnt/music";
      DataFolder = "/srv/navidrome/data";
      CacheFolder = "/srv/navidrome/cache";
    };
  };

  # Override systemd
  # Personalizza il servizio per usare directory custom invece di StateDirectory
  systemd.services.navidrome = {
    serviceConfig = {
      StateDirectory = lib.mkForce "";
      WorkingDirectory = lib.mkForce "/srv/navidrome";
      RootDirectory = lib.mkForce "";
      ReadWritePaths = [
        "/srv/navidrome"
        "/mnt/music"
      ];
    };
  };

  # Permessi utente
  # Aggiunge l'utente navidrome al gruppo users per accedere alla libreria musicale
  users.users.navidrome.extraGroups = [ "users" ];
}

Attivazione e Primo Accesso

Dopo aver aggiunto la configurazione al proprio file NixOS (es. configuration.nix o un modulo dedicato), applicare le modifiche con:

bash
sudo nixos-rebuild switch

Il servizio sarà accessibile all’indirizzo http://<IP_SERVER>:5001 ed al primo accesso verrà richiesto di creare l’utente amministratore.

Troubleshooting e Consigli

  • Permessi cartella musica: se Navidrome non riesce a leggere i file, verificare che l’utente navidrome abbia accesso alla directory. L’aggiunta al gruppo users dovrebbe essere sufficiente per cartelle condivise.
  • Scansione libreria: dopo l’avvio, Navidrome scansiona automaticamente la cartella musicale. Per librerie molto grandi, la prima scansione può richiedere diversi minuti.
  • Aggiornamenti: NixOS gestisce automaticamente gli aggiornamenti del pacchetto. Eseguire nixos-rebuild switch dopo aver aggiornato il canale.
  • Reverse proxy: per esporre Navidrome su internet, configurare un reverse proxy (es. NGINX Proxy Manager ) con HTTPS e un certificato valido.