The media stack handles downloading, organising, and streaming movies, TV shows, and music. All download traffic is routed through a VPN.
Jellyseerr (requests)
↓
Radarr / Sonarr / Lidarr (automation)
↓
Prowlarr (indexers) + FlareSolverr (Cloudflare bypass)
↓
qBittorrent ← Gluetun VPN (ProtonVPN UK)
↓
/data/media (shared volume)
↓
Jellyfin (streaming) + Bazarr (subtitles)
Media server for streaming movies, TV, and music to any device.
/dev/drimedia-stack/jellyfin-config/${DATA_LOCATION}Request portal — lets users request new movies and shows.
Torrent client. Routed through Gluetun VPN — it cannot connect if VPN is down.
Alternative torrent client. Routed through Gluetun VPN like qBittorrent.
Automated movie downloader.
Automated TV show downloader.
Automated music downloader.
Automatic subtitle downloader for movies and shows.
Manages and syncs torrent/NZB indexers across all *arr apps.
VPN container that all download traffic routes through.
Bypasses Cloudflare protection on torrent indexer sites.
All *arr apps and Jellyfin share the same data volume (${DATA_LOCATION}) so files don't need to be copied — Radarr/Sonarr just hardlink/move within the same drive.
/data/ ← DATA_LOCATION mapped to /mnt/hdd/data
│
├── media/ ← Jellyfin library (permanent)
│ ├── movies/ ← Radarr root folder
│ ├── tv/ ← Sonarr root folder
│ └── music/ ← Lidarr root folder
│
├── torrents/ ← Transmission download staging area
│ ├── movies/ ← Radarr download directory
│ ├── tv/ ← Sonarr download directory
│ └── music/ ← Lidarr download directory
│
└── torrents/incomplete/ ← Files being actively downloaded
| App | Setting | Value |
|---|---|---|
| Radarr | Download Directory | /data/torrents/movies |
| Sonarr | Download Directory | /data/torrents/tv |
| Lidarr | Download Directory | /data/torrents/music |
| qBittorrent | Default Save Path | /data/torrents |
| qBittorrent | Incomplete Dir | /data/torrents/incomplete |
| Mount | Drive | Size | Purpose |
|---|---|---|---|
/mnt/disk1 |
sdb | 932GB | Original HDD (raw) |
/mnt/hdd2 |
sdc1 | 1.8TB | External HDD (raw) |
/mnt/hdd |
mergerfs | 2.7TB | Combined pool — this is what Docker uses |
DATA_LOCATION=/mnt/hdd/data — all containers mount this as /data.
If Gluetun goes down, all download traffic stops automatically — nothing leaks outside the VPN. Jellyfin and Jellyseerr are unaffected (they don't use the VPN).
All *arr apps and Jellyfin share the same data volume (${DATA_LOCATION}) so files don't need to be copied — Radarr/Sonarr just hardlink/move within the same drive.