stacks/media/compose.yml

# stacks/media/compose.yml
# Jellyfin + Sonarr + Radarr + Prowlarr + Bazarr. The "arr" apps all share
# the same config volume layout under ./data. I keep the indexer behind
# Caddy basic_auth -- see the caddy/security.snippet.
# mercemay.top/src/homelab-compose/ has the wiring diagram.

networks:
  media:
    driver: bridge
  edge:
    external: true
    name: homelab_edge

services:
  jellyfin:
    image: jellyfin/jellyfin:10.9
    restart: unless-stopped
    user: "1000:1000"
    environment:
      - TZ=${TZ}
    devices:
      - /dev/dri:/dev/dri # Intel Quick Sync for transcoding
    volumes:
      - ./data/jellyfin/config:/config
      - ./data/jellyfin/cache:/cache
      - ${MEDIA_ROOT}:/media:ro
    networks: [media, edge]
    healthcheck:
      test: ["CMD", "curl", "-fsS", "http://localhost:8096/health"]
      interval: 30s
      timeout: 5s
      retries: 3

  sonarr:
    image: lscr.io/linuxserver/sonarr:4.0.9
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ./data/sonarr:/config
      - ${MEDIA_ROOT}/tv:/tv
      - ${DOWNLOADS_ROOT}:/downloads
    networks: [media, edge]

  radarr:
    image: lscr.io/linuxserver/radarr:5.10
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ./data/radarr:/config
      - ${MEDIA_ROOT}/movies:/movies
      - ${DOWNLOADS_ROOT}:/downloads
    networks: [media, edge]

  prowlarr:
    image: lscr.io/linuxserver/prowlarr:1.24
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ./data/prowlarr:/config
    networks: [media, edge]

  bazarr:
    image: lscr.io/linuxserver/bazarr:1.4.4
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ./data/bazarr:/config
      - ${MEDIA_ROOT}:/media
    networks: [media, edge]
    depends_on:
      - sonarr
      - radarr

  sabnzbd:
    image: lscr.io/linuxserver/sabnzbd:4.3
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ./data/sabnzbd:/config
      - ${DOWNLOADS_ROOT}:/downloads
      - ${DOWNLOADS_ROOT}/incomplete:/incomplete-downloads
    networks: [media, edge]