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.
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
5001per consentire l’accesso al servizio dalla rete locale. - Servizio Navidrome: la sezione
services.navidromeconfigura 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
navidromeviene creato ed aggiunto al gruppousersper accedere alla libreria musicale.
{ 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:
sudo nixos-rebuild switchIl 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
navidromeabbia accesso alla directory. L’aggiunta al gruppousersdovrebbe 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 switchdopo 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.