๐ŸŽฏ New! Master certifications with Performance-Based Questions (PBQ) โ€” realistic hands-on practice for CompTIA & Cisco exams!

The Ultimate Guide to Jellyfin and *ARR Stack: Complete Media Server Setup

Published on January 9, 2026


This is the most comprehensive guide for setting up a complete home media server stack using Jellyfin and the *ARR suite of applications. We cover everything from basic concepts to advanced configurations, with step-by-step instructions for Linux/Unix, Windows, and macOS.

NOTE: This guide follows best practices from TRaSH-Guides, the official community resource developed in collaboration with Radarr and Sonarr development teams.


Table of Contents

  1. Understanding the Complete Stack
  2. Key Concepts Before Starting
  3. Prerequisites and System Preparation
  4. Folder Structure and Hardlinks
  5. Installing Docker
  6. Complete Docker Compose Configuration
  7. Download Client: qBittorrent with VPN
  8. Indexer Manager: Prowlarr
  9. Cloudflare Bypass: FlareSolverr
  10. Movie Manager: Radarr
  11. TV Show Manager: Sonarr
  12. Music Manager: Lidarr
  13. Book Manager: Readarr
  14. Comic Manager: Mylar3
  15. Subtitle Manager: Bazarr
  16. Media Server: Jellyfin
  17. Request Management: Jellyseerr
  18. Notifications: Notifiarr
  19. Reverse Proxy: Nginx Proxy Manager
  20. Remote Access: Tailscale VPN
  21. TRaSH-Guides Integration: Recyclarr
  22. Connecting Everything Together
  23. Maintenance, Backups, and Updates
  24. Troubleshooting Common Issues

1. Understanding the Complete Stack

All Applications Covered

ApplicationPurposeDefault PortCategory
JellyfinFree, open-source media server8096Media Server
RadarrAutomated movie collection manager7878Media Manager
SonarrAutomated TV show collection manager8989Media Manager
LidarrAutomated music collection manager8686Media Manager
ReadarrAutomated ebook/audiobook manager8787Media Manager
Mylar3Automated comic book manager8090Media Manager
ProwlarrIndexer manager for all *arr apps9696Indexer
BazarrAutomated subtitle downloader6767Subtitle
JellyseerrMedia request management for Jellyfin5055Requests
qBittorrentTorrent download client8080Downloader
GluetunVPN container for secure downloading-VPN
FlareSolverrCloudflare protection bypass8191Proxy
NotifiarrUnified notifications (Discord/Telegram)5454Notifications
Nginx Proxy ManagerReverse proxy with SSL81Networking
TailscaleSecure remote access VPN-Networking
RecyclarrTRaSH-Guides sync tool-Automation

System Architecture Diagram

+-----------------------------------------------------------------------+
|                           USER ACCESS                                 |
|   +-----------+    +-----------+    +---------------------+           |
|   | Tailscale |    |    NPM    |    |     Jellyseerr      |           |
|   |  (Remote) |    |  (HTTPS)  |    |     (Requests)      |           |
|   +-----------+    +-----------+    +---------------------+           |
+-----------------------------------------------------------------------+
                              |
                              v
+-----------------------------------------------------------------------+
|                          MEDIA SERVER                                 |
|                        +-------------+                                |
|                        |   Jellyfin  |                                |
|                        +-------------+                                |
|                   +-------------------+                               |
|                   |      Bazarr       |                               |
|                   |   (Subtitles)     |                               |
|                   +-------------------+                               |
+-----------------------------------------------------------------------+
                              ^
                              | Hardlinks
+-----------------------------------------------------------------------+
|                    MEDIA MANAGERS (*ARR Apps)                         |
|  +--------+ +--------+ +--------+ +--------+ +--------+               |
|  | Radarr | | Sonarr | | Lidarr | |Readarr | | Mylar3 |               |
|  |(Movies)| |  (TV)  | |(Music) | |(Books) | |(Comics)|               |
|  +--------+ +--------+ +--------+ +--------+ +--------+               |
|                     +-------------+                                   |
|                     |  Recyclarr  | (TRaSH-Guides Sync)               |
|                     +-------------+                                   |
+-----------------------------------------------------------------------+
                              |
                              v
+-----------------------------------------------------------------------+
|                        INDEXER LAYER                                  |
|              +-----------------------------+                          |
|              |          Prowlarr           |                          |
|              |    (Indexer Management)     |                          |
|              +-----------------------------+                          |
|                          |                                            |
|              +-----------------------------+                          |
|              |       FlareSolverr          |                          |
|              |      (CF Bypass)            |                          |
|              +-----------------------------+                          |
+-----------------------------------------------------------------------+
                              |
                              v
