Plex Media Server Stack
Plex media server with Overseerr, Tautulli analytics, and automated download stack
Overview
Plex Media Server transforms personal media collections into a Netflix-like streaming experience, organizing movies, TV shows, music, and photos with rich metadata and beautiful interfaces across all devices. Originally launched in 2009 as a fork of XBMC, Plex has evolved into the most popular self-hosted media solution, offering automatic metadata matching, hardware transcoding, mobile sync, and access to free streaming content alongside personal libraries.
This comprehensive media automation stack combines Plex's streaming capabilities with request management through Overseerr, detailed analytics via Tautulli, and a complete download automation pipeline using Sonarr for TV shows, Radarr for movies, Prowlarr for indexer management, and Transmission for torrent handling. Together, these components create a fully automated media ecosystem where users can request content through a polished web interface, have it automatically searched, downloaded, organized, and made available in Plex within minutes.
Home media enthusiasts, cord-cutters building personal streaming services, and families wanting centralized media access will find this stack invaluable. The combination eliminates manual media management while providing enterprise-grade analytics and user request handling, making it perfect for shared households or small communities wanting a professional media experience without monthly subscription fees.
Key Features
- Automatic metadata matching with rich movie and TV show information from TheTVDB, TheMovieDB, and IMDb
- User request management system allowing family members to request new content through Overseerr's intuitive interface
- Comprehensive viewing analytics and statistics through Tautulli including watch history, user activity, and server performance metrics
- Automated TV show monitoring with Sonarr tracking upcoming episodes and managing series libraries
- Movie collection automation via Radarr with quality profiles and automatic upgrading capabilities
- Centralized indexer management through Prowlarr supporting 500+ torrent trackers and Usenet indexers
- Hardware transcoding support for real-time video conversion across different devices and bandwidths
- Mobile sync functionality allowing offline viewing of selected content on phones and tablets
Common Use Cases
- 1Family media server replacing multiple streaming subscriptions with centralized content access
- 2Cord-cutting households wanting automated acquisition of new TV episodes and movies
- 3Home theater enthusiasts managing large 4K movie collections with quality upgrading
- 4Shared living situations where multiple users need request and approval workflows
- 5Media collectors wanting detailed analytics on viewing habits and library usage patterns
- 6Remote access scenarios where users stream personal content while traveling
- 7Small community or friend group media sharing with user management and request systems
Prerequisites
- Minimum 4GB RAM recommended (2GB for Plex transcoding, 2GB for automation stack)
- Hardware transcoding support requires Intel QuickSync, NVIDIA GPU, or AMD VCE for Plex Pass users
- Port availability: 32400 (Plex), 5055 (Overseerr), 8181 (Tautulli), 8989 (Sonarr), 7878 (Radarr), 9696 (Prowlarr), 9091 (Transmission)
- Plex account and claim token from https://plex.tv/claim for initial server setup
- Understanding of torrent indexers, trackers, or Usenet providers for content sources
- Basic knowledge of media naming conventions and folder structures for proper organization
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 plex: 3 image: lscr.io/linuxserver/plex:latest4 container_name: plex5 restart: unless-stopped6 network_mode: host7 environment: 8 - PUID=${PUID:-1000}9 - PGID=${PGID:-1000}10 - TZ=${TZ:-UTC}11 - VERSION=docker12 - PLEX_CLAIM=${PLEX_CLAIM}13 volumes: 14 - ./plex/config:/config15 - ./media/movies:/movies16 - ./media/tv:/tv17 - ./media/music:/music1819 overseerr: 20 image: lscr.io/linuxserver/overseerr:latest21 container_name: overseerr22 restart: unless-stopped23 ports: 24 - "${OVERSEERR_PORT:-5055}:5055"25 volumes: 26 - ./overseerr/config:/config27 environment: 28 - PUID=${PUID:-1000}29 - PGID=${PGID:-1000}30 - TZ=${TZ:-UTC}3132 tautulli: 33 image: lscr.io/linuxserver/tautulli:latest34 container_name: tautulli35 restart: unless-stopped36 ports: 37 - "${TAUTULLI_PORT:-8181}:8181"38 volumes: 39 - ./tautulli/config:/config40 environment: 41 - PUID=${PUID:-1000}42 - PGID=${PGID:-1000}43 - TZ=${TZ:-UTC}4445 sonarr: 46 image: lscr.io/linuxserver/sonarr:latest47 container_name: sonarr48 restart: unless-stopped49 ports: 50 - "${SONARR_PORT:-8989}:8989"51 volumes: 52 - ./sonarr/config:/config53 - ./media/tv:/tv54 - ./downloads:/downloads55 environment: 56 - PUID=${PUID:-1000}57 - PGID=${PGID:-1000}58 - TZ=${TZ:-UTC}5960 radarr: 61 image: lscr.io/linuxserver/radarr:latest62 container_name: radarr63 restart: unless-stopped64 ports: 65 - "${RADARR_PORT:-7878}:7878"66 volumes: 67 - ./radarr/config:/config68 - ./media/movies:/movies69 - ./downloads:/downloads70 environment: 71 - PUID=${PUID:-1000}72 - PGID=${PGID:-1000}73 - TZ=${TZ:-UTC}7475 prowlarr: 76 image: lscr.io/linuxserver/prowlarr:latest77 container_name: prowlarr78 restart: unless-stopped79 ports: 80 - "${PROWLARR_PORT:-9696}:9696"81 volumes: 82 - ./prowlarr/config:/config83 environment: 84 - PUID=${PUID:-1000}85 - PGID=${PGID:-1000}86 - TZ=${TZ:-UTC}8788 transmission: 89 image: lscr.io/linuxserver/transmission:latest90 container_name: transmission91 restart: unless-stopped92 ports: 93 - "${TRANSMISSION_PORT:-9091}:9091"94 - "51413:51413"95 - "51413:51413/udp"96 volumes: 97 - ./transmission/config:/config98 - ./downloads:/downloads99 environment: 100 - PUID=${PUID:-1000}101 - PGID=${PGID:-1000}102 - TZ=${TZ:-UTC}.env Template
.env
1# Plex Media Server Stack2OVERSEERR_PORT=50553TAUTULLI_PORT=81814SONARR_PORT=89895RADARR_PORT=78786PROWLARR_PORT=96967TRANSMISSION_PORT=909189# Get claim token from https://plex.tv/claim10PLEX_CLAIM=claim-xxxxxxxxxxxx1112# User/Group IDs13PUID=100014PGID=100015TZ=America/New_YorkUsage Notes
- 1Plex at http://localhost:32400/web (network_mode: host)
- 2Overseerr (requests) at http://localhost:5055
- 3Tautulli (analytics) at http://localhost:8181
- 4Get PLEX_CLAIM from https://plex.tv/claim
- 5Prowlarr manages indexers for Sonarr/Radarr
- 6Configure Sonarr/Radarr to use Transmission
Individual Services(7 services)
Copy individual services to mix and match with your existing compose files.
plex
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
restart: unless-stopped
network_mode: host
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
- VERSION=docker
- PLEX_CLAIM=${PLEX_CLAIM}
volumes:
- ./plex/config:/config
- ./media/movies:/movies
- ./media/tv:/tv
- ./media/music:/music
overseerr
overseerr:
image: lscr.io/linuxserver/overseerr:latest
container_name: overseerr
restart: unless-stopped
ports:
- ${OVERSEERR_PORT:-5055}:5055
volumes:
- ./overseerr/config:/config
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
tautulli
tautulli:
image: lscr.io/linuxserver/tautulli:latest
container_name: tautulli
restart: unless-stopped
ports:
- ${TAUTULLI_PORT:-8181}:8181
volumes:
- ./tautulli/config:/config
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
sonarr
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
restart: unless-stopped
ports:
- ${SONARR_PORT:-8989}:8989
volumes:
- ./sonarr/config:/config
- ./media/tv:/tv
- ./downloads:/downloads
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
radarr
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
restart: unless-stopped
ports:
- ${RADARR_PORT:-7878}:7878
volumes:
- ./radarr/config:/config
- ./media/movies:/movies
- ./downloads:/downloads
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
prowlarr
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
restart: unless-stopped
ports:
- ${PROWLARR_PORT:-9696}:9696
volumes:
- ./prowlarr/config:/config
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
transmission
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
restart: unless-stopped
ports:
- ${TRANSMISSION_PORT:-9091}:9091
- "51413:51413"
- 51413:51413/udp
volumes:
- ./transmission/config:/config
- ./downloads:/downloads
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- TZ=${TZ:-UTC}
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 plex:5 image: lscr.io/linuxserver/plex:latest6 container_name: plex7 restart: unless-stopped8 network_mode: host9 environment:10 - PUID=${PUID:-1000}11 - PGID=${PGID:-1000}12 - TZ=${TZ:-UTC}13 - VERSION=docker14 - PLEX_CLAIM=${PLEX_CLAIM}15 volumes:16 - ./plex/config:/config17 - ./media/movies:/movies18 - ./media/tv:/tv19 - ./media/music:/music2021 overseerr:22 image: lscr.io/linuxserver/overseerr:latest23 container_name: overseerr24 restart: unless-stopped25 ports:26 - "${OVERSEERR_PORT:-5055}:5055"27 volumes:28 - ./overseerr/config:/config29 environment:30 - PUID=${PUID:-1000}31 - PGID=${PGID:-1000}32 - TZ=${TZ:-UTC}3334 tautulli:35 image: lscr.io/linuxserver/tautulli:latest36 container_name: tautulli37 restart: unless-stopped38 ports:39 - "${TAUTULLI_PORT:-8181}:8181"40 volumes:41 - ./tautulli/config:/config42 environment:43 - PUID=${PUID:-1000}44 - PGID=${PGID:-1000}45 - TZ=${TZ:-UTC}4647 sonarr:48 image: lscr.io/linuxserver/sonarr:latest49 container_name: sonarr50 restart: unless-stopped51 ports:52 - "${SONARR_PORT:-8989}:8989"53 volumes:54 - ./sonarr/config:/config55 - ./media/tv:/tv56 - ./downloads:/downloads57 environment:58 - PUID=${PUID:-1000}59 - PGID=${PGID:-1000}60 - TZ=${TZ:-UTC}6162 radarr:63 image: lscr.io/linuxserver/radarr:latest64 container_name: radarr65 restart: unless-stopped66 ports:67 - "${RADARR_PORT:-7878}:7878"68 volumes:69 - ./radarr/config:/config70 - ./media/movies:/movies71 - ./downloads:/downloads72 environment:73 - PUID=${PUID:-1000}74 - PGID=${PGID:-1000}75 - TZ=${TZ:-UTC}7677 prowlarr:78 image: lscr.io/linuxserver/prowlarr:latest79 container_name: prowlarr80 restart: unless-stopped81 ports:82 - "${PROWLARR_PORT:-9696}:9696"83 volumes:84 - ./prowlarr/config:/config85 environment:86 - PUID=${PUID:-1000}87 - PGID=${PGID:-1000}88 - TZ=${TZ:-UTC}8990 transmission:91 image: lscr.io/linuxserver/transmission:latest92 container_name: transmission93 restart: unless-stopped94 ports:95 - "${TRANSMISSION_PORT:-9091}:9091"96 - "51413:51413"97 - "51413:51413/udp"98 volumes:99 - ./transmission/config:/config100 - ./downloads:/downloads101 environment:102 - PUID=${PUID:-1000}103 - PGID=${PGID:-1000}104 - TZ=${TZ:-UTC}105EOF106107# 2. Create the .env file108cat > .env << 'EOF'109# Plex Media Server Stack110OVERSEERR_PORT=5055111TAUTULLI_PORT=8181112SONARR_PORT=8989113RADARR_PORT=7878114PROWLARR_PORT=9696115TRANSMISSION_PORT=9091116117# Get claim token from https://plex.tv/claim118PLEX_CLAIM=claim-xxxxxxxxxxxx119120# User/Group IDs121PUID=1000122PGID=1000123TZ=America/New_York124EOF125126# 3. Start the services127docker compose up -d128129# 4. View logs130docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/plex-media-server-stack/run | bashTroubleshooting
- Plex server not accessible remotely: Check router port forwarding for port 32400 and ensure PLEX_CLAIM token was used during initial setup
- Sonarr/Radarr not finding releases: Verify Prowlarr indexer configuration and ensure indexers are synced to both applications
- Transmission downloads not importing: Check folder permissions match PUID/PGID values and downloads folder is accessible to Sonarr/Radarr
- Overseerr requests not triggering downloads: Verify API connections between Overseerr and Sonarr/Radarr in Settings > Services
- Tautulli not showing viewing history: Confirm Plex server connection in Tautulli settings and check that Plex logging is enabled
- Media files not appearing in Plex: Ensure proper naming conventions are followed and libraries are pointing to correct mounted volumes
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
plexoverseerrtautullisonarrradarrprowlarrtransmission
Tags
#plex#overseerr#tautulli#sonarr#radarr#media
Category
Media & EntertainmentAd Space
Shortcuts: C CopyF FavoriteD Download