Welcome to your fully automated, Dockerized home media server! This stack provides everything you need to request, download, manage, and stream your favorite movies and TV shows securely. It is specially configured to handle a Dual-Drive Setup (Internal/Primary + External/Expansion drives).
This environment is powered by the Arr suite and dual streaming platforms to give you the best flexibility:
| Service | Description | Port |
|---|---|---|
| Plex | The ultimate media streaming server (Host Network mode). | 32400 |
| Jellyfin | Open-source alternative for local VR & high-res streaming. | 8096 |
| Sonarr | Smart PVR for automatic TV Show downloading and sorting. | 8989 |
| Radarr | Smart PVR for automatic Movie downloading and sorting. | 7878 |
| Transmission | Fast, easy, and free BitTorrent client. | 9091 |
| Prowlarr | Indexer manager/proxy built to integrate with Sonarr/Radarr. | 9696 |
| FlareSolverr | Proxy server to bypass Cloudflare protection for indexers. | 8191 |
This setup requires your drives to be mounted to specific paths. The docker-compose.yml expects the following structure on your host machine:
/mnt/
โโโ media/ # Primary Drive (ext4)
โ โโโ complete/ # Finished downloads
โ โโโ incomplete/ # Active downloads
โ โโโ movies/ # Sorted movies
โ โโโ shows/ # Sorted TV shows
โโโ disk/ # Secondary Expansion Drive (exFAT)
โโโ complete/
โโโ incomplete/
โโโ movies/
โโโ shows/
โ ๏ธ CRITICAL: You must create these folders before starting Docker to prevent "operation not permitted" permissions errors.
Before touching Docker, your drives must be mounted correctly at the OS level so they survive reboots.
Find your drives' UUIDs:
sudo blkidOpen your fstab file:
sudo nano /etc/fstabAdd your drives based on their format:
For the native Linux drive (ext4):
UUID=YOUR-UUID-HERE /mnt/media ext4 defaults,auto,nofail,x-systemd.device-timeout=5 0 0
For the expansion drive (exfat - requires specific UID/GID for Docker write access):
UUID=YOUR-UUID-HERE /mnt/disk exfat defaults,nofail,uid=1000,gid=1000,umask=000 0 0
Apply the mounts:
sudo systemctl daemon-reload
sudo mount -aNow that the drives are mounted, create the internal folders:
# Primary Drive
sudo mkdir -p /mnt/media/{movies,shows,complete,incomplete}
sudo chown -R 1000:1000 /mnt/media/*
# Secondary Drive (chown will fail here if exFAT, which is fine)
sudo mkdir -p /mnt/disk/{movies,shows,complete,incomplete}Clone this repository (or create a folder) and place the docker-compose.yml inside.
mkdir mediaserver && cd mediaserver
# Place your docker-compose.yml here
# Start the magic
docker compose up -dOnce Docker confirms all containers are Started, open your web browser and go to:
http://<YOUR-SERVER-IP>:<PORT>
Example: To access Sonarr, type http://192.168.1.33:8989.
Disclaimer: This repository and configuration are intended for managing personal, legally obtained media. Please respect the copyright laws of your country.