+-----------------------------------------------------------------------+
|                       DOWNLOAD LAYER                                  |
|              +-----------------------------+                          |
|              |       Gluetun (VPN)         |                          |
|              +-----------------------------+                          |
|                          |                                            |
|              +-----------------------------+                          |
|              |       qBittorrent           |                          |
|              +-----------------------------+                          |
+-----------------------------------------------------------------------+
                              |
                              v
+-----------------------------------------------------------------------+
|                       NOTIFICATIONS                                   |
|                       (Notifiarr)                                     |
|                 Discord / Telegram / Email                            |
+-----------------------------------------------------------------------+

2. Key Concepts Before Starting

What are Hardlinks? Hardlinks allow a single file to appear in multiple locations without duplicating storage space. They point to the same data blocks on the disk. This is crucial for *ARR apps to โ€œimportโ€ files from your downloader to your media library without copying.

Benefits:

  • No duplicate storage usage
  • Instant โ€œmovesโ€ regardless of file size
  • Enables perma-seeding (torrents continue seeding while file is in library)

Requirements:

  • All paths must be on the same filesystem/partition
  • Supported filesystems: ext4, BTRFS (Linux), APFS (macOS), NTFS (Windows)
  • Docker containers must have consistent path mappings

What are Atomic Moves? Atomic moves relocate files instantly within the same filesystem without copying and deleting. Files appear to move instantaneously regardless of size.

IMPORTANT: If downloads and media are on separate drives, hardlinks wonโ€™t work. Use tools like mergerfs (Linux) to combine multiple drives into a single filesystem.

Testing Hardlinks:

# Create a test file
touch /data/test.txt

# Create a hardlink
ln /data/test.txt /data/media/test.txt

# Verify - same inode number means hardlink works
ls -i /data/test.txt /data/media/test.txt
# Both should show the same inode number (first column)

# Clean up
rm /data/test.txt /data/media/test.txt

Checking Filesystem:

# Linux/macOS - verify all paths are on same filesystem
df -h /data/torrents /data/media
# Both should show the same "Mounted on" location

# Windows - use Disk Management to verify same volume

Docker vs Native Installation

AspectDockerNative
ConsistencySame across all OSOS-specific tweaks needed
IsolationApps run in containersApps share system resources
UpdatesPull new imageManual package updates
ComplexitySimple YAML configMultiple config files
Resource UsageSlightly higherLower
RecommendedYesOnly if Docker unavailable

Hardware Requirements

ComponentMinimumRecommendedOptimal
CPU2-core 2GHz4-core 3GHz+6+ cores for heavy transcoding
RAM4GB8GB16GB+
OS Storage50GB SSD100GB SSD250GB NVMe
Media Storage1TB HDD4TB+ HDD arrayRAID array
Network100 MbpsGigabit LAN2.5Gbps
GPUNoneIntel iGPUNvidia for NVENC

Time Estimate

  • Basic setup: 2-3 hours
  • Full setup with all apps: 4-6 hours
  • Full setup + optimization: 6-8 hours

3. Prerequisites and System Preparation

3.1: Update Your Operating System

Updating ensures security patches and compatibility with the latest software.

Linux/Unix (Ubuntu/Debian)

# Open terminal (Ctrl+Alt+T)

# Update package lists - fetches latest available versions from repositories
sudo apt update

# Upgrade all packages - installs available updates
# -y flag automatically answers "yes" to all prompts
sudo apt upgrade -y

# Reboot to apply kernel updates if prompted
sudo reboot

Explanation:

  • sudo: Runs command with administrator privileges
  • apt: Advanced Package Tool - Debian/Ubuntu package manager
  • update: Refreshes the package index
  • upgrade: Installs newer versions of packages

macOS

  1. Click Apple menu โ†’ System Settings โ†’ General โ†’ Software Update
  2. Click Update Now if updates are available
  3. Restart when prompted

Alternatively, via Terminal:

# Check for updates
softwareupdate -l

# Install all available updates
sudo softwareupdate -i -a

# Reboot
sudo shutdown -r now

Windows

  1. Press Windows key + I to open Settings
  2. Navigate to Update & Security โ†’ Windows Update
  3. Click Check for updates
  4. Install all available updates
  5. Restart when prompted

Alternatively, via PowerShell (Admin):

# Install Windows Update module if needed
Install-Module PSWindowsUpdate -Force

# Check for updates
Get-WindowsUpdate

# Install all updates
Install-WindowsUpdate -AcceptAll -AutoReboot

3.2: Create Required Directories

A consistent folder structure is essential for hardlinks to work properly.

Linux/Unix

