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
localhostin 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
gluetuncan 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.

