
Homelab Series Index
Digital freedom: creating a personal service ecosystem without depending on big tech.
From Photo Control to Music Control Link to heading
In the previous article we configured Immich for photo management with dedicated external storage. With Immich operational and backups still to be configured, I decide to expand the homelab. The next service: Navidrome, a self-hosted music streaming server that transforms our MP3/FLAC collection into a Spotify-like service, but completely under our control.
Dedicated Container for Navidrome Link to heading
Following the service isolation approach per container, we create an LXC container dedicated exclusively to Navidrome.
Navidrome Container Creation Link to heading
Via Proxmox Web Interface:
-
Create CT โ General
- CT ID:
103
- Hostname:
navidrome
- Password: Set secure password
- CT ID:
-
Template:
ubuntu-22.04-standard
-
Root Disk:
- Storage:
local-lvm
- Disk size:
8 GB
(minimum, data on external disk)
- Storage:
-
CPU:
- Cores:
1
(sufficient for music streaming)
- Cores:
-
Memory:
- Memory:
512 MB
- Swap:
512 MB
- Memory:
-
Network:
- Bridge:
vmbr0
- IPv4:
Static
- IPv4/CIDR:
192.168.1.206/24
- Gateway:
192.168.1.1
- Firewall: โ Enabled
- Bridge:
Hermes Storage Mount Point Link to heading
Via Proxmox Web Interface:
- Select navidrome container (ID 103)
- Resources โ Add โ Mount Point
- Mount Point ID:
mp0
(default) - Storage:
hermes
- Disk size:
50 GB
- Path in Container:
/navidrome-data
- Backup: โ
Storage Directory Preparation Link to heading
# FROM PROXMOX HOST
mkdir -p /mnt/hermes/navidrome/{data,music}
# Structure:
# /mnt/hermes/
# โโโ immich/
# โโโ navidrome/
# โโโ data/ (database and cache)
# โโโ music/ (music library)
Docker Setup in Container Link to heading
# Start and enter container
pct start 103
pct enter 103
# System update and Docker installation
apt update && apt upgrade -y
curl -fsSL https://get.docker.com | sudo sh
usermod -aG docker $USER
# Verify mount point
df -h /navidrome-data
ls -la /navidrome-data/
# Create working directory
mkdir -p /root/navidrome-app
Navidrome Setup with Docker Compose Link to heading
Following the official Navidrome guide adapted to our homelab environment.
Docker Compose Configuration Link to heading
# Enter working directory
cd /root/navidrome-app
# Create docker-compose.yml
nano docker-compose.yml
Docker Compose Configuration:
version: "3"
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: 1000:1000
ports:
- "4533:4533"
restart: unless-stopped
environment:
- ND_MUSICFOLDER=/music
- ND_DATAFOLDER=/data
- ND_SCANSCHEDULE=@every 1h
- ND_LOGLEVEL=info
- ND_ENABLEDOWNLOADS=true
- ND_SESSIONTIMEOUT=24h
- ND_UIWELCOMEMESSAGE="Homelab Music"
- ND_DEFAULTTHEME=Dark
volumes:
- "/navidrome-data/data:/data"
- "/navidrome-data/music:/music:ro"
Directory and Permissions Preparation Link to heading
Before first startup, configure correct permissions for Navidrome directories:
# From navidrome container (pct enter 103)
# Create necessary directories
mkdir -p /navidrome-data/{data,music}
# Set correct permissions for Docker user 1000:1000
chown -R 1000:1000 /navidrome-data/
chmod -R 755 /navidrome-data/
# Verify permissions
ls -la /navidrome-data/
First Launch Link to heading
# Start container
cd /root/navidrome-app
docker-compose up -d
# Check status
docker-compose ps
docker-compose logs navidrome
# Expected output:
# navidrome | INFO Navidrome is ready!
Music Transfer from PC Link to heading
Option 1: SCP/rsync from PC (Recommended) Link to heading
First: Enable SSH in container
# From navidrome container (pct enter 103)
# Install and enable SSH
apt update && apt install -y openssh-server
systemctl enable ssh
systemctl start ssh
# Allow root login via SSH
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
systemctl restart ssh
# Verify SSH active
systemctl status ssh
Music Transfer
# RSYNC (recommended) - from your PC
# Copy folder CONTENTS (note the trailing slash)
rsync -av --progress /path/to/MusicLibrary/ [email protected]:/navidrome-data/music/
# SCP alternative - from your PC
# Copy folder and contents (without trailing slash)
scp -r /path/to/MusicLibrary [email protected]:/navidrome-data/music/
# IMPORTANT: After transfer, fix permissions in container
ssh [email protected] "chown -R 1000:1000 /navidrome-data/music/ && chmod -R 755 /navidrome-data/music/"
# Final desired structure:
# /navidrome-data/music/
# โโโ Artist1/Album1/01-Track.mp3
# โโโ Artist2/Album2/02-Track.flac
# โโโ ...
Option 2: Network Sharing (SMB/CIFS) Link to heading
# From navidrome container - install samba for sharing
apt update && apt install -y samba
# Create samba user
smbpasswd -a root
# Configure share in /etc/samba/smb.conf
echo '[music-share]
path = /navidrome-data/music
browseable = yes
writable = yes
guest ok = no
valid users = root' >> /etc/samba/smb.conf
# Restart samba
systemctl restart smbd
# From Windows PC: access \\192.168.1.206\music-share
Option 3: USB Drive Direct to Mini PC Link to heading
# From navidrome container - USB drive passthrough
# (Configure USB passthrough in Proxmox first)
# Check USB devices
lsblk
# Mount USB drive
mkdir -p /mnt/usb-music
mount /dev/sdb1 /mnt/usb-music
# Copy music maintaining structure
rsync -av --progress /mnt/usb-music/ /navidrome-data/music/
# Unmount drive
umount /mnt/usb-music
Post-Transfer Permission Settings Link to heading
# After any transfer method
# Set correct permissions for Docker
chown -R 1000:1000 /navidrome-data/music/
chmod -R 755 /navidrome-data/music/
# Verify structure
ls -la /navidrome-data/music/
First Web Configuration Link to heading
- URL:
http://192.168.1.206:4533
- First visit: Create administrator account
- Library Scan: Starts automatically
Functionality Testing Link to heading
- Browse Library: Verify navigation by artist/album
- Play Music: Test playback in browser
- Mobile Apps: Configure Subsonic apps - I used Amperfy on both Mac and iOS, the best seems to be Symfonium
Next Steps Link to heading
With Navidrome operational and personal music streaming, the homelab already offers a concrete alternative to Spotify and Apple Music. Immich and Navidrome work perfectly, but only from home.
The next step is crucial: making these services accessible everywhere while maintaining security.
โ Continue with: Homelab: Secure Remote Access