# Create base data directory with all required subdirectories
# mkdir: creates directories
# -p: creates parent directories if they don't exist, no error if existing
sudo mkdir -p /data/{torrents/{incomplete,complete/{movies,tv,music,books,comics}},usenet/{incomplete,complete/{movies,tv,music,books,comics}},media/{movies,tv,music,books,comics}}

# Create Docker config directories for each application
sudo mkdir -p /data/config/{jellyfin,radarr,sonarr,lidarr,readarr,mylar3,prowlarr,bazarr,jellyseerr,qbittorrent,gluetun,flaresolverr,notifiarr,npm}

# Set ownership to your user
# chown: changes file ownership
# -R: recursive (applies to all subdirectories)
# $USER:$USER: sets both user and group to current user
sudo chown -R $USER:$USER /data

# Verify your user ID and group ID (needed for Docker)
id -u  # Returns PUID (e.g., 1000)
id -g  # Returns PGID (e.g., 1000)

macOS

# Create directories in home folder (no sudo needed)
mkdir -p ~/data/{torrents/{incomplete,complete/{movies,tv,music,books,comics}},usenet/{incomplete,complete/{movies,tv,music,books,comics}},media/{movies,tv,music,books,comics}}

mkdir -p ~/data/config/{jellyfin,radarr,sonarr,lidarr,readarr,mylar3,prowlarr,bazarr,jellyseerr,qbittorrent,gluetun,flaresolverr,notifiarr,npm}

# Permissions are automatically set to your user

Windows (PowerShell as Administrator)

# Define base directory (use D: for secondary drive if preferred)
$base = "C:/data"

# Create all directories
$folders = @(
    "torrents/incomplete",
    "torrents/complete/movies",
    "torrents/complete/tv",
    "torrents/complete/music",
    "torrents/complete/books",
    "torrents/complete/comics",
    "usenet/incomplete",
    "usenet/complete/movies",
    "usenet/complete/tv",
    "usenet/complete/music",
    "usenet/complete/books",
    "usenet/complete/comics",
    "media/movies",
    "media/tv",
    "media/music",
    "media/books",
    "media/comics",
    "config/jellyfin",
    "config/radarr",
    "config/sonarr",
    "config/lidarr",
    "config/readarr",
    "config/mylar3",
    "config/prowlarr",
    "config/bazarr",
    "config/jellyseerr",
    "config/qbittorrent",
    "config/gluetun",
    "config/flaresolverr",
    "config/notifiarr",
    "config/npm"
)

foreach ($folder in $folders) {
    New-Item -ItemType Directory -Force -Path "$base/$folder"
}

# Set permissions - give your user full control
$acl = Get-Acl $base
$permission = $env:USERNAME, "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
Set-Acl $base $acl

WARNING: On Windows, hardlinks only work within the same NTFS volume. All data must be on the same drive letter.

3.3: Additional Prerequisites

Accounts Needed

  • Torrent Indexers: Sign up for private trackers or use public indexers
  • Usenet Provider: (Optional) NZBGet, SABnzbd compatible provider
  • VPN Provider: NordVPN, Mullvad, ProtonVPN, PIA, etc.
  • Domain Name: For HTTPS access via Nginx Proxy Manager
  • Dynamic DNS: If your IP changes (DuckDNS, No-IP, etc.)
  • Notifiarr Account: For notifications (free tier available)

Network Preparation

  • Note your serverโ€™s local IP address
  • Configure router to assign static IP (DHCP reservation)
  • Prepare port forwarding if accessing remotely without VPN

The folder structure was created in section 3.2 above. This structure is based on TRaSH-Guides recommendations and enables hardlinks to work properly between your download client and *arr applications.

Folder Structure Overview:

/data/
โ”œโ”€โ”€ torrents/
โ”‚   โ”œโ”€โ”€ incomplete/          # Downloads in progress
โ”‚   โ””โ”€โ”€ complete/
โ”‚       โ”œโ”€โ”€ movies/          # Completed movie torrents
โ”‚       โ”œโ”€โ”€ tv/              # Completed TV torrents
โ”‚       โ””โ”€โ”€ music/           # Completed music torrents
โ”œโ”€โ”€ media/
โ”‚   โ”œโ”€โ”€ movies/              # Final movie library (hardlinked)
โ”‚   โ”œโ”€โ”€ tv/                  # Final TV library (hardlinked)
โ”‚   โ””โ”€โ”€ music/               # Final music library (hardlinked)
โ””โ”€โ”€ config/                  # Application configurations

5. Installing Docker

Docker is the recommended installation method for all applications.

Linux (Ubuntu/Debian)

# Remove old Docker versions if present
sudo apt remove docker docker-engine docker.io containerd runc 2>/dev/null

# Install prerequisites
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

# Add Docker's official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Update package index and install Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Add your user to docker group (run Docker without sudo)
sudo usermod -aG docker $USER

