*Arr Stack: Complete Media Automation Guide
Master Sonarr, Radarr, and Prowlarr for automated media management. From setup to AI integration.
The *arr stack is a collection of media management applications that automate the entire process of searching, downloading, organizing, and managing your media library. This comprehensive guide will walk you through deploying Sonarr, Radarr, Prowlarr, and related tools to create a fully automated media pipeline.
What is the *arr Stack?
The *arr ecosystem consists of specialized applications for different media types, all built on a common architecture. These tools monitor your wanted content, search for releases, download them automatically, organize files with proper naming, and integrate with your media server.
Core Components
Sonarr:
- TV show automation
- Episode tracking and calendar
- Quality profiles and upgrades
- Season pack handling
- Series monitoring
Radarr:
- Movie automation
- Release monitoring
- Quality management
- Collection support
- Multi-format handling
Prowlarr:
- Unified indexer management
- Searches across all trackers
- Syncs to Sonarr/Radarr automatically
- Built-in search capabilities
- Indexer testing and stats
Supporting Tools:
- Lidarr: Music automation
- Readarr: Books and comics
- Bazarr: Subtitle automation
- Overseerr/Jellyseerr: User request management
Why Use the *arr Stack?
Automation:
- Hands-free media acquisition
- Automatic quality upgrades
- Episode/movie release monitoring
- Proper file organization
- Integration with download clients
Quality Control:
- Custom quality profiles
- Preferred word scoring
- Size limits and restrictions
- Format preferences (x265, HDR, etc.)
- Release group preferences
Integration:
- Works with Plex, Jellyfin, Emby
- Supports multiple download clients
- Webhook notifications
- API for custom automation
- Metadata management
Prerequisites
Before starting, ensure you have:
- Docker and Docker Compose installed
- Download client configured (qBittorrent, Transmission, SABnzbd, NZBGet)
- Media server running (Plex or Jellyfin)
- Indexer accounts (private trackers or Usenet indexers)
- At least 4GB RAM available
- Storage for media library
Understanding the Workflow
The *arr automation workflow:
1. You add wanted movie/show to Radarr/Sonarr
2. Prowlarr searches configured indexers
3. Release found matching quality profile
4. Sent to download client (qBittorrent, etc.)
5. Download completes
6. *arr imports and renames file
7. Moved to media library with proper structure
8. Media server (Plex/Jellyfin) notified
9. Library scanned and metadata fetched
10. Content available for streaming Directory Structure
Create organized directories for the entire stack:
# Create application config directories
mkdir -p /opt/arr-stack/{sonarr,radarr,prowlarr,bazarr,overseerr}
# Create media directories
mkdir -p /media/{tv,movies,downloads}
# Create download client subdirectories
mkdir -p /media/downloads/{complete,incomplete}
# Set ownership
sudo chown -R $USER:$USER /opt/arr-stack
sudo chown -R $USER:$USER /media Directory Explanation:
/opt/arr-stack/*: Application configurations and databases/media/tv: Final TV show library/media/movies: Final movie library/media/downloads/incomplete: Active downloads/media/downloads/complete: Completed downloads awaiting import
Docker Compose Configuration
Create /opt/arr-stack/docker-compose.yml:
version: '3.8'
services:
prowlarr:
image: linuxserver/prowlarr:latest
container_name: prowlarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /opt/arr-stack/prowlarr:/config
ports:
- 9696:9696
sonarr:
image: linuxserver/sonarr:latest
container_name: sonarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /opt/arr-stack/sonarr:/config
- /media/tv:/tv
- /media/downloads:/downloads
ports:
- 8989:8989
radarr:
image: linuxserver/radarr:latest
container_name: radarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /opt/arr-stack/radarr:/config
- /media/movies:/movies
- /media/downloads:/downloads
ports:
- 7878:7878
bazarr:
image: linuxserver/bazarr:latest
container_name: bazarr
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /opt/arr-stack/bazarr:/config
- /media/tv:/tv
- /media/movies:/movies
ports:
- 6767:6767
overseerr:
image: sctx/overseerr:latest
container_name: overseerr
restart: unless-stopped
environment:
- LOG_LEVEL=info
- TZ=America/New_York
volumes:
- /opt/arr-stack/overseerr:/app/config
ports:
- 5055:5055
qbittorrent:
image: linuxserver/qbittorrent:latest
container_name: qbittorrent
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- WEBUI_PORT=8080
volumes:
- /opt/arr-stack/qbittorrent:/config
- /media/downloads:/downloads
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp Configuration Notes:
- Replace
PUIDandPGIDwith your user ID (id -uandid -g) - Update
TZto your timezone - All apps use LinuxServer.io images for consistency
- Shared
/downloadsdirectory enables atomic moves
Deployment
Start the entire stack:
cd /opt/arr-stack
docker-compose up -d Verify all containers running:
docker-compose ps All services should show “Up” status.
qBittorrent Configuration
Configure the download client first, as *arr apps depend on it.
Initial Setup
Access qBittorrent at
http://YOUR-SERVER-IP:8080Default login:
- Username:
admin - Password: Check logs:
docker logs qbittorrent | grep "temporary password"
- Username:
Change password immediately:
- Tools → Options → Web UI → Authentication
- Set new password
- Click Save
Download Settings
Tools → Options → Downloads:
- Default Save Path:
/downloads/incomplete - Keep incomplete torrents in:
/downloads/incomplete - Copy .torrent files to: Leave blank
- Copy .torrent files for finished downloads to: Leave blank
Category Settings: Create categories for organization:
- Right-click in left sidebar → Add category
- Add categories:
sonarrwith save path/downloads/complete/sonarrradarrwith save path/downloads/complete/radarr
Connection Settings:
- Port used for incoming connections: 6881
- Enable UPnP/NAT-PMP: Enabled
- Use proxy for peer connections: Disabled (unless using VPN)
Speed Settings:
- Global upload rate limit: 1024 KiB/s (adjust for your connection)
- Alternative rate limits: Configure if desired
BitTorrent Settings:
- Privacy:
- Enable DHT: Enabled
- Enable PeX: Enabled
- Enable Local Peer Discovery: Enabled
- Seeding Limits:
- When ratio reaches: 2.0 (or per tracker rules)
- Then: Pause torrent
Click Save at bottom.
Prowlarr Configuration
Prowlarr manages all indexers and syncs them to Sonarr/Radarr automatically.
Initial Setup
- Access Prowlarr at
http://YOUR-SERVER-IP:9696 - Complete the setup wizard
Adding Indexers
Add Public Indexers (for testing):
- Indexers → Add Indexer
- Search for indexer name (e.g., “1337x”, “RARBG alternatives”)
- Configure:
- Name: Keep default
- Enable RSS Sync: Checked
- Enable Automatic Search: Checked
- Enable Interactive Search: Checked
- Click Test then Save
Add Private Trackers:
- Indexers → Add Indexer
- Find your tracker
- Configure:
- Username/Password or API key
- Cookie if required
- Categories to search
- Test and save
Recommended Indexers (if you have access):
- Private: TorrentLeech, IPTorrents, PrivateHD
- Public: 1337x, EZTV, YTS
- Usenet: NZBGeek, NZBPlanet, DrunkenSlug
Configure Apps
Connect Prowlarr to Sonarr and Radarr:
Settings → Apps → Add Application:
For Sonarr:
- Select Sonarr
- Configuration:
- Sync Level: Full Sync
- Prowlarr Server:
http://localhost:9696 - Sonarr Server:
http://sonarr:8989 - API Key: Get from Sonarr (Settings → General → Security)
- Click Test then Save
For Radarr:
- Select Radarr
- Configuration:
- Sync Level: Full Sync
- Prowlarr Server:
http://localhost:9696 - Radarr Server:
http://radarr:7878 - API Key: Get from Radarr (Settings → General → Security)
- Click Test then Save
Prowlarr will now automatically sync all indexers to both apps.
Sonarr Configuration
Sonarr handles TV show automation.
Initial Setup
- Access Sonarr at
http://YOUR-SERVER-IP:8989 - Complete setup wizard
Download Client Configuration
Settings → Download Clients → Add:
Select qBittorrent:
- Name: qBittorrent
- Enable: Checked
- Host:
qbittorrent - Port: 8080
- Username: admin
- Password: Your qBittorrent password
- Category:
sonarr - Initial State: Start
- Sequential Order: Disabled
- First and Last First: Disabled
Click Test then Save.
Media Management
Settings → Media Management:
Episode Naming:
- Rename Episodes: Checked
- Replace Illegal Characters: Checked
Standard Episode Format:
{Series Title} - S{season:00}E{episode:00} - {Episode Title} {Quality Full} Daily Episode Format:
{Series Title} - {Air-Date} - {Episode Title} {Quality Full} Anime Episode Format:
{Series Title} - S{season:00}E{episode:00} - {Episode Title} Series Folder Format:
{Series Title} ({Series Year}) Season Folder Format:
Season {season:00} Multi-Episode Style: Scene
Root Folders:
- Click Add Root Folder
- Path:
/tv - Click OK
File Management:
- Unmonitor Deleted Episodes: Checked
- Download Propers and Repacks: Do Not Prefer
- Analyse video files: Checked
- Change File Date: None
- Recycling Bin: Leave blank (or set if desired)
Permissions:
- Set Permissions: Checked (if needed)
- chmod Folder: 755
- chmod Group: Your group
Click Save Changes.
Quality Profiles
Settings → Profiles → Quality Profiles:
Create “HD-1080p” Profile:
- Click + to add new profile
- Name: HD-1080p
- Upgrades Allowed: Checked
- Upgrade Until: Bluray-1080p
- Qualities (in order):
- Bluray-1080p (Checked)
- WEB-1080p (Checked)
- HDTV-1080p (Checked)
- Bluray-720p (Unchecked)
- WEB-720p (Unchecked)
- Click Save
Create “Any” Profile (for testing):
- Name: Any
- Upgrades Allowed: Checked
- Check all quality options
- Click Save
Custom Formats (Optional)
For advanced quality control:
Settings → Profiles → Custom Formats:
Create formats for:
- Preferred release groups
- HDR/DV content
- x265/HEVC encoding
- Audio quality (Atmos, DTS-X)
Example: Prefer x265:
- Click +
- Name: x265
- Add condition:
- Release Title contains:
x265|hevc
- Release Title contains:
- Save
Then in Quality Profile:
- Custom Format Score: x265 = 50 points
Connect to Media Server
Settings → Connect → Add:
For Plex:
- Select Plex Media Server
- Configuration:
- Host: YOUR-PLEX-IP
- Port: 32400
- Auth Token: Get from Plex account
- Update Library: Checked
- Test and save
For Jellyfin:
- Select Emby/Jellyfin
- Configuration:
- Host: YOUR-JELLYFIN-IP
- Port: 8096
- API Key: From Jellyfin dashboard
- Update Library: Checked
- Test and save
Radarr Configuration
Radarr handles movie automation with similar configuration to Sonarr.
Initial Setup
- Access Radarr at
http://YOUR-SERVER-IP:7878 - Complete setup wizard
Download Client Configuration
Settings → Download Clients → Add → qBittorrent:
- Name: qBittorrent
- Host:
qbittorrent - Port: 8080
- Username: admin
- Password: Your qBittorrent password
- Category:
radarr
Test and save.
Media Management
Settings → Media Management:
Movie Naming:
- Rename Movies: Checked
- Replace Illegal Characters: Checked
Standard Movie Format:
{Movie Title} ({Release Year}) {Quality Full} Movie Folder Format:
{Movie Title} ({Release Year}) Root Folders:
- Add Root Folder:
/movies
File Management:
- Unmonitor Deleted Movies: Checked
- Download Propers and Repacks: Do Not Upgrade Automatically
- Analyse video files: Checked
- Change File Date: None
Click Save Changes.
Quality Profiles
Settings → Profiles:
Create “HD” Profile:
- Name: HD
- Upgrades Allowed: Checked
- Upgrade Until: Bluray-1080p
- Minimum Custom Format Score: 0
- Qualities:
- Bluray-1080p
- WEB-1080p
- Bluray-720p
- WEB-720p
Create “4K” Profile (if desired):
- Name: 4K
- Upgrade Until: Bluray-2160p
- Qualities:
- Bluray-2160p
- WEB-2160p
Custom Formats
Import community-maintained formats from TRaSH Guides:
Settings → Profiles → Custom Formats:
Common formats to create:
- x265: Prefer HEVC encoding
- REMUX: Prefer highest quality
- HDR: HDR content preference
- DV: Dolby Vision preference
Example Custom Format JSON (x265):
{
"name": "x265",
"includeCustomFormatWhenRenaming": false,
"specifications": [{
"name": "x265",
"implementation": "ReleaseTitleSpecification",
"negate": false,
"required": true,
"fields": {
"value": "\\b(x265|h265|hevc)\\b"
}
}]
} Connect to Media Server
Same as Sonarr - connect to Plex or Jellyfin.
Bazarr Configuration
Bazarr automates subtitle downloads for your media.
Initial Setup
- Access Bazarr at
http://YOUR-SERVER-IP:6767 - Complete setup wizard
Connect to Sonarr
Settings → Sonarr:
- Enabled: Checked
- Address:
http://sonarr:8989 - API Key: From Sonarr settings
- Minimum Score: 90% (adjust as needed)
- Download Only Monitored: Checked
Test connection.
Connect to Radarr
Settings → Radarr:
- Enabled: Checked
- Address:
http://radarr:7878 - API Key: From Radarr settings
- Minimum Score: 90%
- Download Only Monitored: Checked
Test connection.
Configure Subtitle Providers
Settings → Providers:
Add OpenSubtitles:
- Click Add
- Select OpenSubtitles.com
- Username: Your account
- Password: Your password
- Enabled: Checked
Add Subscene (no account needed):
- Click Add
- Select Subscene
- Enabled: Checked
Priority: Drag to arrange provider priority.
Language Settings
Settings → Languages:
Languages Filter:
- Add desired languages (e.g., English, Spanish)
Languages Profiles: Create profile:
- Name: Default
- Languages: English
- Enabled: Checked
Default Settings:
- Series: Default profile
- Movies: Default profile
Automatic Search
Settings → Scheduler:
- Search and Upgrade Subtitles: Daily at 3 AM
- Sync with Sonarr/Radarr: Every 6 hours
Overseerr Configuration
Overseerr provides a user-friendly request interface.
Initial Setup
- Access Overseerr at
http://YOUR-SERVER-IP:5055 - Sign in with Plex account (or Jellyfin if using Jellyseerr)
Connect to Plex/Jellyfin
Settings → Plex:
- Hostname or IP: YOUR-PLEX-IP
- Port: 32400
- Auth Token: Automatic after sign-in
- Libraries: Select libraries to import
Connect to Sonarr
Settings → Services → Sonarr:
- Default Server: Checked
- 4K Server: Unchecked
- Server Name: Sonarr
- Hostname or IP:
sonarr - Port: 8989
- API Key: From Sonarr
- URL Base: Leave blank
- Quality Profile: HD-1080p
- Root Folder: /tv
- Language Profile: English
- Tags: Leave blank
- Anime Quality Profile: HD-1080p (if different)
- Season Folders: Enabled
- Enable Scan: Enabled
- Enable Automatic Search: Enabled
Test and save.
Connect to Radarr
Settings → Services → Radarr:
- Default Server: Checked
- Server Name: Radarr
- Hostname or IP:
radarr - Port: 7878
- API Key: From Radarr
- Quality Profile: HD
- Root Folder: /movies
- Minimum Availability: Announced
- Tags: Leave blank
- Enable Scan: Enabled
- Enable Automatic Search: Enabled
Test and save.
User Management
Settings → Users:
Permissions: Configure what users can do:
- Request: Allow users to request content
- Auto-approve requests: Enable for trusted users
- Request limit: Set per week/month
- Manage requests: Admin only
Notifications: Configure Discord, Email, Telegram, etc. for request updates.
Adding Content
Adding a TV Show to Sonarr
- Sonarr → Series → Add Series
- Search for show name
- Select correct show
- Configure:
- Root Folder: /tv
- Monitor: All Episodes (or specific seasons)
- Quality Profile: HD-1080p
- Series Type: Standard (or Daily/Anime)
- Season Folder: Checked
- Tags: Optional
- Click Add
Sonarr will:
- Search for all monitored episodes
- Send to download client
- Import when complete
- Notify media server
Adding a Movie to Radarr
- Radarr → Movies → Add Movie
- Search for movie title
- Select correct movie
- Configure:
- Root Folder: /movies
- Monitor: Movie Only
- Minimum Availability: Announced (or Released)
- Quality Profile: HD
- Tags: Optional
- Click Add
Radarr will search and download automatically.
Using Overseerr
User Experience:
- User accesses Overseerr
- Searches for movie/show
- Clicks “Request”
- Optional: Adds comment
- Submits request
Admin Workflow:
- Receives notification
- Reviews request (if manual approval)
- Approves
- Sonarr/Radarr automatically handle download
- User notified when available
Quality Management
Understanding Quality Profiles
Quality profiles define acceptable formats and upgrade behavior.
Components:
- Allowed Qualities: Which formats to accept
- Upgrade Until: Stop upgrading at this quality
- Custom Format Scores: Prefer specific attributes
Example Profile Structure:
HD-1080p Profile:
- Qualities Allowed:
1. Bluray-1080p (preferred)
2. WEB-1080p
3. HDTV-1080p
- Upgrade Until: Bluray-1080p
- Custom Formats:
- REMUX: +100
- x265: +50
- HDR: +25 Custom Format Scoring
Assign points to prefer certain releases:
Positive Scores (prefer):
- +100: REMUX (highest quality)
- +50: Preferred release groups
- +25: HDR/DV content
- +10: x265 (smaller files)
Negative Scores (avoid):
- -100: Known bad release groups
- -50: Hardcoded subtitles
- -25: Low quality encodes
Release Profiles (Legacy)
For older Sonarr/Radarr versions:
Preferred Words:
AMZN: 10
NF: 10
DSNP: 10
HMAX: 10 Must Contain: Optional restrictions
Must Not Contain:
YIFY
CAM
TS Advanced Configuration
Hardlinks vs. Copy
Hardlinks (recommended):
- Instant file “move”
- No duplicate disk space
- Same file, multiple paths
- Requires source and destination on same filesystem
Configure in Media Management:
- Use Hardlinks instead of Copy: Checked
Ensure same filesystem:
df /media/downloads /media/tv /media/movies
# All should show same device Import Lists
Automatically add content from external sources.
Sonarr Import Lists:
Trakt List:
- Settings → Import Lists → Add
- Select Trakt List
- Configure:
- Authenticate with Trakt
- List URL or username/list
- Quality Profile: HD-1080p
- Monitor: All Episodes
- Enable and save
Radarr Import Lists:
Trakt List:
- Settings → Lists → Add
- Select Trakt List
- Configure list and quality profile
- Enable and save
Lists sync periodically and add new content automatically.
Custom Scripts
Execute scripts on import for advanced workflows.
Example: Discord Notification:
Create /opt/arr-stack/scripts/notify-discord.sh:
#!/bin/bash
WEBHOOK_URL="YOUR-DISCORD-WEBHOOK-URL"
curl -X POST "$WEBHOOK_URL" -H "Content-Type: application/json" -d "{
"content": "New content added!",
"embeds": [{
"title": "$sonarr_series_title - $sonarr_episodefile_episodetitles",
"description": "Season $sonarr_episodefile_seasonnumber Episode $sonarr_episodefile_episodenumbers",
"color": 3447003
}]
}" Make executable:
chmod +x /opt/arr-stack/scripts/notify-discord.sh Configure in Sonarr:
- Settings → Connect → Add → Custom Script
- Path:
/config/scripts/notify-discord.sh - Triggers: On Download, On Import
- Save
VPN Integration
Route download client through VPN for privacy.
Update docker-compose.yml:
services:
vpn:
image: qmcgaw/gluetun:latest
container_name: vpn
cap_add:
- NET_ADMIN
environment:
- VPN_SERVICE_PROVIDER=nordvpn
- OPENVPN_USER=your_username
- OPENVPN_PASSWORD=your_password
- SERVER_COUNTRIES=Netherlands
ports:
- 8080:8080 # qBittorrent
- 6881:6881
- 6881:6881/udp
qbittorrent:
image: linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode: "service:vpn"
depends_on:
- vpn
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /opt/arr-stack/qbittorrent:/config
- /media/downloads:/downloads qBittorrent now routes through VPN while *arr apps remain accessible.
Monitoring and Maintenance
Health Checks
All *arr apps include health check systems.
Check Sonarr Health:
- System → Status
- Review warnings/errors
- Address issues as needed
Common Issues:
- Indexers failing: Update credentials
- Download client unreachable: Check connection
- Disk space low: Clear old downloads
- Lists unavailable: Verify API keys
Queue Management
Monitor Active Downloads:
Sonarr/Radarr → Queue shows:
- Currently downloading
- Import pending
- Warnings (slow download, stalled, etc.)
Manual Intervention:
- Remove from queue: Red X icon
- Force import: Refresh icon
- Search manually: Magnifying glass icon
Database Maintenance
Backup Databases:
# Stop containers
cd /opt/arr-stack
docker-compose down
# Backup configs
tar -czf arr-backup-$(date +%Y%m%d).tar.gz /opt/arr-stack/{sonarr,radarr,prowlarr,bazarr,overseerr}
# Restart
docker-compose up -d Schedule Regular Backups:
# Add to crontab
0 3 * * 0 /opt/scripts/backup-arr-stack.sh Updating Applications
Update All Containers:
cd /opt/arr-stack
docker-compose pull
docker-compose up -d Containers automatically restart with new versions.
Check for Updates: Each app shows update notifications in System → Updates.
Troubleshooting
Common Issues
Issue: Downloads Not Starting
Diagnostics:
- Check Prowlarr indexer status
- Verify download client connection
- Review queue for errors
Solutions:
- Test indexers in Prowlarr
- Verify qBittorrent accessible
- Check API keys correct
- Review category configuration
Issue: Failed Imports
Diagnostics:
- Check Activity → Queue for errors
- Review file permissions
- Verify root folder paths
Solutions:
- Fix file ownership:
chown -R 1000:1000 /media - Check paths match between containers
- Enable “Unmonitor Deleted Episodes/Movies”
- Manually import from Manual Import
Issue: No Search Results
Diagnostics:
- Test indexers in Prowlarr
- Check if content available
- Review quality profile restrictions
Solutions:
- Add more indexers
- Lower quality profile requirements
- Check custom format scores
- Verify release group not blocked
Issue: Duplicate Downloads
Solutions:
- Settings → Indexers → Advanced
- Retention: Set appropriately (1440+ for Usenet)
- RSS Sync Interval: 30 minutes
- Prefer Indexer Flags: Enabled
Issue: Subtitles Not Downloading
Diagnostics:
- Check Bazarr connection to Sonarr/Radarr
- Verify subtitle provider credentials
- Review minimum score settings
Solutions:
- Lower minimum score to 80%
- Add more subtitle providers
- Manually search in Bazarr
- Check language profile configuration
Performance Optimization
Resource Management
Adjust Container Resources:
Update docker-compose.yml:
services:
sonarr:
# ... other config
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 512M Indexer Optimization
Reduce API Calls:
- Settings → Indexers
- RSS Sync Interval: 30-60 minutes
- Search Limit: 100 results
Priority Ordering: Drag indexers to prioritize fastest/most reliable.
Database Optimization
Sonarr/Radarr:
- Automatic database backup and optimization on restart
- Keep database on SSD for faster queries
- Limit series/movie history to 30 days
Settings → General → Advanced:
- Maximum Days in History: 30
- Cleanup backup folder: Checked
Security Best Practices
Authentication
Enable Authentication:
Each *arr app:
- Settings → General → Security
- Authentication: Forms (Login page)
- Username: admin
- Password: Strong password
API Key Protection:
- Regenerate API keys periodically
- Don’t share keys
- Use environment variables in scripts
Network Security
Reverse Proxy:
Use Nginx/Caddy for SSL:
server {
listen 443 ssl http2;
server_name sonarr.yourdomain.com;
ssl_certificate /etc/ssl/certs/cert.pem;
ssl_certificate_key /etc/ssl/private/key.pem;
location / {
proxy_pass http://localhost:8989;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
} Firewall Rules:
# Allow only local access
sudo ufw allow from 192.168.1.0/24 to any port 8989
sudo ufw allow from 192.168.1.0/24 to any port 7878
sudo ufw allow from 192.168.1.0/24 to any port 9696
# Public access only via reverse proxy
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp Download Client Security
qBittorrent:
- Enable authentication
- Disable UPnP if not needed
- Use VPN for torrent traffic
- Set IP binding to VPN interface
Verification: Visit https://ipleak.net while downloading to verify VPN working.
Integration Examples
Webhook Notifications
Discord Webhook:
Settings → Connect → Webhook:
{
"webhook": "https://discord.com/api/webhooks/YOUR-WEBHOOK",
"username": "Sonarr",
"avatar": "https://i.imgur.com/yourimage.png"
} Triggers:
- On Grab
- On Import
- On Upgrade
- On Health Issue
Plex Integration
Complete integration creates seamless experience:
Sonarr/Radarr → Plex:
- Automatic library updates
- Metadata refresh triggered
- Continue watching updated
Overseerr → Plex:
- Use Plex authentication
- Show Plex availability
- Link to Plex player
Home Assistant Integration
Monitor and control via Home Assistant:
Add to configuration.yaml:
sensor:
- platform: sonarr
api_key: YOUR_API_KEY
host: 192.168.1.100
port: 8989
monitored_conditions:
- series
- upcoming
- wanted
- queue Create automations based on queue status, disk space, etc.
Best Practices
Content Organization
Consistent Naming:
- Let *arr apps handle all renaming
- Never manually rename files
- Use standard naming templates
- Enable season folders
Library Structure:
/media/
├── tv/
│ ├── Breaking Bad (2008)/
│ │ └── Season 01/
│ │ └── Breaking Bad - S01E01 - Pilot.mkv
│ └── The Office (US) (2005)/
├── movies/
│ ├── Inception (2010)/
│ │ └── Inception (2010).mkv
│ └── The Matrix (1999)/
└── downloads/
├── complete/
│ ├── sonarr/
│ └── radarr/
└── incomplete/ Quality Profiles
Create Multiple Profiles:
- SD: For older content, kids shows
- HD: Standard 1080p quality
- Ultra HD: 4K/HDR content
- Any: For rare/hard-to-find content
Use Appropriate Profile:
- Most content: HD profile
- Classics: Any profile (take what’s available)
- Prestige TV/Movies: Ultra HD profile
Automation Rules
Monitoring Rules:
- New shows: Monitor future episodes only
- Ended shows: Monitor all
- Long-running shows: Monitor latest season
Search Settings:
- Enable automatic search for new content
- Disable for backlogs (manual search as needed)
- Use cutoff unmet search periodically
Conclusion
You now have a complete media automation pipeline with the *arr stack. This system will automatically find, download, organize, and manage your entire media library with minimal manual intervention.
Key Takeaways
- Prowlarr centralizes all indexer management
- Sonarr and Radarr handle automated downloads
- Quality profiles ensure you get desired formats
- Bazarr automates subtitle downloads
- Overseerr provides user-friendly request interface
- Proper configuration enables hands-free operation
Next Steps
After basic setup:
- Add your indexers to Prowlarr (private trackers recommended)
- Create quality profiles matching your preferences
- Import existing library into Sonarr/Radarr
- Configure Overseerr for family/friends requests
- Set up notifications (Discord, Telegram, etc.)
- Enable VPN for download client
- Schedule backups of configurations
Advanced Topics
Once comfortable with basics:
- Custom formats for fine-grained quality control
- Import lists for automatic content discovery
- Lidarr for music automation
- Readarr for books and audiobooks
- Custom scripts for advanced workflows
- TRaSH Guides for community best practices
Resources
Official Documentation:
- Sonarr: wiki.servarr.com/sonarr
- Radarr: wiki.servarr.com/radarr
- Prowlarr: wiki.servarr.com/prowlarr
Community Resources:
- r/sonarr, r/radarr, r/prowlarr: Reddit communities
- TRaSH Guides: trash-guides.info (essential reading)
- Discord: Servarr Discord server
Related Guides:
- Plex/Jellyfin setup
- qBittorrent configuration
- VPN for torrenting
- Usenet setup guide
Enjoy your fully automated media library!