Skip to main content

Arr HomeLab Stack

·567 words·3 mins

Overview
#

This is my full Arr Stack — a collection of containers that work together to automate media downloading, management, and subtitles.
The stack includes all the core Arr applications plus a VPN layer, torrent client, subtitle automation, and metadata support.


Components
#

  • Prowlarr – Central indexer management that integrates with Sonarr and Radarr.
  • Sonarr – TV show management and automation.
  • Radarr – Movie management and automation.
  • Bazarr – Subtitle downloading and syncing for Sonarr/Radarr media.
  • Lidarr (optional) – Music management (currently disabled).
  • Readarr (optional) – Book management (currently disabled).
  • FlareSolverr – Solves Cloudflare or CAPTCHA-protected search indexer pages.
  • Gluetun – VPN container providing network privacy and port forwarding.
  • qBittorrent – Torrent client running inside the Gluetun VPN network.
  • Huntarr – Search aggregator with an intuitive UI for manual searches.
  • Unpackerr – Extracts and moves completed downloads for Radarr and Sonarr.

Environment Variables Required
#

The following variables are required for the stack to function properly:

VariablePurpose
PIA_USERNAMEPrivate Internet Access VPN username
PIA_PASSWORDPrivate Internet Access VPN password
UNPACKERR_SONARR_API_KEYAPI key from Sonarr for Unpackerr integration
UNPACKERR_RADARR_API_KEYAPI key from Radarr for Unpackerr integration

These are stored securely in an .env file and referenced by the compose file.


Docker Compose Configuration
#

services:
  prowlarr:
    image: linuxserver/prowlarr:latest
    container_name: arr-suite-prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/Chicago
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/prowlarr:/config
    expose:
      - 9696/tcp
    ports:
      - 9696:9696
    restart: unless-stopped

  sonarr:
    image: linuxserver/sonarr:latest
    container_name: arr-suite-sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/Chicago
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/sonarr:/config
      - /mnt/media:/mnt/media
    expose:
      - 8989/tcp
    ports:
      - 8989:8989
    restart: unless-stopped

  radarr:
    image: linuxserver/radarr:latest
    container_name: arr-suite-radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/Chicago
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/radarr:/config
      - /mnt/media:/mnt/media
    expose:
      - 7878/tcp
    ports:
      - 7878:7878
    restart: unless-stopped

#  lidarr:
#    image: linuxserver/lidarr:latest
#    container_name: arr-suite-lidarr
#    environment:
#      - PUID=1000
#      - PGID=1000
#      - TZ=America/Chicago
#    volumes:
#      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/lidarr:/config
#      - /mnt/media:/mnt/media
#    expose:
#      - 8686/tcp
#    ports:
#      - 8686:8686
#    restart: unless-stopped

#  readarr:
#    image: linuxserver/readarr:develop
#    container_name: arr-suite-readarr
#    environment:
#      - PUID=1000
#      - PGID=1000
#      - TZ=America/Chicago
#    volumes:
#      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/readarr:/config
#      - /mnt/media:/mnt/media
#    expose:
#      - 8787/tcp
#    ports:
#      - 8787:8787
#    restart: unless-stopped

  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: arr-suite-bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/Chicago
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/bazarr:/config
      - /mnt/media:/mnt/media
    expose:
      - 6767/tcp
    ports:
      - 6767:6767
    restart: unless-stopped

  jellyseerr:
    image: fallenbagel/jellyseerr:latest
    container_name: jellyseerr
    environment:
        - LOG_LEVEL=debug
        - TZ=Asia/Tashkent
    ports:
        - 5055:5055
    volumes:
        - /path/to/appdata/config:/app/config
    restart: unless-stopped

  flaresolverr:
    image: flaresolverr/flaresolverr:latest
    container_name: arr-suite-flaresolverr
    environment:
      - LOG_LEVEL=info
      - LOG_HTML=false
      - CAPTCHA_SOLVER=none
      - TZ=America/Chicago
    expose:
      - 8191/tcp       # optional — allows other containers to talk to it
    ports:
      - "8191:8191"   # host:container mapping for direct access
    restart: unless-stopped

  gluetun:
    image: qmcgaw/gluetun:latest
    container_name: arr-suite-gluetun
    cap_add:
      - NET_ADMIN
    ports:
      - 8080:8080  # qBittorrent WebUI forwarded
    dns:
      - 1.1.1.1
      - 9.9.9.9
    environment:
      - VPN_SERVICE_PROVIDER=private internet access
      - VPN_TYPE=openvpn
      - OPENVPN_USER=${PIA_USERNAME}
      - OPENVPN_PASSWORD=${PIA_PASSWORD}
      - TZ=America/Chicago
      - SERVER_REGIONS=CA Montreal
      - BLOCK_MALICIOUS=off
      - BLOCK_ADS=off
      - BLOCK_SURVEILLANCE=off
      - VPN_PORT_FORWARDING=on
     # - VPN_PORT_FORWARDING_STATUS_FILE=/gluetun/forwarded_port
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/gluetun:/gluetun
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/gluetun:/tmp/gluetun
    restart: unless-stopped

  qbittorrent:
    image: linuxserver/qbittorrent:5.0.2-libtorrentv1
    container_name: arr-suite-qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - UMASK_SET=0000
      - TZ=America/Chicago
      - WEBUI_PORT=8080
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/qbittorrent:/config
      - /mnt/media/downloads:/mnt/media/downloads
    depends_on:
      - gluetun
    network_mode: container:arr-suite-gluetun
    restart: unless-stopped

  huntarr:
    image: huntarr/huntarr:latest
    container_name: arr-suite-huntarr
    environment:
      - TZ=America/Chicago
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/huntarr:/config
    ports:
      - 9705:9705
    restart: unless-stopped


  unpackerr:
    image: golift/unpackerr:latest
    container_name: arr-suite-unpackerr
    environment:
      - TZ=America/Chicago
      - UN_LOG_FILE=/downloads/unpackerr.log
      - UN_SONARR_0_URL=http://10.0.40.130:8989
      - UN_SONARR_0_API_KEY=${UNPACKERR_SONARR_API_KEY}
      - UN_RADARR_0_URL=http://10.0.40.130:7878
      - UN_RADARR_0_API_KEY=${UNPACKERR_RADARR_API_KEY}
      - UN_DIR_MODE=0777
      - UN_FILE_MODE=0666
    volumes:
      - /mnt/media/downloads:/downloads
    user: "1001:100"
    restart: unless-stopped
Kolton Corr
Author
Kolton Corr
A little bit about you