Skip to content

YaBoy9K/linux-media-server-stack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docker Media Stack Setup Guide

This repository documents a Docker Compose media server stack. It includes Plex, SABnzbd, Radarr, Sonarr, Bazarr, Prowlarr, Seerr, Tautulli, Maintainerr, FlareSolverr, Watchtower, and Cloudflared.

Important: Do not upload real tokens, API keys, passwords, Plex claim codes, Cloudflare tunnel tokens, Usenet credentials, or private application config folders to GitHub.


Stack Overview

Service Purpose Port
Plex Media server 32400
SABnzbd Usenet downloader 8080
Sonarr TV show management 8989
Radarr Movie management 7878
Bazarr Subtitle management 6767
Prowlarr Indexer management 9696
Seerr Media request management 5055
Tautulli Plex monitoring/statistics 8181
Maintainerr Media cleanup/maintenance automation 6246
FlareSolverr Cloudflare challenge solver for supported apps 8191
Watchtower Automatic container updates N/A
Cloudflared Cloudflare tunnel N/A

Example Storage Layout

This setup uses a main media drive and a separate SSD for fast staging/unpacking.

Example:

NAME   SIZE   MOUNTPOINT
sda     50G   /
sdb1   500G   /mnt/media_ssd
sdc1  18.2T   /mnt/media

Mount purposes

Path Purpose
/ Main OS drive
/mnt/media_ssd Fast SSD staging/unpacking location for downloads
/mnt/media Main long-term media library
~/stack Docker Compose stack and container config folders

Folder Layout

Example Docker stack location:

~/stack

Example stack directory:

~/stack/
├── bazarr/
├── data/
├── docker-compose.yml
├── maintainerr/
├── plex/
├── prowlarr/
├── radarr/
├── sabnzbd/
├── seerr/
├── sonarr/
└── tautulli/

The config folders are created and used by the containers. They should not be uploaded to GitHub because they may contain private settings, API keys, database files, or credentials.


Required .env File

Copy .env.example to .env:

cp .env.example .env

Then edit it:

nano .env

Example:

PUID=1000
PGID=1000
TZ=America/Chicago
ROOT=/home/YOUR_USERNAME/stack
PLEX_CLAIM=
CLOUDFLARE_TUNNEL_TOKEN=

Notes

Check your user and group ID with:

id

ROOT should point to the folder where your app config folders live.

PLEX_CLAIM is optional and should only be used during initial Plex setup.

CLOUDFLARE_TUNNEL_TOKEN should never be committed to GitHub.


Create the Docker Network

This compose file uses an external Docker network called media.

Create it before starting the stack:

docker network create media

You only need to do this once.


Start the Stack

From the stack folder:

cd ~/stack
docker compose up -d

Check running containers:

docker ps

Check logs for a container:

docker logs -f plex

Example:

docker logs -f sabnzbd

Access the Services

Replace SERVER-IP with your server IP address.

Service URL Example
Prowlarr http://SERVER-IP:9696
SABnzbd http://SERVER-IP:8080
Sonarr http://SERVER-IP:8989
Radarr http://SERVER-IP:7878
Bazarr http://SERVER-IP:6767
Plex http://SERVER-IP:32400/web
FlareSolverr http://SERVER-IP:8191
Seerr http://SERVER-IP:5055
Tautulli http://SERVER-IP:8181
Maintainerr http://SERVER-IP:6246

Media Path Notes

Inside most containers, the main media folder is mapped like this:

/mnt/media:/data

That means inside containers, the media path is usually:

/data

SABnzbd also has access to the SSD staging drive:

/mnt/media_ssd:/mnt/media_ssd

This allows downloads and unpacking to happen on the SSD before completed media is moved to the large media drive.


Updating Containers

This stack includes Watchtower for scheduled automatic container updates.

Manual update method:

cd ~/stack
docker compose pull
docker compose up -d

Remove unused old images:

docker image prune -f

Basic Troubleshooting

Check compose syntax

docker compose config

Restart one container

docker restart plex

Restart the whole stack

cd ~/stack
docker compose restart

Stop the stack

cd ~/stack
docker compose down

Start the stack again

cd ~/stack
docker compose up -d

GitHub Safety Checklist

Before uploading to GitHub, make sure you do not upload:

  • .env
  • Plex claim codes
  • Cloudflare tunnel tokens
  • API keys
  • Passwords
  • Usenet provider credentials
  • Indexer credentials
  • App database/config folders
  • Backup ZIPs that may contain private settings or API keys

The included .gitignore is designed to help prevent accidental uploads of private files.

About

Linux Docker Compose media server stack for Plex, SABnzbd, Sonarr, Radarr, Bazarr, Prowlarr, Seerr, Tautulli, Maintainerr, and Cloudflared.

Resources

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors