Add Navidrome music streaming server
- Add Navidrome service to docker-compose with Traefik routing - Route music.jeffemmett.com to Navidrome instead of Jellyfin - Update README with Navidrome docs and Subsonic-compatible mobile apps - Add Navidrome environment variables to .env.example 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
a04f5d0111
commit
ed267545d7
|
|
@ -12,6 +12,11 @@ PGID=1000
|
|||
# Jellyfin
|
||||
JELLYFIN_PublishedServerUrl=https://movies.jeffemmett.com
|
||||
|
||||
# Navidrome
|
||||
ND_SCANSCHEDULE=1h
|
||||
ND_LOGLEVEL=info
|
||||
ND_SESSIONTIMEOUT=24h
|
||||
|
||||
# Transmission (optional auth)
|
||||
TRANSMISSION_USER=admin
|
||||
TRANSMISSION_PASS=changeme
|
||||
|
|
|
|||
14
README.md
14
README.md
|
|
@ -60,7 +60,8 @@ cp .env.example .env
|
|||
|
||||
| Service | Port | Description |
|
||||
|---------|------|-------------|
|
||||
| Jellyfin | 8096 | Media player |
|
||||
| Jellyfin | 8096 | Video streaming (movies & TV) |
|
||||
| Navidrome | 4533 | Music streaming server |
|
||||
| Sonarr | 8989 | TV show management |
|
||||
| Radarr | 7878 | Movie management |
|
||||
| Prowlarr | 9696 | Indexer management |
|
||||
|
|
@ -69,8 +70,15 @@ cp .env.example .env
|
|||
## Access
|
||||
|
||||
All services accessible via Cloudflare Tunnel:
|
||||
- **Movies & TV**: https://movies.jeffemmett.com
|
||||
- **Music**: https://music.jeffemmett.com
|
||||
- **Movies & TV**: https://movies.jeffemmett.com (Jellyfin)
|
||||
- **Music**: https://music.jeffemmett.com (Navidrome)
|
||||
|
||||
### Navidrome Mobile Apps
|
||||
|
||||
Navidrome is Subsonic-compatible. Use any Subsonic client:
|
||||
- **Android**: Ultrasonic, Symfonium, DSub
|
||||
- **iOS**: play:Sub, Amperfy, SubStreamer
|
||||
- **Desktop**: Sonixd, Sublime Music
|
||||
|
||||
## Folder Structure
|
||||
|
||||
|
|
|
|||
|
|
@ -16,14 +16,41 @@ services:
|
|||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
# Route both movies.jeffemmett.com and music.jeffemmett.com to Jellyfin
|
||||
- "traefik.http.routers.jellyfin.rule=Host(`movies.jeffemmett.com`) || Host(`music.jeffemmett.com`)"
|
||||
- "traefik.http.routers.jellyfin.rule=Host(`movies.jeffemmett.com`)"
|
||||
- "traefik.http.routers.jellyfin.entrypoints=web"
|
||||
- "traefik.http.routers.jellyfin.middlewares=jellyfin-headers"
|
||||
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
||||
- "traefik.http.middlewares.jellyfin-headers.headers.customRequestHeaders.X-Forwarded-Proto=https"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
|
||||
navidrome:
|
||||
image: deluan/navidrome:latest
|
||||
container_name: navidrome
|
||||
restart: unless-stopped
|
||||
user: 1000:1000
|
||||
environment:
|
||||
- ND_SCANSCHEDULE=1h
|
||||
- ND_LOGLEVEL=info
|
||||
- ND_SESSIONTIMEOUT=24h
|
||||
- ND_BASEURL=
|
||||
- ND_ENABLETRANSCODINGCONFIG=true
|
||||
- ND_TRANSCODINGCACHESIZE=1GB
|
||||
- ND_IMAGECACHESIZE=500MB
|
||||
volumes:
|
||||
- ./config/navidrome:/data
|
||||
- ./media/music:/music:ro
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.navidrome.rule=Host(`music.jeffemmett.com`)"
|
||||
- "traefik.http.routers.navidrome.entrypoints=web"
|
||||
- "traefik.http.routers.navidrome.middlewares=navidrome-headers"
|
||||
- "traefik.http.services.navidrome.loadbalancer.server.port=4533"
|
||||
- "traefik.http.middlewares.navidrome-headers.headers.customRequestHeaders.X-Forwarded-Proto=https"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
|
||||
sonarr:
|
||||
image: linuxserver/sonarr:latest
|
||||
container_name: sonarr
|
||||
|
|
|
|||
Loading…
Reference in New Issue