A comprehensive Docker Compose-based media automation stack using the ARR (Automatic Ripping and Release) suite for automated media acquisition, management, and streaming.
This homelab setup provides a complete media automation pipeline that automatically searches, downloads, organizes, and serves your media library. The stack integrates multiple services to create a seamless experience from content discovery to playback.
The stack consists of the following services working together:
- Jellyfin - Media server for streaming and organizing your media library
- Radarr - Automated movie collection manager
- Sonarr - Automated TV series collection manager
- qBittorrent - BitTorrent client for downloading content
- Prowlarr - Indexer manager that syncs with Radarr and Sonarr
- Jackett - Alternative indexer proxy with FlareSolverr integration
- Dispatcharr - Automation tool that coordinates between Radarr and Sonarr
- FlareSolverr - Cloudflare bypass service for protected indexers
- Privoxy - HTTP proxy for additional privacy and routing
- Port:
8096 - Access: https://ragnarok.shreeda.xyz/
- Purpose: Media server for streaming movies and TV shows
- Hardware Acceleration: GPU passthrough enabled via
/dev/dri
- Port:
7878 - Purpose: Manages movie collection, monitors for new releases, and automates downloads
- Integration: Connected to qBittorrent and Prowlarr
- Port:
8989 - Purpose: Manages TV series collection, monitors for new episodes, and automates downloads
- Integration: Connected to qBittorrent and Prowlarr
- Ports:
8080(Web UI),6881(BitTorrent) - Purpose: Handles all torrent downloads for movies and TV shows
- Integration: Used by Radarr and Sonarr for downloading content
- Port:
9696 - Purpose: Centralized indexer management that syncs with Radarr and Sonarr
- Features: Automatically syncs indexers across all ARR applications
- Port:
9117 - Purpose: Alternative indexer proxy with support for multiple tracker sites
- Features: Auto-update enabled, integrated with FlareSolverr for Cloudflare protection
- Port:
9191 - Purpose: Automation coordinator that manages workflows between Radarr and Sonarr
- Dependencies: Requires Radarr, Sonarr, and Prowlarr to be running
- Port:
8191 - Purpose: Bypasses Cloudflare protection for indexers that require it
- Health Check: Configured with automatic health monitoring
- Port:
8118 - Purpose: HTTP proxy for additional privacy and network routing
- Health Check: Configured with automatic health monitoring
- Jellyfin Access: https://ragnarok.shreeda.xyz/
- Status Page: https://status.shreeda.xyz/
- Grafana Monitoring:
asgard.shreeda.xyz
- Docker and Docker Compose installed
- User ID
1000and Group ID1000(adjust in compose file if different) - Media directories mounted at:
/home/ubuntu/media/movies- For movie storage/home/ubuntu/media/tv- For TV show storage/home/ubuntu/media/downloads- For download staging
- GPU device at
/dev/dri(for Jellyfin hardware acceleration)
-
Clone or download this repository
-
Create required directories:
mkdir -p jellyfin/{config,cache}
mkdir -p qbittorrent/config
mkdir -p prowlarr/config
mkdir -p jackett/config
mkdir -p dispatcharr/config
mkdir -p radarr/config
mkdir -p sonarr/config- Set proper permissions (if needed):
sudo chown -R 1000:1000 jellyfin qbittorrent prowlarr jackett dispatcharr radarr sonarr- Start all services:
docker-compose up -d- Access services:
- Jellyfin:
http://localhost:8096 - Radarr:
http://localhost:7878 - Sonarr:
http://localhost:8989 - qBittorrent:
http://localhost:8080 - Prowlarr:
http://localhost:9696 - Jackett:
http://localhost:9117 - Dispatcharr:
http://localhost:9191
- Jellyfin:
-
Configure Prowlarr:
- Add indexers (public/private trackers)
- Configure download clients (qBittorrent)
- Sync to Radarr and Sonarr
-
Configure Radarr:
- Add root folder:
/movies - Configure download client (qBittorrent)
- Add quality profiles
- Connect to Prowlarr
- Add root folder:
-
Configure Sonarr:
- Add root folder:
/tv - Configure download client (qBittorrent)
- Add quality profiles
- Connect to Prowlarr
- Add root folder:
-
Configure qBittorrent:
- Set default download location:
/downloads - Configure categories for Radarr and Sonarr
- Set up port forwarding if needed
- Set default download location:
-
Configure Dispatcharr:
- Connect to Radarr and Sonarr instances
- Set up automation rules
-
Configure Jellyfin:
- Add media libraries pointing to
/media/moviesand/media/tv - Set up users and permissions
- Configure transcoding settings
- Add media libraries pointing to
If using Jackett as an alternative to Prowlarr:
- Configure FlareSolverr endpoint in Jackett settings
- Add indexers in Jackett
- Configure Jackett API in Radarr/Sonarr if needed
Jellyfin (standalone)
↓
qBittorrent ← Radarr ← Prowlarr
↓ ↑
Sonarr ─────┘
↓
Dispatcharr
↓
Jackett → FlareSolverr
.
├── docker-compose.yaml
├── jellyfin/
│ ├── config/
│ └── cache/
├── qbittorrent/
│ └── config/
├── prowlarr/
│ └── config/
├── jackett/
│ └── config/
├── dispatcharr/
│ └── config/
├── radarr/
│ └── config/
└── sonarr/
└── config/
All services use:
TZ=Asia/Kolkata- Timezone configurationPUID=1000/PGID=1000- User/Group IDs for file permissions (LinuxServer.io images)
docker-compose pull
docker-compose up -d# All services
docker-compose logs -f
# Specific service
docker-compose logs -f jellyfindocker-compose downdocker-compose restart <service-name>- Services are exposed on localhost by default
- For external access, consider using a reverse proxy (e.g., Nginx, Traefik)
- Ensure proper firewall rules are configured
- Use strong passwords for all service web interfaces
- Regularly update Docker images for security patches
- Ensure user ID 1000 has access to media directories
- Check volume mount permissions
- Check logs:
docker-compose logs <service-name> - Verify dependencies are running (check
depends_onin compose file) - Ensure ports are not already in use
- Verify qBittorrent is accessible from Radarr/Sonarr
- Check indexer connectivity in Prowlarr
- Verify FlareSolverr is running if using Cloudflare-protected indexers
This setup uses various open-source projects. Please refer to individual project licenses:
- Jellyfin: GPL-2.0
- Radarr: GPL-3.0
- Sonarr: GPL-3.0
- qBittorrent: GPL-2.0
- Prowlarr: GPL-3.0
- Jackett: GPL-2.0
- Dispatcharr: GPL-3.0
- FlareSolverr: MIT
- Privoxy: GPL-2.0
This is a personal homelab setup. Feel free to fork and adapt for your own use.
- All the developers and maintainers of the ARR suite
- LinuxServer.io for excellent Docker images
- The open-source community for these amazing tools