tatertastic.org
Light
Guide 06 — Continues from Guide 05

Setting Up the Arr Stack

This guide picks up where Guide 05 left off. You have Docker and Portainer running — now you'll deploy the full media stack: Prowlarr for indexers, Radarr for movies, Sonarr for TV shows, qBittorrent for downloading, and Jellyfin for streaming. By the end you'll have a fully automated media server that finds, downloads, and organizes your content.

Requires Guide 05 complete 1–2 hours All commands run inside Portainer
Complete Guide 05 first. This guide assumes you have Docker and Portainer running. If you haven't done that yet, go back to Guide 05.
STEP 01

How the stack fits together

Before deploying anything, it helps to understand what each piece does and how they talk to each other. The whole system is automated — once configured, you just request a movie and it handles everything.

Prowlarr
Port 9696
Manages your indexers (the sites that list available torrents). Radarr and Sonarr ask Prowlarr to search for content.
Radarr
Port 7878
Monitors your movie library. When you add a movie, it asks Prowlarr to find it and sends the download to qBittorrent.
Sonarr
Port 8989
Same as Radarr but for TV shows. Automatically grabs new episodes as they air.
qBittorrent
Port 8080
The download client. Receives torrent files from Radarr/Sonarr and downloads them.
Jellyfin
Port 8096
Your streaming server. Reads your media library and lets you watch on any device.

