Route Navidrome through soulsync-player, add music-net network
- Navidrome: traefik.enable=false (no longer directly exposed) - Navidrome: joins music-net external network for proxy access - Added music-net as external network declaration - Traffic to music.jefflix.lol now routed through soulsync-player PWA Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
4113ccf83d
commit
9bbd01a74d
|
|
@ -0,0 +1,313 @@
|
|||
services:
|
||||
jellyfin:
|
||||
image: jellyfin/jellyfin:latest
|
||||
container_name: jellyfin
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- ./config/jellyfin:/config
|
||||
- ./cache/jellyfin:/cache
|
||||
# Hetzner Storage Box - all media served from here
|
||||
- /mnt/hetzner-media/media:/media
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.jellyfin.rule=Host(`movies.jeffemmett.com`) || Host(`movies.jefflix.lol`)"
|
||||
- "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"
|
||||
|
||||
# Request Management - User-facing interface for media requests
|
||||
jellyseerr:
|
||||
image: fallenbagel/jellyseerr:latest
|
||||
container_name: jellyseerr
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- LOG_LEVEL=debug
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- ./config/jellyseerr:/app/config
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.jellyseerr.rule=Host(`requests.jefflix.lol`)"
|
||||
- "traefik.http.routers.jellyseerr.entrypoints=web"
|
||||
- "traefik.http.routers.jellyseerr.middlewares=jellyseerr-headers"
|
||||
- "traefik.http.services.jellyseerr.loadbalancer.server.port=5055"
|
||||
- "traefik.http.middlewares.jellyseerr-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
|
||||
# Hetzner Storage Box - music library
|
||||
- /mnt/hetzner-media/media/music:/music:ro
|
||||
networks:
|
||||
- media-network
|
||||
- music-net
|
||||
labels:
|
||||
# Traefik disabled — traffic routed through soulsync-player container
|
||||
- "traefik.enable=false"
|
||||
|
||||
sonarr:
|
||||
image: linuxserver/sonarr:latest
|
||||
container_name: sonarr
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- ./config/sonarr:/config
|
||||
# Hetzner Storage Box - TV shows and downloads
|
||||
- /mnt/hetzner-media/media/shows:/tv
|
||||
- /mnt/hetzner-media/downloads:/downloads
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.sonarr.rule=Host(`sonarr.jefflix.lol`)"
|
||||
- "traefik.http.routers.sonarr.entrypoints=web"
|
||||
- "traefik.http.services.sonarr.loadbalancer.server.port=8989"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
|
||||
radarr:
|
||||
image: linuxserver/radarr:latest
|
||||
container_name: radarr
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- ./config/radarr:/config
|
||||
# Hetzner Storage Box - movies and downloads
|
||||
- /mnt/hetzner-media/media/movies:/movies
|
||||
- /mnt/hetzner-media/downloads:/downloads
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.radarr.rule=Host(`radarr.jefflix.lol`)"
|
||||
- "traefik.http.routers.radarr.entrypoints=web"
|
||||
- "traefik.http.services.radarr.loadbalancer.server.port=7878"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
|
||||
prowlarr:
|
||||
image: linuxserver/prowlarr:latest
|
||||
container_name: prowlarr
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- ./config/prowlarr:/config
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.prowlarr.rule=Host(`prowlarr.jefflix.lol`)"
|
||||
- "traefik.http.routers.prowlarr.entrypoints=web"
|
||||
- "traefik.http.services.prowlarr.loadbalancer.server.port=9696"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
|
||||
lidarr:
|
||||
image: linuxserver/lidarr:latest
|
||||
container_name: lidarr
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- ./config/lidarr:/config
|
||||
# Hetzner Storage Box - music and downloads
|
||||
- /mnt/hetzner-media/media/music:/music
|
||||
- /mnt/hetzner-media/downloads:/downloads
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.lidarr.rule=Host(`lidarr.jefflix.lol`)"
|
||||
- "traefik.http.routers.lidarr.entrypoints=web"
|
||||
- "traefik.http.services.lidarr.loadbalancer.server.port=8686"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
|
||||
# VPN for download privacy (optional - enable in .env)
|
||||
gluetun:
|
||||
image: qmcgaw/gluetun:latest
|
||||
container_name: gluetun
|
||||
restart: unless-stopped
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
environment:
|
||||
- VPN_SERVICE_PROVIDER=${VPN_PROVIDER:-mullvad}
|
||||
- VPN_TYPE=wireguard
|
||||
- WIREGUARD_PRIVATE_KEY=${VPN_WIREGUARD_PRIVATE_KEY:-}
|
||||
- WIREGUARD_ADDRESSES=${VPN_WIREGUARD_ADDRESS:-}
|
||||
- SERVER_COUNTRIES=${VPN_COUNTRY:-Germany}
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- ./config/gluetun:/gluetun
|
||||
ports:
|
||||
# qBittorrent WebUI
|
||||
- 8080:8080
|
||||
# BitTorrent ports
|
||||
- 6881:6881
|
||||
- 6881:6881/udp
|
||||
networks:
|
||||
- media-network
|
||||
profiles:
|
||||
- vpn
|
||||
|
||||
# Download client - downloads directly to Hetzner Storage Box
|
||||
qbittorrent:
|
||||
image: linuxserver/qbittorrent:latest
|
||||
container_name: qbittorrent
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Berlin
|
||||
- WEBUI_PORT=8080
|
||||
volumes:
|
||||
- ./config/qbittorrent:/config
|
||||
# Hetzner Storage Box - all downloads go here
|
||||
- /mnt/hetzner-media/downloads:/downloads
|
||||
# When VPN enabled, use gluetun network
|
||||
# network_mode: "service:gluetun"
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.qbittorrent.rule=Host(`downloads.jefflix.lol`)"
|
||||
- "traefik.http.routers.qbittorrent.entrypoints=web"
|
||||
- "traefik.http.services.qbittorrent.loadbalancer.server.port=8080"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
|
||||
# User Invitation System - Generate invite links for friends
|
||||
wizarr:
|
||||
image: ghcr.io/wizarrrr/wizarr:latest
|
||||
container_name: wizarr
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- APP_URL=https://invite.jefflix.lol
|
||||
- TZ=Europe/Berlin
|
||||
volumes:
|
||||
- ./config/wizarr:/data/database
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.wizarr.rule=Host(`invite.jeffemmett.com`) || Host(`invite.jefflix.lol`)"
|
||||
- "traefik.http.routers.wizarr.entrypoints=web"
|
||||
- "traefik.http.routers.wizarr.middlewares=wizarr-headers"
|
||||
- "traefik.http.routers.wizarr.priority=1"
|
||||
- "traefik.http.services.wizarr.loadbalancer.server.port=5690"
|
||||
- "traefik.http.middlewares.wizarr-headers.headers.customRequestHeaders.X-Forwarded-Proto=https"
|
||||
- "traefik.http.routers.wizarr-root.rule=(Host(`invite.jefflix.lol`) && Path(`/`))"
|
||||
- "traefik.http.routers.wizarr-root.entrypoints=web"
|
||||
- "traefik.http.routers.wizarr-root.middlewares=wizarr-root-redirect"
|
||||
- "traefik.http.routers.wizarr-root.priority=10"
|
||||
- "traefik.http.middlewares.wizarr-root-redirect.redirectregex.regex=^https?://invite.jefflix.lol/?$"
|
||||
- "traefik.http.middlewares.wizarr-root-redirect.redirectregex.replacement=https://invite.jefflix.lol/j/RA05YZFRGD"
|
||||
- "traefik.http.middlewares.wizarr-root-redirect.redirectregex.permanent=false"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
|
||||
# Legacy Transmission (kept for compatibility, prefer qBittorrent)
|
||||
transmission:
|
||||
image: linuxserver/transmission:latest
|
||||
container_name: transmission
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- TZ=Europe/Berlin
|
||||
- TRANSMISSION_WEB_HOME=/web
|
||||
volumes:
|
||||
- ./config/transmission:/config
|
||||
- /mnt/hetzner-media/downloads:/downloads
|
||||
- ./watch:/watch
|
||||
ports:
|
||||
- 9091:9091
|
||||
- 51413:51413
|
||||
- 51413:51413/udp
|
||||
networks:
|
||||
- media-network
|
||||
profiles:
|
||||
- legacy
|
||||
|
||||
# File Browser - Web upload interface for community contributions
|
||||
filebrowser:
|
||||
image: filebrowser/filebrowser:latest
|
||||
container_name: filebrowser
|
||||
restart: unless-stopped
|
||||
user: "0:0"
|
||||
environment:
|
||||
- TZ=Europe/Berlin
|
||||
- FB_PORT=8080
|
||||
- FB_ADDRESS=0.0.0.0
|
||||
volumes:
|
||||
- /mnt/hetzner-media/uploads:/srv/uploads
|
||||
- ./config/filebrowser:/database
|
||||
- ./config/filebrowser/settings.json:/config/settings.json:ro
|
||||
command:
|
||||
- --root=/srv/uploads
|
||||
- --database=/database/filebrowser.db
|
||||
- --address=0.0.0.0
|
||||
- --port=8080
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:8080/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.filebrowser.rule=Host(`upload.jefflix.lol`)"
|
||||
- "traefik.http.routers.filebrowser.entrypoints=web"
|
||||
- "traefik.http.routers.filebrowser.middlewares=filebrowser-headers"
|
||||
- "traefik.http.services.filebrowser.loadbalancer.server.port=8080"
|
||||
- "traefik.http.middlewares.filebrowser-headers.headers.customRequestHeaders.X-Forwarded-Proto=https"
|
||||
- "traefik.docker.network=traefik-public"
|
||||
networks:
|
||||
- media-network
|
||||
- traefik-public
|
||||
|
||||
networks:
|
||||
media-network:
|
||||
driver: bridge
|
||||
music-net:
|
||||
external: true
|
||||
traefik-public:
|
||||
external: true
|
||||
Loading…
Reference in New Issue