| Service | Port | Purpose |
|---|---|---|
| Jellyfin | 8096 | Media playback (Plex alternative) |
| Sonarr | 8989 | TV show management |
| Radarr | 7878 | Movie management |
| Prowlarr | 9696 | Indexer management |
| qBittorrent | 9080 | Download client |
| Bazarr | 6767 | Subtitle management |
| Seerr | 4535 | Request management UI |
media-stack/
├── docker-compose.yml
├── jellyfin/
├── sonarr/
├── radarr/
├── prowlarr/
├── qbittorrent/
├── bazarr/
├── jellyseerr/
├── media/ # Your actual media files
│ ├── movies/
│ ├── tv/
│ └── music/
└── downloads/ # Incoming downloads
- In Coolify → Add Resource → Docker Compose
- Paste the contents of
docker-compose.yml - Set the required environment variables if prompted (PUID/PGID = 1000)
- Deploy
- Web UI: http://your-vps:8080
- Default login: admin / adminadmin
- Go to Settings → Download → Set download path to
/downloads - Enable automatic torrent management
- Web UI: http://your-vps:9696
- Add indexers (Jackett, public trackers)
- Connect to Sonarr/Radarr via "Apps" tab
- Web UI: http://your-vps:8096
- Add media library pointing to
/media - Map: movies →
/media/movies, tv →/media/tv
- Connect to Prowlarr (Settings → Indexers → Add Prowlarr)
- Connect to qBittorrent (Settings → Download Clients)
- Set root folder to
/media/tv
- Connect to Prowlarr
- Connect to qBittorrent
- Set root folder to
/media/movies
- Connect to Sonarr/Radarr
- Point to
/mediafolder
- Connect to Jellyfin
- Users request movies/TV via this UI
If you get permission errors, run on the VPS:
sudo chown -R 1000:1000 ./media ./downloadscd media-stack
docker compose pull
docker compose up -d