Guide
7 min read

An Arr-Stack Deployment Map: Where Sonarr, Downloaders, and Jellyfin Should Live

The arr stack breaks for beginners before the first deploy — nobody tells them where the torrent client, bind mounts, and media server should actually live. A deployment map that keeps paths consistent.

An Arr-Stack Deployment Map: Where Sonarr, Downloaders, and Jellyfin Should Live

The "arr" stack — Sonarr, Radarr, Prowlarr, a download client, and a media server like Jellyfin — has a reputation for being brittle. It usually isn't the apps; it's that beginners deploy them with no map. They put each piece somewhere different, give every container its own idea of where media lives, and then spend a weekend fighting permission errors and files that won't move. Decide the deployment map first — where each service lives and, crucially, how the paths line up — and the arr stack becomes boringly reliable.

The one rule that prevents most arr-stack pain: consistent paths

The single biggest source of arr-stack misery is inconsistent path mapping between containers. If Sonarr sees the download at /downloads and Jellyfin sees the library at /media, but those map to different real folders on different filesystems, every "import" becomes a slow copy across filesystems — or fails on permissions. The fix:

  • Mount one shared media root into every arr container at the same path (e.g. /data), with tv, movies, and downloads underneath it.
  • Keep downloads and the library on the same filesystem so completed downloads move by hardlink/atomic rename, not a cross-disk copy. This is the difference between instant imports and a thrashing disk.

Get this right and 80% of "the arr stack is broken" disappears.

Where each piece should live

The arr apps (Sonarr, Radarr, Prowlarr, Bazarr). Lightweight web services — ideal as Docker containers (or one LXC running Docker). Keep them together so they share the same media mount and network. Deploy them from templates so the config and volumes are consistent rather than hand-wired:

ServerCompass selecting the Sonarr template from its catalog Deploying an arr app from a template in ServerCompass — Sonarr, Radarr, and Prowlarr brought up with consistent volumes so the shared media path lines up across the stack.

The download client (qBittorrent et al.). Same host, same shared /data mount, so completed downloads hardlink into the library. If it runs through a VPN, pin it to the VPN's network namespace with a kill-switch — the VPN/torrent isolation that keeps traffic from leaking.

The media server (Jellyfin/Plex). Can live alongside the arr apps or in its own LXC for GPU transcoding — but it must mount the same library path. Its deployment choices are their own decision: Compose vs Portainer vs template.

LXC vs Docker vs bare metal

  • Docker (often inside one LXC on Proxmox) — the common, flexible choice; everything shares a network and the media mount cleanly.
  • Separate LXCs per app — more isolation, but you must replicate the shared media mount into each, carefully, with matching UIDs.
  • Bare metal — rarely worth it for the arr stack; you lose the easy, reproducible config.

For most people: one LXC running Docker Compose for the whole stack, one shared media volume, is the sweet spot.

Permissions: one UID to rule them all

The other classic failure is UID mismatch — Sonarr writes a file the download client or Jellyfin can't read. Run the stack with a consistent PUID/PGID that owns the media tree, so every app reads and writes as the same user. This is the bind-mount ownership rule applied across a whole stack.

Deployment map checklist

  • One shared media root mounted at the same path in every container.
  • Downloads + library on the same filesystem (hardlink imports).
  • Arr apps + downloader together; media server can split for GPU.
  • Consistent PUID/PGID owning the media tree.
  • VPN-bound downloader with a kill-switch if used.

Takeaway

The arr stack isn't fragile — undisciplined deployments are. Map it before you deploy: one shared media path across every container, downloads and library on one filesystem for hardlink imports, consistent permissions, and a clear home for each service. Draw that map first and the stack that everyone warns you about just quietly works.

arr-stack
sonarr
jellyfin
docker
deployment-planning

Keep reading

Guide
8 min

NAS-hosted Jellyfin failures cluster around bind mounts, library state, and update rollback

Fresh Jellyfin and self-hosting posts show the same operator pain from multiple angles: the media server is running, but the boundary between Docker, NAS paths, and app state is fragile. One new self-hoster cannot deploy a Portainer/Jellyfin stack because…

Guide
7 min

Your First Home Server: The OS and Storage Decisions That Decide Everything

Beginners can install one app, then stall on the questions that actually matter: which operating model, where the data lives, and what survives growth. A first-week path that won't trap you.

Guide
7 min

Jellyfin Docker Troubleshooting: From Library Scans That Miss Files to Reading the Logs

Most Jellyfin problems are one of three things — a library scan that won't see files, hardware transcoding that isn't, or playback that fails. A path from symptom to the right log line.

Guide
8 min

Beginner homelabs need an app-first checklist before buying storage, servers, or noisy rack gear

Very fresh homelab and self-hosted threads keep showing beginners choosing hardware before they have a stable application plan. One user already runs Immich and Jellyfin on an old laptop but is unsure what storage size, drive class, and server path fit a…

Guide
8 min

Container monitoring is moving from uptime dashboards to egress policy, backup-state widgets, and service-level proof

Fresh self-hosting posts point to a more specific monitoring need than simple green/red uptime. One homelab user running rootless Podman quadlet services wants per-container outbound blocking, domain allowlists, and traffic visibility but cannot see how to…

Guide
8 min

First-time self-hosted app launches need preflight maps before Docker, hosting plans, and per-client stacks

Fresh Reddit threads show beginners and small freelancers getting blocked before the application itself is the hard part. One Immich beginner wants to run it on Windows but gets stuck at Docker prerequisites. A Next.js freelancer is planning a separate app…