Stop Manual Downloading: Automate Your Home Media with the Docker ‘Arr’ Stack

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

The 5-Minute Quick Start

Docker Compose is the gold standard for deploying this stack. Before touching any code, you must set up a proper directory structure. Most people mess this up, which leads to slow file transfers and wasted CPU cycles. We want to ensure your system uses ‘Hardlinks’ so files move instantly.

mkdir -p ~/homelab/data/{downloads,media/{movies,tv}}
mkdir -p ~/homelab/config/{sonarr,radarr,prowlarr,qbittorrent}

Next, create a docker-compose.yml file in your homelab directory. This configuration uses a single /data mount point to enable lightning-fast file management.

services:
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./config/prowlarr:/config
    ports:
      - 9696:9696
    restart: unless-stopped

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./config/radarr:/config
      - ./data:/data
    ports:
      - 7878:7878
    restart: unless-stopped

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
    volumes:
      - ./config/sonarr:/config
      - ./data:/data
    ports:
      - 8989:8989
    restart: unless-stopped

  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/New_York
      - WEBUI_PORT=8080
    volumes:
      - ./config/qbittorrent:/config
      - ./data:/data
    ports:
      - 8080:8080
    restart: unless-stopped

Run docker-compose up -d. Within seconds, you’ll have a professional-grade media pipeline running on your local network.

Deep Dive: Why the ‘Arr’ Stack Matters

After building dozens of these setups, I’ve found that the real magic isn’t just in the downloading. It’s about moving from manual chaos to a professional-grade automated pipeline. Each application has a specific job. When they talk to each other correctly, your HomeLab becomes a self-healing library.

Prowlarr: The Command Center

Think of Prowlarr as the glue. Instead of adding your favorite indexers to Sonarr and Radarr separately, you add them once here. It automatically syncs those settings everywhere. If a tracker changes its URL, you update it in one place and the entire stack stays online.

Sonarr & Radarr: Your Digital Librarians

Sonarr manages TV series, while Radarr handles movies. These aren’t just simple downloaders; they are sophisticated database managers. They monitor your local library 24/7. They identify missing episodes and search for the best quality matches—like 1080p BluRay or 4K HEVC—based on your specific rules.

The ‘Atomic Move’ Secret

Beginners often mount separate volumes like /downloads and /movies. This is a massive mistake. When Docker sees these as different file systems, it has to physically copy data. This process is slow and kills SSD lifespan.

By using a single /data volume, the system performs an ‘Atomic Move’. A 60GB 4K movie appears in your library in milliseconds. No data is actually moved on the physical disk. This allows you to keep seeding the original file while the renamed version sits neatly in your media folder.

Advanced Tuning: Quality and Custom Formats

Once the basic sync works, it’s time to get picky. You don’t just want any 1080p file. You likely want specific release groups or codecs like H.265 to save up to 40% of your disk space.

Importing Trash Guides

For the best results, look up ‘Trash Guides’. These community-curated profiles ensure your system prioritizes high-bitrate releases (e.g., >20 Mbps) and ignores ‘CAM’ versions filmed in a theater. You can import these JSON profiles directly into Radarr to automate the ‘quality snob’ experience.

Bypassing Blocks with FlareSolverr

Some public trackers use Cloudflare to block automated bots. If Prowlarr fails to connect to certain sites, add a FlareSolverr container. It acts as a proxy that solves ‘I am human’ challenges automatically.

  flaresolverr:
    image: ghcr.io/flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    environment:
      - LOG_LEVEL=info
    ports:
      - 8191:8191
    restart: unless-stopped

Hard-Won Lessons from the Field

I’ve run this stack for years. These three habits will save you from a complete system rebuild during a power outage or hardware failure.

  • Use Container Names: Never use localhost in the settings. Use the Docker service names (e.g., http://qbittorrent:8080). This ensures the apps can find each other even if their internal IP addresses change.
  • Protect Your Privacy: If you use torrents, route your download client through a VPN. A container like gluetun can act as a secure gateway for your qBittorrent traffic.
  • Watch Your Storage: Radarr is very good at its job—sometimes too good. It can easily fill a 10TB drive over a long weekend if you subscribe to ‘Trending’ lists. Set up Discord webhooks or Apprise notifications to get alerts when your disk space hits 90%.

Setting up this stack is a cornerstone project for any home server enthusiast. It perfectly demonstrates why containerization is so powerful. Once the automation kicks in, you’ll never want to search for a file manually again.

Share: