A comprehensive Docker-based media automation stack that provides a complete solution for managing, downloading, organizing, and streaming your media collection. This stack combines the power of the *arr ecosystem with media servers and management tools to create a fully automated media center.
This stack automates the entire media lifecycle:
- Discovery: Find and track movies, TV shows, music, and books
- Download: Automatically download content based on your preferences
- Organization: Sort and rename files according to your standards
- Streaming: Serve media to all your devices
- Management: Monitor, request, and maintain your collection
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Discovery │ │ Download │ │ Organization │
│ │ │ │ │ │
│ • Overseerr │───▶│ • qBittorrent │───▶│ • *arr Apps │
│ • Prowlarr │ │ • Indexers │ │ • Bazarr │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Streaming │ │ Management │ │ Monitoring │
│ │ │ │ │ │
│ • Jellyfin │ │ • Homarr │ │ • Tautulli │
│ • Plex │ │ • Portainer │ │ • Jellystat │
│ • Navidrome │ │ • Watchtower │ │ • Audiobookshelf│
└─────────────────┘ └─────────────────┘ └─────────────────┘
- Sonarr - TV show collection manager
- Radarr - Movie collection manager
- Lidarr - Music collection manager
- Readarr - Book and audiobook manager
- Prowlarr - Indexer manager for all *arr apps
- Bazarr - Subtitle manager
- Jellyfin - Free, open-source media server
- Plex - Popular media server with extensive device support
- Navidrome - Lightweight music server
- Audiobookshelf - Audiobook server
- Homarr - Unified dashboard for all services
- Overseerr - Request management and discovery
- qBittorrent - Torrent client
- Recyclarr - Quality profile synchronization
- Portainer - Docker container management
- Watchtower - Automatic container updates
- 🔄 Fully Automated: Set it up once and let it manage your entire media collection
- 🌐 Multi-Platform: Works on Windows, macOS, and Linux
- 📱 Device Agnostic: Stream to any device with a web browser or app
- 🔒 Self-Hosted: Complete control over your data and privacy
- ⚡ High Performance: Optimized for speed and efficiency
- 🛡️ Secure: All services run in isolated containers
- 📈 Scalable: Easy to add more storage or services as needed
- Docker Desktop with WSL2 backend (Windows) or Docker Engine (Linux/macOS)
- At least 4GB RAM and 20GB free disk space
- Basic understanding of Docker and networking
-
Clone the repository
git clone https://github.com/yourusername/arr-stack.git cd arr-stack -
Create environment file
cp .env.example .env # Edit .env with your preferred settings -
Start the stack
docker compose up -d
-
Access services
- Dashboard: http://localhost:7575 (Homarr)
- TV Shows: http://localhost:8989 (Sonarr)
- Movies: http://localhost:7878 (Radarr)
- Music: http://localhost:8686 (Lidarr)
- Books: http://localhost:8787 (Readarr)
- Media Server: http://localhost:8096 (Jellyfin)
arr-stack/
├── config/ # Service configurations
│ ├── homarr/ # Dashboard settings
│ ├── sonarr/ # TV show manager
│ ├── radarr/ # Movie manager
│ ├── lidarr/ # Music manager
│ ├── readarr/ # Book manager
│ ├── prowlarr/ # Indexer manager
│ ├── bazarr/ # Subtitle manager
│ ├── jellyfin/ # Media server
│ ├── plex/ # Alternative media server
│ ├── qbittorrent/ # Torrent client
│ ├── portainer/ # Container management
│ └── ...
├── downloads/ # Download directory
├── media/ # Organized media files
│ ├── movies/ # Movie collection
│ ├── tv/ # TV show collection
│ ├── music/ # Music collection
│ ├── books/ # Book collection
│ └── audiobooks/ # Audiobook collection
├── docker-compose.yml # Service definitions
├── .env # Environment variables
└── README.md # This file
Key variables in .env:
# User and Timezone
PUID=1000
PGID=1000
TZ=Europe/Istanbul
# Service Ports
HOMARR_PORT=7575
SONARR_PORT=8989
RADARR_PORT=7878
LIDARR_PORT=8686
READARR_PORT=8787
PROWLARR_PORT=9696
BAZARR_PORT=6767
QBITTORRENT_WEBUI_PORT=8080
JELLYFIN_HTTP_PORT=8096
PLEX_HTTP_PORT=32400
# Directory Paths
CONFIG_ROOT=./config
MEDIA_MOVIES_DIR=./media/movies
MEDIA_TV_DIR=./media/tv
MEDIA_MUSIC_DIR=./media/music
MEDIA_BOOKS_DIR=./media/books
DOWNLOADS_ROOT=./downloads
# Optional
PLEX_CLAIM= # Get from plex.tv/claim
WATCHTOWER_NOTIFICATIONS= # Discord/Slack webhook URL-
Configure qBittorrent
- Change default password
- Set download categories
- Configure download paths
-
Setup Indexers in Prowlarr
- Add your preferred indexers
- Configure API keys
- Sync with *arr applications
-
*Configure arr Applications
- Add download clients (qBittorrent)
- Set root folders for media
- Configure quality profiles
- Add indexers from Prowlarr
-
Setup Media Servers
- Create libraries pointing to media folders
- Configure metadata agents
- Set up user accounts
-
Configure Dashboard
- Add service widgets to Homarr
- Set up API integrations
- Customize layout and themes
Use Recyclarr to maintain consistent quality profiles across all *arr applications:
# config/recyclarr/config.yml
sonarr:
instance_name: sonarr
base_url: http://sonarr:8989
api_key: your_api_key
quality_definition:
type: series
quality_profiles:
- name: "HD-1080p"
upgrade_until_quality: "Bluray-1080p"
qualities:
- "HDTV-1080p"
- "Bluray-1080p"Watchtower automatically updates containers. Configure notifications:
WATCHTOWER_NOTIFICATIONS=discord://webhook_urlRegular backups of the config/ directory ensure you can restore your setup:
# Create backup
tar -czf arr-stack-backup-$(date +%Y%m%d).tar.gz config/
# Restore backup
tar -xzf arr-stack-backup-20240101.tar.gzServices won't start
- Check Docker is running
- Verify port conflicts
- Check disk space
Downloads not working
- Verify qBittorrent configuration
- Check indexer connectivity
- Review download client settings in *arr apps
Media not appearing
- Check file permissions
- Verify folder mappings
- Review media server library settings
Performance issues
- Monitor resource usage
- Adjust quality profiles
- Consider hardware transcoding
# View all logs
docker compose logs -f
# View specific service logs
docker compose logs -f sonarr
# Check service status
docker compose ps
# Restart specific service
docker compose restart sonarr- Network Security: Services are exposed on localhost by default
- Authentication: Set strong passwords for all services
- Updates: Keep containers updated with Watchtower
- Backups: Regular backups of configuration data
- Access Control: Use reverse proxy for external access
- Minimum: 4GB RAM, 2 CPU cores, 100GB storage
- Recommended: 8GB RAM, 4 CPU cores, 1TB+ storage
- Optimal: 16GB+ RAM, 8+ CPU cores, SSD storage
- Use SSD storage for better I/O performance
- Enable hardware transcoding if supported
- Configure appropriate quality profiles
- Monitor resource usage and scale accordingly
- LinuxServer.io for excellent Docker images
- Hotio for additional container images
- All the developers of the amazing *arr ecosystem
- The open-source community for continuous improvements