# IMPORTANT: Log out and back in for group changes to take effect
# Or run: newgrp docker

# Start Docker and enable on boot
sudo systemctl start docker
sudo systemctl enable docker

# Verify installation
docker --version
docker compose version

Windows

  1. Enable WSL2 (Windows Subsystem for Linux):

    • Open Settings โ†’ Apps โ†’ Optional features โ†’ More Windows features
    • Check Windows Subsystem for Linux and Virtual Machine Platform
    • Restart your computer
  2. Install Ubuntu from Microsoft Store (search โ€œUbuntuโ€)

  3. Download Docker Desktop from docker.com

  4. Run installer, enable WSL2 backend when prompted

  5. Launch Docker Desktop and complete setup wizard

  6. Verify in PowerShell:

docker --version
docker compose version

macOS

  1. Download Docker Desktop from docker.com

  2. Open the .dmg file and drag Docker to Applications

  3. Launch Docker from Applications, grant permissions when prompted

  4. Wait for Docker to start (whale icon in menu bar)

  5. Verify in Terminal:

docker --version
docker compose version

6. Complete Docker Compose Configuration

Create the file docker-compose.yml in your docker directory.

  • Linux: /data/config/docker-compose.yml
  • macOS: ~/data/config/docker-compose.yml
  • Windows: C:\data\config\docker-compose.yml

TIP: Adjust PUID, PGID, TZ, and volume paths for your system. Find your PUID/PGID with id -u and id -g.

version: "3.9"

# Define common environment variables
x-environment: &default-env
  PUID: 1000
  PGID: 1000
  TZ: America/New_York

services:
  # ===========================================================================
  # VPN LAYER - Gluetun (All torrent traffic routed through this)
  # ===========================================================================
  gluetun:
    image: qmcgaw/gluetun:latest
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    ports:
      - 8080:8080     # qBittorrent Web UI
      - 6881:6881     # qBittorrent TCP
      - 6881:6881/udp # qBittorrent UDP
    environment:
      # === CHANGE THESE FOR YOUR VPN ===
      - VPN_SERVICE_PROVIDER=nordvpn
      - VPN_TYPE=wireguard
      - WIREGUARD_PRIVATE_KEY=YOUR_PRIVATE_KEY_HERE
      # For OpenVPN, use these instead:
      # - VPN_TYPE=openvpn
      # - OPENVPN_USER=your_username
      # - OPENVPN_PASSWORD=your_password
      - SERVER_COUNTRIES=Netherlands
      - TZ=America/New_York
    volumes:
      - /data/config/gluetun:/gluetun
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "-q", "--spider", "http://ipinfo.io"]
      interval: 30s
      timeout: 10s
      retries: 3

  # ===========================================================================
  # DOWNLOAD LAYER - qBittorrent
  # ===========================================================================
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    network_mode: "service:gluetun"
    environment:
      <<: *default-env
      WEBUI_PORT: 8080
    volumes:
      - /data/config/qbittorrent:/config
      - /data/torrents:/data/torrents
    depends_on:
      gluetun:
        condition: service_healthy
    restart: unless-stopped

  # ===========================================================================
  # INDEXER LAYER - Prowlarr
  # ===========================================================================
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      <<: *default-env
    ports:
      - 9696:9696
    volumes:
      - /data/config/prowlarr:/config
    restart: unless-stopped

  # ===========================================================================
  # CLOUDFLARE BYPASS - FlareSolverr
  # ===========================================================================
  flaresolverr:
    image: ghcr.io/flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    environment:
      - LOG_LEVEL=info
      - TZ=America/New_York
    ports:
      - 8191:8191
    restart: unless-stopped

  # ===========================================================================
  # MEDIA MANAGERS
  # ===========================================================================
  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      <<: *default-env
    ports:
      - 7878:7878
    volumes:
      - /data/config/radarr:/config
      - /data:/data
    restart: unless-stopped

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      <<: *default-env
    ports:
      - 8989:8989
    volumes:
      - /data/config/sonarr:/config
      - /data:/data
    restart: unless-stopped

  lidarr:
    image: lscr.io/linuxserver/lidarr:latest
    container_name: lidarr
    environment:
      <<: *default-env
    ports:
      - 8686:8686
    volumes:
      - /data/config/lidarr:/config
      - /data:/data
    restart: unless-stopped

  readarr:
    image: lscr.io/linuxserver/readarr:develop
    container_name: readarr
    environment:
      <<: *default-env
    ports:
      - 8787:8787
    volumes:
      - /data/config/readarr:/config
      - /data:/data
    restart: unless-stopped

  mylar3:
    image: lscr.io/linuxserver/mylar3:latest
    container_name: mylar3
    environment:
      <<: *default-env
    ports:
      - 8090:8090
    volumes:
      - /data/config/mylar3:/config
      - /data:/data
    restart: unless-stopped

  # ===========================================================================
  # SUBTITLE MANAGER - Bazarr
  # ===========================================================================
  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: bazarr
    environment:
      <<: *default-env
    ports:
      - 6767:6767
    volumes:
      - /data/config/bazarr:/config
      - /data/media:/data/media
    restart: unless-stopped

  # ===========================================================================
  # MEDIA SERVER - Jellyfin
  # ===========================================================================
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    environment:
      - TZ=America/New_York
    ports:
      - 8096:8096
      - 8920:8920
      - 7359:7359/udp
      - 1900:1900/udp
    volumes:
      - /data/config/jellyfin:/config
      - /data/config/jellyfin/cache:/cache
      - /data/media:/media:ro
    # Hardware transcoding (Intel)
    # devices:
    #   - /dev/dri:/dev/dri
    restart: unless-stopped

  # ===========================================================================
  # REQUEST MANAGEMENT - Jellyseerr
  # ===========================================================================
  jellyseerr:
    image: fallenbagel/jellyseerr:latest
    container_name: jellyseerr
    environment:
      - TZ=America/New_York
    ports:
      - 5055:5055
    volumes:
      - /data/config/jellyseerr:/app/config
    restart: unless-stopped

  # ===========================================================================
  # NOTIFICATIONS - Notifiarr
  # ===========================================================================
  notifiarr:
    image: golift/notifiarr:latest
    container_name: notifiarr
    hostname: media-server
    environment:
      - TZ=America/New_York
    ports:
      - 5454:5454
    volumes:
      - /data/config/notifiarr:/config
      - /var/run/utmp:/var/run/utmp:ro
    restart: unless-stopped

  # ===========================================================================
  # REVERSE PROXY - Nginx Proxy Manager
  # ===========================================================================
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    ports:
      - 80:80
      - 443:443
      - 81:81
    volumes:
      - /data/config/npm:/data
      - /data/config/npm/letsencrypt:/etc/letsencrypt
    restart: unless-stopped

