# Extended Media Services # Additional media management tools # Place in /opt/stacks/media-extended/docker-compose.yml services: # Readarr - Ebook and audiobook management # Access at: https://readarr.${DOMAIN} readarr: image: lscr.io/linuxserver/readarr:develop container_name: readarr restart: unless-stopped networks: - media-network - homelab-network - traefik-network volumes: - /opt/stacks/readarr/config:/config - /mnt/media/books:/books - /mnt/downloads:/downloads environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - TZ=${TZ} labels: - "homelab.category=media" - "homelab.description=Ebook and audiobook management" - "traefik.enable=true" - "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" # Lidarr - Music collection manager # Access at: https://lidarr.${DOMAIN} lidarr: image: lscr.io/linuxserver/lidarr:latest container_name: lidarr restart: unless-stopped networks: - media-network - homelab-network - traefik-network volumes: - /opt/stacks/lidarr/config:/config - /mnt/media/music:/music - /mnt/downloads:/downloads environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - TZ=${TZ} labels: - "homelab.category=media" - "homelab.description=Music collection manager" - "traefik.enable=true" - "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" # Lazy Librarian - Book manager # Access at: https://lazylibrarian.${DOMAIN} lazylibrarian: image: lscr.io/linuxserver/lazylibrarian:latest container_name: lazylibrarian restart: unless-stopped networks: - media-network - homelab-network - traefik-network volumes: - /opt/stacks/lazylibrarian/config:/config - /mnt/media/books:/books - /mnt/downloads:/downloads environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - TZ=${TZ} - DOCKER_MODS=linuxserver/mods:lazylibrarian-ffmpeg labels: - "homelab.category=media" - "homelab.description=Book download automation" - "traefik.enable=true" - "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" # Mylar3 - Comic book manager # Access at: https://mylar.${DOMAIN} mylar3: image: lscr.io/linuxserver/mylar3:latest container_name: mylar3 restart: unless-stopped networks: - media-network - homelab-network - traefik-network volumes: - /opt/stacks/mylar3/config:/config - /mnt/media/comics:/comics - /mnt/downloads:/downloads environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - TZ=${TZ} labels: - "homelab.category=media" - "homelab.description=Comic book collection manager" - "traefik.enable=true" - "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" # Calibre-Web - Ebook reader and server # Access at: https://calibre.${DOMAIN} calibre-web: image: lscr.io/linuxserver/calibre-web:latest container_name: calibre-web restart: unless-stopped networks: - media-network - homelab-network - traefik-network volumes: - /opt/stacks/calibre-web/config:/config - /mnt/media/books:/books environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - TZ=${TZ} - DOCKER_MODS=linuxserver/mods:universal-calibre labels: - "homelab.category=media" - "homelab.description=Ebook reader and library management" - "traefik.enable=true" - "traefik.http.routers.calibre.rule=Host(`calibre.${DOMAIN}`)" - "traefik.http.routers.calibre.entrypoints=websecure" - "traefik.http.routers.calibre.tls.certresolver=letsencrypt" - "traefik.http.routers.calibre.middlewares=authelia@docker" - "traefik.http.services.calibre.loadbalancer.server.port=8083" # Jellyseerr - Request management for Jellyfin/Plex # Access at: https://jellyseerr.${DOMAIN} jellyseerr: image: fallenbagel/jellyseerr:latest container_name: jellyseerr restart: unless-stopped networks: - media-network - homelab-network - traefik-network volumes: - /opt/stacks/jellyseerr/config:/app/config environment: - LOG_LEVEL=info - TZ=${TZ} labels: - "homelab.category=media" - "homelab.description=Media request management" - "traefik.enable=true" - "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" # FlareSolverr - Cloudflare bypass for Prowlarr # No web UI - used by Prowlarr flaresolverr: image: ghcr.io/flaresolverr/flaresolverr:latest container_name: flaresolverr restart: unless-stopped networks: - media-network environment: - LOG_LEVEL=info - TZ=${TZ} labels: - "homelab.category=media" - "homelab.description=Cloudflare bypass for indexers" # Tdarr Server - Distributed transcoding server # Access at: https://tdarr.${DOMAIN} tdarr-server: image: ghcr.io/haveagitgat/tdarr:latest container_name: tdarr-server restart: unless-stopped networks: - media-network - homelab-network - traefik-network ports: - "8266:8266" # Server port volumes: - /opt/stacks/tdarr/server:/app/server - /opt/stacks/tdarr/configs:/app/configs - /opt/stacks/tdarr/logs:/app/logs - /mnt/media:/media - /mnt/tdarr-transcode:/temp # Transcode cache on separate drive environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - TZ=${TZ} - serverIP=0.0.0.0 - serverPort=8266 - webUIPort=8265 labels: - "homelab.category=media" - "homelab.description=Distributed transcoding server" - "traefik.enable=true" - "traefik.http.routers.tdarr.rule=Host(`tdarr.${DOMAIN}`)" - "traefik.http.routers.tdarr.entrypoints=websecure" - "traefik.http.routers.tdarr.tls.certresolver=letsencrypt" - "traefik.http.routers.tdarr.middlewares=authelia@docker" - "traefik.http.services.tdarr.loadbalancer.server.port=8265" # Tdarr Node - Transcoding worker # No web UI - controlled by server tdarr-node: image: ghcr.io/haveagitgat/tdarr_node:latest container_name: tdarr-node restart: unless-stopped networks: - media-network volumes: - /opt/stacks/tdarr/configs:/app/configs - /opt/stacks/tdarr/logs:/app/logs - /mnt/media:/media - /mnt/tdarr-transcode:/temp environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - TZ=${TZ} - nodeID=MainNode - nodeIP=0.0.0.0 - nodePort=8267 - serverIP=tdarr-server - serverPort=8266 labels: - "homelab.category=media" - "homelab.description=Tdarr transcoding worker node" # Unmanic - Another transcoding option # Access at: https://unmanic.${DOMAIN} unmanic: image: josh5/unmanic:latest container_name: unmanic restart: unless-stopped networks: - media-network - homelab-network - traefik-network volumes: - /opt/stacks/unmanic/config:/config - /mnt/media:/library - /mnt/unmanic-cache:/tmp/unmanic # Transcode cache on separate drive environment: - PUID=${PUID:-1000} - PGID=${PGID:-1000} - TZ=${TZ} labels: - "homelab.category=media" - "homelab.description=Library optimization and transcoding" - "traefik.enable=true" - "traefik.http.routers.unmanic.rule=Host(`unmanic.${DOMAIN}`)" - "traefik.http.routers.unmanic.entrypoints=websecure" - "traefik.http.routers.unmanic.tls.certresolver=letsencrypt" - "traefik.http.routers.unmanic.middlewares=authelia@docker" - "traefik.http.services.unmanic.loadbalancer.server.port=8888" networks: media-network: external: true homelab-network: external: true traefik-network: external: true