diff --git a/.env.example b/.env.example index 4bd2f9e..644c79f 100644 --- a/.env.example +++ b/.env.example @@ -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 diff --git a/README.md b/README.md index 53cbefe..b8af8c1 100644 --- a/README.md +++ b/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 diff --git a/docker-compose-server.yml b/docker-compose-server.yml index 1b7314e..fe7c606 100644 --- a/docker-compose-server.yml +++ b/docker-compose-server.yml @@ -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