Starting the Stack

# Navigate to config directory
cd /data/config

# Start all containers in detached mode
docker compose up -d

# View real-time logs
docker compose logs -f

# Check container status
docker compose ps

# Stop all containers
docker compose down

# Update all containers
docker compose pull && docker compose up -d

7. Download Client: qBittorrent with VPN

qBittorrent is a free, open-source BitTorrent client. When paired with Gluetun VPN container, all torrent traffic is securely routed through your VPN provider, protecting your privacy.

Initial Access

  1. Navigate to http://your-server-ip:8080
  2. Default credentials: admin / check logs with docker logs qbittorrent
  3. Change password immediately: Tools โ†’ Options โ†’ Web UI โ†’ Authentication

Essential Configuration

Downloads Tab

  • Default Save Path: /data/torrents/complete
  • Keep incomplete in: /data/torrents/incomplete
  • Enable: Append .!qB extension to incomplete files
  • Enable: Pre-allocate disk space

Categories Setup

Right-click Categories sidebar โ†’ Add category:

CategorySave Path
movies/data/torrents/complete/movies
tv/data/torrents/complete/tv
music/data/torrents/complete/music
books/data/torrents/complete/books
comics/data/torrents/complete/comics

Connection Tab

  • Listening Port: 6881
  • Enable: Use UPnP / NAT-PMP
  • Global max connections: 500
  • Per torrent max connections: 100

BitTorrent Tab

  • Encryption mode: Require encryption
  • Enable: DHT, PEX, LSD for better peer discovery
  • Seeding limits: Ratio 1.0 or 1440 minutes, then Pause

Advanced Tab

  • Enable: Ignore limits on local network for faster local transfers

Web UI Tab

  • Enable Web UI if not using Docker
  • Set port 8080
  • Bypass authentication for localhost (optional for *arr apps)

Port Forwarding

