# Media Management Services # 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: # Sonarr - TV show management and automation image: linuxserver/sonarr:4.0.0 container_name: sonarr restart: no networks: - homelab-network - traefik-network ports: - '8989:8989' volumes: - ./sonarr/config:/config - ${MEDIA_DIR}:/media - ${DOWNLOADS_DIR}:/downloads # Large downloads on separate drive environment: - PUID=${PUID} - PGID=${PUID} - TZ=${TZ} 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.${DOMAIN}`)' - '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 radarr: image: linuxserver/radarr:5.2.6 container_name: radarr restart: no networks: - homelab-network - traefik-network ports: - '7878:7878' volumes: - ./radarr/config:/config - ${MEDIA_DIR}:/media - ${DOWNLOADS_DIR}:/downloads # Large downloads on separate drive environment: - PUID=${PUID} - PGID=${PUID} - TZ=${TZ} 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.${DOMAIN}`)' - '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=${PUID} - PGID=${PUID} - TZ=${TZ} 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.${DOMAIN}`)' - '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 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 - ${MEDIA_DIR}/books:/books - ${DOWNLOADS_DIR}:/downloads environment: - PUID=${PUID} - PGID=${PUID} - TZ=${TZ} 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.${DOMAIN}`)' - '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 lidarr: image: linuxserver/lidarr:2.0.7 container_name: lidarr restart: no networks: - homelab-network - traefik-network ports: - '8686:8686' volumes: - ./lidarr/config:/config - ${MEDIA_DIR}/music:/music - ${DOWNLOADS_DIR}:/downloads environment: - PUID=${PUID} - PGID=${PUID} - TZ=${TZ} 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.${DOMAIN}`)' - '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 lazylibrarian: image: linuxserver/lazylibrarian:latest container_name: lazylibrarian restart: no networks: - homelab-network - traefik-network ports: - '5299:5299' volumes: - ./lazylibrarian/config:/config - ${MEDIA_DIR}/books:/books - ${DOWNLOADS_DIR}:/downloads environment: - PUID=${PUID} - PGID=${PUID} - TZ=${TZ} - 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.${DOMAIN}`)' - '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 mylar3: image: linuxserver/mylar3:latest container_name: mylar3 restart: no networks: - homelab-network - traefik-network ports: - '8090:8090' volumes: - ./mylar3/config:/config - ${MEDIA_DIR}/comics:/comics - ${DOWNLOADS_DIR}:/downloads environment: - PUID=${PUID} - PGID=${PUID} - TZ=${TZ} 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.${DOMAIN}`)' - '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 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=${TZ} 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.${DOMAIN}`)' - '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=${TZ} 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.${DOMAIN} - http://192.168.4.4:8989 - https://radarr.${DOMAIN} - http://192.168.4.4:7878 - https://prowlarr.${DOMAIN} - http://192.168.4.4:9696 - https://readarr.${DOMAIN} - http://192.168.4.4:8787 - https://lidarr.${DOMAIN} - http://192.168.4.4:8686 - https://lazylibrarian.${DOMAIN} - http://192.168.4.4:5299 - https://mylar.${DOMAIN} - http://192.168.4.4:8090 - https://jellyseerr.${DOMAIN} - http://192.168.4.4:5055 networks: homelab-network: external: true traefik-network: external: true