# Media Management Services # Content automation and library management (*arr apps, transcoders, etc.) # Place in /opt/stacks/media-management/docker-compose.yml # RESTART POLICY GUIDE: # - unless-stopped: Core infrastructure services that should always run # - no: Services with Sablier lazy loading (start on-demand) # - See individual service comments for specific reasoning services: # Sonarr - TV show automation # Access at: https://sonarr.yourdomain.duckdns.org sonarr: image: linuxserver/sonarr:4.0.0 container_name: sonarr restart: no networks: - homelab-network - traefik-network ports: - "8989:8989" volumes: - ./sonarr/config:/config - /mnt/media:/media - /mnt/downloads:/downloads # Large downloads on separate drive environment: - PUID=1000 - PGID=1000 - TZ=America/New_York healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8989/"] interval: 30s timeout: 10s retries: 3 start_period: 60s labels: # TRAEFIK CONFIGURATION # ========================================== # Service metadata - "homelab.category=media" - "homelab.description=TV show management and automation" - "com.centurylinklabs.watchtower.enable=true" # Traefik reverse proxy (comment/uncomment to disable/enable) # If Traefik is on a remote server: these labels are NOT USED; # configure external yml files in /traefik/dynamic folder instead. - "traefik.enable=true" - "traefik.docker.network=traefik-network" - "traefik.http.routers.sonarr.rule=Host(`sonarr.kelinreij.duckdns.org`)" - "traefik.http.routers.sonarr.entrypoints=websecure" - "traefik.http.routers.sonarr.tls.certresolver=letsencrypt" - "traefik.http.routers.sonarr.middlewares=authelia@docker" - "traefik.http.services.sonarr.loadbalancer.server.port=8989" - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" # Radarr - Movie automation # Access at: https://radarr.yourdomain.duckdns.org radarr: image: linuxserver/radarr:5.2.6 container_name: radarr restart: no networks: - homelab-network - traefik-network ports: - "7878:7878" volumes: - ./radarr/config:/config - /mnt/media:/media - /mnt/downloads:/downloads # Large downloads on separate drive environment: - PUID=1000 - PGID=1000 - TZ=America/New_York healthcheck: test: ["CMD", "curl", "-f", "http://localhost:7878/"] interval: 30s timeout: 10s retries: 3 start_period: 60s labels: # TRAEFIK CONFIGURATION # ========================================== # Service metadata - "homelab.category=media" - "homelab.description=Movie management and automation" - "com.centurylinklabs.watchtower.enable=true" # Traefik reverse proxy (comment/uncomment to disable/enable) # If Traefik is on a remote server: these labels are NOT USED; # configure external yml files in /traefik/dynamic folder instead. - "traefik.enable=true" - "traefik.docker.network=traefik-network" - "traefik.http.routers.radarr.rule=Host(`radarr.kelinreij.duckdns.org`)" - "traefik.http.routers.radarr.entrypoints=websecure" - "traefik.http.routers.radarr.tls.certresolver=letsencrypt" - "traefik.http.routers.radarr.middlewares=authelia@docker" - "traefik.http.services.radarr.loadbalancer.server.port=7878" - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" # Prowlarr - Indexer manager # Access at: https://prowlarr.yourdomain.duckdns.org prowlarr: image: linuxserver/prowlarr:1.11.4 container_name: prowlarr restart: no networks: - homelab-network - traefik-network ports: - "9696:9696" volumes: - ./prowlarr/config:/config environment: - PUID=1000 - PGID=1000 - TZ=America/New_York healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9696/"] interval: 30s timeout: 10s retries: 3 start_period: 60s labels: # TRAEFIK CONFIGURATION # ========================================== # Service metadata - "homelab.category=media" - "homelab.description=Indexer manager for Sonarr/Radarr" - "com.centurylinklabs.watchtower.enable=true" # Traefik reverse proxy (comment/uncomment to disable/enable) # If Traefik is on a remote server: these labels are NOT USED; # configure external yml files in /traefik/dynamic folder instead. - "traefik.enable=true" - "traefik.docker.network=traefik-network" - "traefik.http.routers.prowlarr.rule=Host(`prowlarr.kelinreij.duckdns.org`)" - "traefik.http.routers.prowlarr.entrypoints=websecure" - "traefik.http.routers.prowlarr.tls.certresolver=letsencrypt" - "traefik.http.routers.prowlarr.middlewares=authelia@docker" - "traefik.http.services.prowlarr.loadbalancer.server.port=9696" - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" # Readarr - Ebook and audiobook management # Access at: https://readarr.kelinreij.duckdns.org readarr: image: linuxserver/readarr:0.4.19-nightly container_name: readarr restart: no networks: - homelab-network - traefik-network ports: - "8787:8787" volumes: - ./readarr/config:/config - /mnt/media/books:/books - /mnt/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=America/New_York labels: # TRAEFIK CONFIGURATION # ========================================== # Service metadata - "homelab.category=media" - "homelab.description=Ebook and audiobook management" - "com.centurylinklabs.watchtower.enable=true" # Traefik reverse proxy (comment/uncomment to disable/enable) # If Traefik is on a remote server: these labels are NOT USED; # configure external yml files in /traefik/dynamic folder instead. - "traefik.enable=true" - "traefik.docker.network=traefik-network" - "traefik.http.routers.readarr.rule=Host(`readarr.kelinreij.duckdns.org`)" - "traefik.http.routers.readarr.entrypoints=websecure" - "traefik.http.routers.readarr.tls.certresolver=letsencrypt" - "traefik.http.routers.readarr.middlewares=authelia@docker" - "traefik.http.services.readarr.loadbalancer.server.port=8787" - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" # Lidarr - Music collection manager # Access at: https://lidarr.kelinreij.duckdns.org lidarr: image: linuxserver/lidarr:2.0.7 container_name: lidarr restart: no networks: - homelab-network - traefik-network ports: - "8686:8686" volumes: - ./lidarr/config:/config - /mnt/media/music:/music - /mnt/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=America/New_York labels: # TRAEFIK CONFIGURATION # ========================================== # Service metadata - "homelab.category=media" - "homelab.description=Music collection manager" - "com.centurylinklabs.watchtower.enable=true" # Traefik reverse proxy (comment/uncomment to disable/enable) # If Traefik is on a remote server: these labels are NOT USED; # configure external yml files in /traefik/dynamic folder instead. - "traefik.enable=true" - "traefik.docker.network=traefik-network" - "traefik.http.routers.lidarr.rule=Host(`lidarr.kelinreij.duckdns.org`)" - "traefik.http.routers.lidarr.entrypoints=websecure" - "traefik.http.routers.lidarr.tls.certresolver=letsencrypt" - "traefik.http.routers.lidarr.middlewares=authelia@docker" - "traefik.http.services.lidarr.loadbalancer.server.port=8686" - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" # Lazy Librarian - Book manager # Access at: https://lazylibrarian.kelinreij.duckdns.org lazylibrarian: image: linuxserver/lazylibrarian:latest container_name: lazylibrarian restart: no networks: - homelab-network - traefik-network ports: - "5299:5299" volumes: - ./lazylibrarian/config:/config - /mnt/media/books:/books - /mnt/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=America/New_York - DOCKER_MODS=linuxserver/mods:lazylibrarian-ffmpeg labels: # TRAEFIK CONFIGURATION # ========================================== # Service metadata - "homelab.category=media" - "homelab.description=Book download automation" - "com.centurylinklabs.watchtower.enable=true" # Traefik reverse proxy (comment/uncomment to disable/enable) # If Traefik is on a remote server: these labels are NOT USED; # configure external yml files in /traefik/dynamic folder instead. - "traefik.enable=true" - "traefik.docker.network=traefik-network" - "traefik.http.routers.lazylibrarian.rule=Host(`lazylibrarian.kelinreij.duckdns.org`)" - "traefik.http.routers.lazylibrarian.entrypoints=websecure" - "traefik.http.routers.lazylibrarian.tls.certresolver=letsencrypt" - "traefik.http.routers.lazylibrarian.middlewares=authelia@docker" - "traefik.http.services.lazylibrarian.loadbalancer.server.port=5299" - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" # Mylar3 - Comic book manager # Access at: https://mylar.kelinreij.duckdns.org mylar3: image: linuxserver/mylar3:latest container_name: mylar3 restart: no networks: - homelab-network - traefik-network ports: - "8090:8090" volumes: - ./mylar3/config:/config - /mnt/media/comics:/comics - /mnt/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=America/New_York labels: # TRAEFIK CONFIGURATION # ========================================== # Service metadata - "homelab.category=media" - "homelab.description=Comic book collection manager" - "com.centurylinklabs.watchtower.enable=true" # Traefik reverse proxy (comment/uncomment to disable/enable) # If Traefik is on a remote server: these labels are NOT USED; # configure external yml files in /traefik/dynamic folder instead. - "traefik.enable=true" - "traefik.docker.network=traefik-network" - "traefik.http.routers.mylar.rule=Host(`mylar.kelinreij.duckdns.org`)" - "traefik.http.routers.mylar.entrypoints=websecure" - "traefik.http.routers.mylar.tls.certresolver=letsencrypt" - "traefik.http.routers.mylar.middlewares=authelia@docker" - "traefik.http.services.mylar.loadbalancer.server.port=8090" - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" # Jellyseerr - Request management for Jellyfin/Plex # Access at: https://jellyseerr.kelinreij.duckdns.org jellyseerr: image: fallenbagel/jellyseerr:latest container_name: jellyseerr restart: no networks: - homelab-network - traefik-network ports: - "5055:5055" volumes: - ./jellyseerr/config:/app/config environment: - LOG_LEVEL=info - TZ=America/New_York healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:5055/"] interval: 30s timeout: 10s retries: 3 start_period: 60s labels: # TRAEFIK CONFIGURATION # ========================================== # Service metadata - "homelab.category=media" - "homelab.description=Media request management" - "com.centurylinklabs.watchtower.enable=true" # Traefik reverse proxy (comment/uncomment to disable/enable) # If Traefik is on a remote server: these labels are NOT USED; # configure external yml files in /traefik/dynamic folder instead. - "traefik.enable=true" - "traefik.docker.network=traefik-network" - "traefik.http.routers.jellyseerr.rule=Host(`jellyseerr.kelinreij.duckdns.org`)" - "traefik.http.routers.jellyseerr.entrypoints=websecure" - "traefik.http.routers.jellyseerr.tls.certresolver=letsencrypt" - "traefik.http.routers.jellyseerr.middlewares=authelia@docker" - "traefik.http.services.jellyseerr.loadbalancer.server.port=5055" - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" # FlareSolverr - Cloudflare bypass for Prowlarr # No web UI - used by Prowlarr flaresolverr: image: flaresolverr/flaresolverr:latest container_name: flaresolverr restart: unless-stopped networks: - homelab-network environment: - LOG_LEVEL=info - TZ=America/New_York labels: - homelab.category=media - homelab.description=Cloudflare bypass for indexers - "sablier.enable=true" - "sablier.group=jasper-arr" - "sablier.start-on-demand=true" x-dockge: urls: - https://sonarr.kelinreij.duckdns.org - http://192.168.4.4:8989 - https://radarr.kelinreij.duckdns.org - http://192.168.4.4:7878 - https://prowlarr.kelinreij.duckdns.org - http://192.168.4.4:9696 - https://readarr.kelinreij.duckdns.org - http://192.168.4.4:8787 - https://lidarr.kelinreij.duckdns.org - http://192.168.4.4:8686 - https://lazylibrarian.kelinreij.duckdns.org - http://192.168.4.4:5299 - https://mylar.kelinreij.duckdns.org - http://192.168.4.4:8090 - https://jellyseerr.kelinreij.duckdns.org - http://192.168.4.4:5055 networks: homelab-network: external: true traefik-network: external: true