If behind a router, forward port 6881 TCP/UDP:

  1. Access router admin (usually http://192.168.1.1)
  2. Find Port Forwarding section
  3. Add rule: Port 6881 (TCP and UDP) โ†’ Your serverโ€™s local IP
  4. Save and test

Native Installation (Non-Docker)

Linux/Unix:

sudo apt install qbittorrent -y
# Launch via menu or command: qbittorrent
# Set download path to /data/torrents

macOS: Download from https://www.qbittorrent.org/download, install .dmg, launch. Set paths to ~/data/torrents.

Windows: Download installer from https://www.qbittorrent.org/download, run setup wizard. Set paths to C:\data\torrents.

VPN Integration (Alternative to Gluetun)

If not using Docker with Gluetun, configure VPN directly:

  1. Install OpenVPN or WireGuard
  2. Configure with your VPN providerโ€™s .ovpn file
  3. In qBittorrent: Connection โ†’ Proxy โ†’ SOCKS5 (if VPN provides)
  4. Better alternative: Use Gluetun container as shown above

Verify VPN Connection

# Check if traffic goes through VPN
docker exec gluetun wget -qO- https://ipinfo.io/ip

# Should show VPN IP, not your real IP

8. Indexer Manager: Prowlarr

Prowlarr is a unified indexer manager that synchronizes your torrent and Usenet indexers with all your *arr applications. Instead of manually configuring indexers in Radarr, Sonarr, Lidarr, and Readarr separately, Prowlarr manages them centrally and pushes configurations to all connected apps automatically.

  1. Navigate to http://your-server-ip:9696
  2. Set up authentication: Settings โ†’ General โ†’ Authentication โ†’ Forms
  3. Create username and strong password
  4. Note your API Key: Settings โ†’ General

Adding Indexers

  1. Go to Indexers โ†’ Add Indexer (+)
  2. Search for indexers (1337x, RARBG, etc.)
  3. Configure credentials if required
  4. Test connection โ†’ Save

Connecting to *arr Apps

  1. Settings โ†’ Apps โ†’ Add (+)
  2. Select application (Radarr, Sonarr, etc.)
  3. Prowlarr Server: http://prowlarr:9696
  4. API Key: From each appโ€™s Settings โ†’ General
  5. Sync Level: Full Sync
  6. Test โ†’ Save
  7. Click Sync App Indexers to push indexers

Native Installation (Non-Docker)

Linux:

# Download from https://prowlarr.servarr.com/
wget https://github.com/Prowlarr/Prowlarr/releases/latest/download/Prowlarr.develop.linux-core-x64.tar.gz
tar -xvzf Prowlarr*.tar.gz
cd Prowlarr
./Prowlarr

macOS/Windows: Download installers from https://prowlarr.servarr.com/ and run the setup wizard.


9. Cloudflare Bypass: FlareSolverr

FlareSolverr is a proxy server that solves Cloudflare and DDoS-Guard protection challenges. Many torrent indexers use Cloudflare to protect their sites, which can block automated access. FlareSolverr acts as a middleman, solving CAPTCHAs and challenges so Prowlarr can access these protected sites.

Configuration

For Cloudflare-protected indexers:

  1. Navigate to Prowlarr: http://your-server-ip:9696
  2. Settings โ†’ Indexers โ†’ Add under Indexer Proxies
  3. Select FlareSolverr
  4. Host: http://flaresolverr:8191
  5. Test โ†’ Save

After configuration, Prowlarr will automatically route requests for protected indexers through FlareSolverr.


10. Movie Manager: Radarr

Radarr is an automated movie collection manager that monitors for new releases, searches indexers, and downloads movies automatically. It manages your movie library with features like quality upgrades, custom formats for HDR/DolbyVision, and seamless integration with download clients.

Initial Configuration

  1. Navigate to http://your-server-ip:7878
  2. Set authentication: Settings โ†’ General โ†’ Authentication
  3. Note API Key for Prowlarr/Jellyseerr

Media Management

Settings โ†’ Media Management:

  • Rename Movies: Yes
  • Standard Movie Format: {Movie Title} ({Release Year}) {Quality Full}
  • Movie Folder Format: {Movie Title} ({Release Year})
  • Use Hardlinks instead of Copy: Yes
  • Root Folder: /data/media/movies

Download Client

Settings โ†’ Download Clients โ†’ Add:

  • Type: qBittorrent
  • Host: gluetun (container name)
  • Port: 8080
  • Username/Password: Your qBittorrent credentials
  • Category: movies
  • Test โ†’ Save

Quality Profiles

Use TRaSH-Guides profiles via Recyclarr (covered later) or manually:

  • Create profile: โ€œHD-1080pโ€ with cutoff at Bluray-1080p
  • Enable custom formats for HDR, DV, better releases

11. TV Show Manager: Sonarr

Sonarr is an automated TV show collection manager that monitors for new episodes, searches indexers, and downloads them automatically. It tracks release schedules, handles season packs, and upgrades quality when better versions become available.

Configuration

  1. Navigate to http://your-server-ip:8989
  2. Same setup pattern as Radarr

Media Management

  • Standard Episode Format: {Series Title} - S{season:00}E{episode:00} - {Episode Title} {Quality Full}
  • Season Folder Format: Season {season:00}
  • Series Folder Format: {Series Title}
  • Root Folder: /data/media/tv

Download Client

Same as Radarr but Category: tv


12. Music Manager: Lidarr

Lidarr is an automated music collection manager that monitors for new albums, searches indexers, and downloads music automatically. It organizes your library by artist and album, supports various audio formats, and integrates with MusicBrainz for metadata.

Quick Configuration

  • Port: 8686
  • Root Folder: /data/media/music
  • Category: music
  • Naming: {Artist Name}/{Album Title}/{track:00} - {Track Title}

13. Book Manager: Readarr

Readarr is an automated ebook and audiobook collection manager. It monitors for new releases from your favorite authors, searches indexers, and downloads books automatically. Supports both ebooks and audiobooks.

Quick Configuration

  • Port: 8787
  • Root Folder: /data/media/books
  • Category: books
  • Supports ebooks and audiobooks

14. Comic Manager: Mylar3

Mylar3 is an automated comic book collection manager that downloads comics, manages your library, and integrates with ComicVine for metadata. It tracks weekly releases and can automatically grab new issues as they become available.

Quick Configuration

  • Port: 8090
  • Root Folder: /data/media/comics
  • Category: comics
  • Integrates with ComicVine for metadata

15. Subtitle Manager: Bazarr

Bazarr is a companion application to Sonarr and Radarr that automatically finds and downloads subtitles for your media. It supports multiple subtitle providers and can match subtitles based on release name, quality, and language preferences.

Configuration

  1. Navigate to http://your-server-ip:6767
  2. Settings โ†’ Sonarr: Add API key and URL (http://sonarr:8989)
  3. Settings โ†’ Radarr: Add API key and URL (http://radarr:7878)

Subtitle Providers

Settings โ†’ Providers โ†’ Add:

  • OpenSubtitles.com (requires account)
  • Subscene
  • YIFY Subtitles

Languages

Settings โ†’ Languages:

  • Add preferred languages
  • Set hearing impaired preferences
  • Configure exclusions

16. Media Server: Jellyfin

Jellyfin is a free, open-source media server that streams your movies, TV shows, music, and books to any device. Unlike Plex or Emby, Jellyfin has no premium features behind a paywallโ€”everything is completely free.

Initial Setup

  1. Navigate to http://your-server-ip:8096
  2. Select language
  3. Create admin account
  4. Add libraries:
    • Movies: /media/movies (Type: Movies)
    • TV Shows: /media/tv (Type: Shows)
    • Music: /media/music (Type: Music)
    • Books: /media/books (Type: Books)

Hardware Transcoding (Intel QuickSync)

Hardware transcoding uses your CPUโ€™s integrated graphics (Intel QuickSync) or dedicated GPU to convert video formats on-the-fly for devices that canโ€™t play the original format. This dramatically reduces CPU usage during playback.

Dashboard โ†’ Playback โ†’ Transcoding:

  • Enable Intel QuickSync
  • Enable hardware decoding for all supported formats
  • Enable VAAPI (Linux)

Networking

Dashboard โ†’ Networking:

  • Enable: Allow remote connections
  • Set Base URL if using reverse proxy (e.g., /jellyfin)
  • Add known proxies if using NPM

DLNA

DLNA (Digital Living Network Alliance) allows Jellyfin to stream media to DLNA-compatible devices like smart TVs and game consoles without requiring the Jellyfin app.

Dashboard โ†’ DLNA:

  • Enable if you need DLNA streaming to smart TVs

Native Installation (Non-Docker)

Linux:

sudo apt install jellyfin
# Access at http://localhost:8096

macOS: Not officially supported. Use Docker instead.

Windows: Download MSI installer from https://jellyfin.org/downloads/ and run setup wizard.


17. Request Management: Jellyseerr

Jellyseerr is a fork of Overseerr designed specifically for Jellyfin. It allows users to request movies and TV shows through a beautiful interface, which then integrates with Radarr and Sonarr to automatically download the content.

Initial Setup

  1. Navigate to http://your-server-ip:5055
  2. Sign in with Jellyfin option
  3. Enter Jellyfin URL: http://jellyfin:8096
  4. Authenticate with admin credentials
  5. Import users from Jellyfin

Connect to *arr Apps

Settings โ†’ Services:

  • Add Radarr: URL, API Key, quality profile, root folder
  • Add Sonarr: Same configuration

18. Notifications: Notifiarr

Notifiarr is a unified notification service that connects your *arr applications to Discord, Telegram, Slack, email, and other services. It provides rich notifications for downloads, upgrades, and system health.

Setup

  1. Create account at notifiarr.com
  2. Get API key from dashboard
  3. Configure in container or config file

Discord Integration

  1. Create Discord webhook in your server
  2. Add webhook URL in Notifiarr
  3. Configure notification triggers for each *arr app

19. Reverse Proxy: Nginx Proxy Manager

Nginx Proxy Manager (NPM) provides a web-based interface for managing Nginx reverse proxy configurations with automatic SSL certificate generation via Letโ€™s Encrypt. It enables secure HTTPS access to all your services.

Initial Setup

  1. Navigate to http://your-server-ip:81
  2. Default login: admin@example.com / changeme
  3. Change credentials immediately

Adding Proxy Hosts

For each application:

  1. Hosts โ†’ Proxy Hosts โ†’ Add
  2. Domain: jellyfin.yourdomain.com
  3. Forward Hostname/IP: jellyfin (container name)
  4. Forward Port: 8096
  5. Enable Websockets Support
  6. SSL tab โ†’ Request new SSL Certificate
  7. Enable Force SSL, HTTP/2

DNS Configuration

Point A record to your public IP for each subdomain.


20. Remote Access: Tailscale VPN

Tailscale is a zero-config VPN that creates a secure mesh network between your devices. It allows you to access your media server from anywhere in the world without exposing ports to the internet or setting up complex firewall rules.

Installation

Linux

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Windows/macOS

Download from tailscale.com/download

Configuration

  1. Authenticate via browser
  2. Install on all client devices
  3. Access Jellyfin via Tailscale IP: 100.x.x.x:8096

Jellyfin Integration

Dashboard โ†’ Networking โ†’ Known Proxies:

  • Add Tailscale subnet: 100.64.0.0/10

21. TRaSH-Guides Integration: Recyclarr

Recyclarr automatically syncs quality profiles, custom formats, and recommended settings from TRaSH-Guides to your Radarr and Sonarr instances. It ensures youโ€™re always using the best practices for media quality.

Installation

# Via pip
pip install recyclarr

# Or Docker
docker run --rm -v /data/config/recyclarr:/config ghcr.io/recyclarr/recyclarr:latest

Configuration

Create ~/.config/recyclarr/recyclarr.yml:

radarr:
  main:
    base_url: http://localhost:7878
    api_key: YOUR_RADARR_API_KEY
    quality_profiles:
      - name: HD-1080p

sonarr:
  main:
    base_url: http://localhost:8989
    api_key: YOUR_SONARR_API_KEY
    quality_profiles:
      - name: HD-1080p

Sync

recyclarr sync

22. Connecting Everything Together

Connection Summary

FromToMethod
ProwlarrAll *arr appsAPI Sync
All *arr appsqBittorrentDownload Client
BazarrRadarr, SonarrAPI
JellyseerrRadarr, Sonarr, JellyfinAPI
NotifiarrAll appsWebhooks

API Key Locations

All apps: Settings โ†’ General โ†’ Security โ†’ API Key


23. Maintenance, Backups, and Updates

Backup Strategy

#!/bin/bash
# Backup script
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

docker compose stop
tar -czf $BACKUP_DIR/configs.tar.gz /data/config/
docker compose start

# Keep 7 days
find /backup -type d -mtime +7 -exec rm -rf {} ;

Updating Containers

cd /data/config
docker compose pull
docker compose up -d
docker image prune -f

24. Troubleshooting Common Issues

Container Wonโ€™t Start

docker logs container_name

Permission Errors

Verify PUID/PGID match your user: id $USER

VPN Not Working

docker logs gluetun
docker exec gluetun wget -qO- https://ipinfo.io

Downloads Not Moving

  1. Check path mappings are consistent
  2. Verify PUID/PGID permissions
  3. Ensure categories match

Getting Help


Quick Reference

ServiceURLPort
Jellyfinhttp://server:80968096
qBittorrenthttp://server:80808080
Prowlarrhttp://server:96969696
Radarrhttp://server:78787878
Sonarrhttp://server:89898989
Lidarrhttp://server:86868686
Readarrhttp://server:87878787
Mylar3http://server:80908090
Bazarrhttp://server:67676767
Jellyseerrhttp://server:50555055
FlareSolverrhttp://server:81918191
Notifiarrhttp://server:54545454
NPM Adminhttp://server:8181

Conclusion

You now have a complete automated media server with:

  • Jellyfin streaming your media
  • Radarr/Sonarr/Lidarr/Readarr/Mylar3 automating collection
  • Prowlarr managing all indexers
  • Bazarr handling subtitles
  • Jellyseerr for media requests
  • qBittorrent + Gluetun for secure downloads
  • FlareSolverr bypassing Cloudflare
  • Notifiarr for notifications
  • NPM for HTTPS access
  • Tailscale for secure remote access
  • Recyclarr syncing TRaSH-Guides best practices

Happy streaming! ๐ŸŽฌ๐ŸŽต๐Ÿ“š

Comments

Sign in to join the discussion!

Your comments help others in the community.