The flow

  • 1You add a movie to Radarr (or it's requested via Jellyfin)
  • 2Radarr asks Prowlarr to search for it across all your indexers
  • 3Prowlarr finds a match and returns the torrent info
  • 4Radarr sends the torrent to qBittorrent to download
  • 5When the download completes, Radarr moves it to your movies folder and renames it properly
  • 6Jellyfin picks it up and it appears in your library
STEP 02

Create your folder structure

Before deploying any containers, create the folders they'll use for media and downloads. Getting this right now saves a lot of headaches later.

Proxmox/Linux users: run these in your LXC console. Windows users: create these folders manually in File Explorer, then adjust the paths in the compose file below to match Windows-style paths (e.g. C:\media\movies).

mkdir -p /mnt/media/movies mkdir -p /mnt/media/tv mkdir -p /mnt/media/downloads/incomplete mkdir -p /mnt/media/downloads/complete mkdir -p /mnt/appdata/radarr mkdir -p /mnt/appdata/sonarr mkdir -p /mnt/appdata/prowlarr mkdir -p /mnt/appdata/qbittorrent mkdir -p /mnt/appdata/jellyfin
Using a separate drive for media? If you have a large HDD or external drive for media storage, mount it and use that path instead of /mnt/media. For example if your drive is at /mnt/bigdrive, use /mnt/bigdrive/movies etc. The important thing is consistency — use the same paths in the compose file below.

Set permissions so Docker can read/write these folders:

chmod -R 755 /mnt/media /mnt/appdata
STEP 03

Deploy the stack via Portainer

You'll deploy everything at once using a Docker Compose file — a single config file that defines all your containers, their settings, and how they connect.

  1. 1 Open Portainer in your browser (https://[your-ip]:9443), log in, and click on your local environment.
  2. 2 In the left sidebar, click Stacks, then click Add stack.
  3. 3 Name it media-stack.
  4. 4 In the web editor, paste the entire compose file below. Then click Deploy the stack.
Before pasting: Replace YOUR_TIMEZONE with your timezone (e.g. America/Los_Angeles or America/New_York). Replace 1000 in PUID/PGID with your user ID if needed — on most Linux setups 1000 is correct. Windows users should remove or ignore the PUID/PGID lines.
services: prowlarr: image: lscr.io/linuxserver/prowlarr:latest container_name: prowlarr environment: - PUID=1000 - PGID=1000 - TZ=YOUR_TIMEZONE volumes: - /mnt/appdata/prowlarr:/config ports: - 9696:9696 restart: unless-stopped radarr: image: lscr.io/linuxserver/radarr:latest container_name: radarr environment: - PUID=1000 - PGID=1000 - TZ=YOUR_TIMEZONE volumes: - /mnt/appdata/radarr:/config - /mnt/media/movies:/movies - /mnt/media/downloads:/downloads ports: - 7878:7878 restart: unless-stopped sonarr: image: lscr.io/linuxserver/sonarr:latest container_name: sonarr environment: - PUID=1000 - PGID=1000 - TZ=YOUR_TIMEZONE volumes: - /mnt/appdata/sonarr:/config - /mnt/media/tv:/tv - /mnt/media/downloads:/downloads ports: - 8989:8989 restart: unless-stopped qbittorrent: image: lscr.io/linuxserver/qbittorrent:latest container_name: qbittorrent environment: - PUID=1000 - PGID=1000 - TZ=YOUR_TIMEZONE - WEBUI_PORT=8080 volumes: - /mnt/appdata/qbittorrent:/config - /mnt/media/downloads:/downloads ports: - 8080:8080 restart: unless-stopped jellyfin: image: lscr.io/linuxserver/jellyfin:latest container_name: jellyfin environment: - PUID=1000 - PGID=1000 - TZ=YOUR_TIMEZONE volumes: - /mnt/appdata/jellyfin:/config - /mnt/media/movies:/data/movies - /mnt/media/tv:/data/tv ports: - 8096:8096 restart: unless-stopped

Portainer will pull all the images and start the containers. This takes a few minutes depending on your internet speed. You can watch progress in Portainer under Containers.

All containers healthy? Go to Portainer → Containers. Each container should show as "running" with a green dot. If one shows as "exited" click on it and check the logs to see what went wrong.
STEP 04

Configure Prowlarr

Prowlarr manages your indexers — the sites that list available torrents. You need at least one indexer added before Radarr and Sonarr can find anything.

  1. 1 Open Prowlarr at http://[your-ip]:9696. On first launch it will ask you to set up authentication — set a username and password.
  2. 2 Click Indexers in the top menu, then Add Indexer.
  3. 3 Search for 1337x or RARBG — these are public indexers that don't require accounts. Select one and click Test, then Save if the test passes.
  4. 4 Add a few more public indexers for better coverage. Popular ones: YTS (great for movies), EZTV (great for TV), The Pirate Bay.
  5. 5 Now connect Prowlarr to Radarr and Sonarr. Go to Settings → Apps and click the + button.
  6. 6 Add Radarr: set the server URL to http://radarr:7878 and paste in Radarr's API key (you'll get this from Radarr → Settings → General in the next step). For now, note this step and come back after Step 05.
  7. 7 Repeat for Sonarr with URL http://sonarr:8989.
Private indexers are better. Public indexers work fine to get started, but private trackers (which require accounts and invites) have more content, faster speeds, and better quality. Once you're up and running, look into joining a private tracker community.
STEP 05

Configure Radarr

Radarr monitors your movie library and automatically searches for and downloads movies you want.

  1. 1 Open Radarr at http://[your-ip]:7878. Set up authentication if prompted.
  2. 2 Go to Settings → Media Management. Under Root Folders click Add Root Folder and enter /movies. This is where Radarr will put downloaded movies.
  3. 3 Go to Settings → Download Clients and click the + button. Select qBittorrent. Set:
    — Host: qbittorrent
    — Port: 8080
    — Username: admin
    — Password: check qBittorrent's web UI for the temporary password (it shows on first launch)
    Click Test then Save.
  4. 4 Go to Settings → General and copy your API Key. Go back to Prowlarr and paste it in when adding Radarr as an app (from Step 04).
  5. 5 Go to Settings → Profiles. The default quality profiles work fine to start — "Any" means grab whatever's available, "HD-1080p" means only grab 1080p content.

Add your first movie

  • 1Click Movies → Add New in the top menu.
  • 2Search for a movie title.
  • 3Select the quality profile and root folder, then click Add Movie.
  • 4Radarr will immediately search for it. Check the Activity tab to see the search and download progress.
STEP 06

Configure Sonarr

Sonarr works exactly like Radarr but for TV shows. The configuration steps are nearly identical.

  1. 1 Open Sonarr at http://[your-ip]:8989.
  2. 2 Go to Settings → Media Management → Root Folders and add /tv.
  3. 3 Go to Settings → Download Clients, click +, and add qBittorrent with the same settings as Radarr (host: qbittorrent, port: 8080).
  4. 4 Go to Settings → General, copy the API Key, and go back to Prowlarr to add Sonarr as an app.
  5. 5 Add a TV show: click Series → Add New, search for a show, select your quality profile, and add it. Sonarr will grab existing episodes and automatically download new ones as they air.
STEP 07

Set up Jellyfin

Jellyfin is your streaming frontend — it reads your media library and lets you watch on any device through a Netflix-style interface.

  1. 1 Open Jellyfin at http://[your-ip]:8096. You'll be walked through a first-time setup wizard.
  2. 2 Set your display language and create an admin account — this is your Jellyfin login, separate from everything else.
  3. 3 When asked to set up your media library, add two libraries:
    — Click Add Media Library → Type: Movies → Folder: /data/movies
    — Click Add Media Library → Type: Shows → Folder: /data/tv
  4. 4 Complete the setup wizard. Jellyfin will scan your library — any movies already downloaded will appear.
  5. 5 Install the Jellyfin app on your devices: it's available on Android, iOS, Apple TV, Fire TV, Roku, Android TV, and most smart TVs. Search for "Jellyfin" in your device's app store.
  6. 6 In the Jellyfin app, enter your server address: http://[your-server-ip]:8096 and log in with your admin credentials.
Remote access: By default Jellyfin only works on your local network. To watch away from home you'll need to either expose it via a VPN (Tailscale is the simplest option) or set up a reverse proxy with Cloudflare tunnels. These are more advanced topics — AI chat is useful for walking through either option.
DONE ✓

Your first download

Your media server is fully operational. Here's a quick recap of what you now have running:

Your stack at a glance

  • Prowlarr at :9696 — indexer manager
  • Radarr at :7878 — movie automation
  • Sonarr at :8989 — TV show automation
  • qBittorrent at :8080 — download client
  • Jellyfin at :8096 — streaming frontend

What to do next

  • Add more indexers in Prowlarr — more indexers means better coverage and faster downloads.
  • Set up Bazarr — automatically downloads subtitles for everything in your library. Deploy it the same way as the rest of the stack.
  • Add Overseerr/Jellyseerr — a nice request portal where friends can browse and request content without needing access to Radarr/Sonarr directly.
  • Configure quality profiles — once you're comfortable, dial in your preferred quality settings in Radarr and Sonarr. 1080p is the sweet spot for most setups.
  • Enable hardware transcoding in Jellyfin — if your server has an Intel GPU or Nvidia card, enabling hardware transcoding dramatically reduces CPU load when streaming to devices that can't play files natively.

TROUBLESHOOTING

Common issues

Downloads not starting

  • ?No indexers found: Check Prowlarr is running and has at least one indexer added. Go to Prowlarr → Indexers and confirm the test passes.
  • ?qBittorrent connection refused: In Radarr/Sonarr download client settings, make sure the host is qbittorrent (the container name), not localhost or an IP. Inside Docker, containers talk to each other by name.
  • ?Download completes but file doesn't appear in Radarr/Sonarr: This is usually a path mismatch. Make sure the /downloads path in Radarr/Sonarr settings matches where qBittorrent saves files. They should all point to the same /mnt/media/downloads folder on the host.
  • ?Permission denied errors: Run chmod -R 755 /mnt/media and chown -R 1000:1000 /mnt/media on your server to fix permissions.

Jellyfin issues

  • ?Library not showing movies: Go to Dashboard → Libraries and click the scan button. Jellyfin doesn't always auto-detect new files immediately.
  • ?Can't connect from app: Make sure you're using http:// not https:// for local access, and that the IP is your server's IP, not localhost.
  • ?Buffering or stuttering: The file might be transcoding. Check Jellyfin → Dashboard → Active Sessions to see if it says "Transcoding." Enable hardware transcoding in Dashboard → Playback if your GPU supports it, or set your clients to "Direct Play" in their settings.
  • ?Something else: Copy the error and paste it into Claude or ChatGPT. Describe what you were trying to do and what happened.