Scop: să faci streaming din colecția ta de MP3-uri de pe un HDD vechi, cu acces din LAN și WAN, folosind un PC vechi + OpenWrt, fără să atingi porturile 80/443 ale routerului.
Arhitectura finală:
Internet/WAN
↓ (TCP 8443)
OpenWrt Port Forward 8443 → server:8443
↓
Caddy (HTTPS pe 8443, certificat self-signed)
↓
Navidrome (localhost:4533)
↓
HDD montat read-only: /mnt/music/mp3
0) Ce ai nevoie
- Un PC / mini-server (Linux)
- HDD cu muzică montat la:
/mnt/music/mp3 - Docker + Docker Compose
- Domeniu (ex:
music.exemplu.ro) cu A record spre IP-ul tău public - Router OpenWrt
1) Montează HDD-ul permanent (read-only)
- Ia UUID:
sudo blkid /dev/sdb1
- Creează mountpoint:
sudo mkdir -p /mnt/music
- Adaugă în
/etc/fstab(înlocuiești UUID-ul):
sudo nano /etc/fstab
Linie exemplu:
UUID=1E40C31640C2F415 /mnt/music ntfs-3g ro,noatime 0 0
- Test:
sudo mount -a
ls /mnt/music/mp3
2) Instalează Docker + Compose
sudo apt update
sudo apt install docker.io docker-compose -y
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER
Re-login (logout/login) și verifică:
docker ps
3) Pornește Navidrome (Docker)
- Creează foldere:
mkdir -p ~/navidrome/data
cd ~/navidrome
- Creează
docker-compose.yml:
nano docker-compose.yml
Pune:
version: "3"
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
ports:
- "4533:4533"
volumes:
- /mnt/music/mp3:/music:ro
- ./data:/data
environment:
ND_LOGLEVEL: info
ND_SCANINTERVAL: 1h
ND_SESSIONTIMEOUT: 24h
restart: unless-stopped
- Start:
docker-compose up -d
docker ps
- Accesează în LAN:
http://IP_SERVER:4533
Creează user admin, apoi un user non-admin pentru ascultat.
4) Instalează Caddy (reverse proxy)
sudo apt install caddy -y
5) Creează certificat self-signed pentru HTTPS (pe 8443)
- Creează director:
sudo mkdir -p /etc/caddy/certs
- Generează cert + key (înlocuiește domeniul):
sudo openssl req -x509 -newkey rsa:2048 -sha256 -days 825 -nodes \
-keyout /etc/caddy/certs/navidrome.key \
-out /etc/caddy/certs/navidrome.crt \
-subj "/CN=music.exemplu.ro"
- Permisiuni corecte (Caddy rulează ca user
caddy):
sudo chown root:caddy /etc/caddy/certs/navidrome.key /etc/caddy/certs/navidrome.crt
sudo chmod 640 /etc/caddy/certs/navidrome.key
sudo chmod 644 /etc/caddy/certs/navidrome.crt
6) Configurează Caddy să servească HTTPS pe 8443
Editează:
sudo nano /etc/caddy/Caddyfile
Pune (exact așa):
https://:8443 {
reverse_proxy localhost:4533
tls /etc/caddy/certs/navidrome.crt /etc/caddy/certs/navidrome.key
}
Restart:
sudo systemctl restart caddy
Verifică:
sudo ss -tuln | grep :8443
curl -vk https://127.0.0.1:8443/ 2>&1 | head -n 15
7) Firewall pe server (UFW)
sudo ufw allow 22/tcp
sudo ufw allow 8443/tcp
sudo ufw enable
sudo ufw status
Nu expune 4533 în internet (rămâne intern).
8) DNS: domeniul spre IP public
La providerul domeniului:
- A record:
music→ IP-ul tău public (ex:5.12.25.xx)
Verifică de pe server:
curl -4 ifconfig.me
9) OpenWrt: Port Forward 8443 → server:8443
În LuCI:Network → Firewall → Port Forwards → Add
Setări:
- Name:
navidrome-8443 - Protocol: TCP
- External zone:
wan - External port:
8443 - Internal zone:
lan - Internal IP:
IP_SERVER(ex:172.30.0.xx) - Internal port:
8443 - Enable: ✔
Save & Apply.
10) Test final LAN + WAN
LAN
- În browser:
https://IP_SERVER:8443
Acceptă warning-ul (self-signed).
WAN
- Pe telefon cu Wi-Fi OFF (date mobile):
https://music.exemplu.ro:8443
Acceptă warning-ul (self-signed).
11) Aplicații mobile
Android (Symfonium)
- Server type: Subsonic
- URL:
https://music.exemplu.ro:8443 - User: non-admin
- Ignore SSL errors: ON
iOS (play:Sub)
- Server: Subsonic
- URL:
https://music.exemplu.ro:8443 - Allow invalid SSL: ON
12) Calitate audio + caching (recomandat)
- Streaming quality: Original
- Transcoding: Off
- Cache: 2–5 GB
- Gapless playback: On
- Offline downloads: Original
13) (Opțional) Last.fm scrobbling
În Navidrome:Settings → Users → user-ul de ascultat → Last.fm scrobbling → Authorize
Troubleshooting rapid (cele mai frecvente)
- „SSL wrong version number”: ai accesat
https://către un endpoint HTTP. Asigură-te că Caddy servește HTTPS pe 8443. - „permission denied” pe key: rulează
chown root:caddyșichmod 640pe fișierul.key. - WAN nu merge, LAN merge: verifică port forward OpenWrt și UFW
8443/tcp. - Se deschide UI-ul routerului: nu forwarda spre 443; folosește 8443 → 8443.