docker-based plex & usenet media server using custom subdomains with tls
- host each service as a subdomain of a personal domain over https
- run public maintained images with no modifications
- keep source repo small (2 required files)
- require minimal configuration and setup
- Plex organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server.
- NZBGet is a usenet downloader, written in C++ and designed with performance in mind to achieve maximum download speed by using very little system resources.
- Sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
- Radarr - A fork of Sonarr to work with movies à la Couchpotato.
- NZBHydra 2 is a meta search application for NZB indexers, the "spiritual successor" to NZBmegasearcH, and an evolution of the original application NZBHydra . It provides easy access to a number of raw and newznab based indexers.
- Duplicati works with standard protocols like FTP, SSH, WebDAV as well as popular services like Microsoft OneDrive, Amazon Cloud Drive & S3, Google Drive, box.com, Mega, hubiC and many others.
- Traefik is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy.
- dedicated server or PC with plenty of storage
- windows or linux x86/x64 os (not ARM)
- custom top-level domain with configurable sub-domains (eg. plex.exampledomain.com)
- cloudflare dns and proxy
- login to cloudflare and select your domain
- select
Full (strict)
underCrypto
->SSL
- add dns records for each service under
DNS
->DNS Records
Type | Name | Value |
---|---|---|
A |
plex.exampledomain.com |
xxx.xxx.xxx.xxx |
A |
hydra.exampledomain.com |
xxx.xxx.xxx.xxx |
A |
sonarr.exampledomain.com |
xxx.xxx.xxx.xxx |
A |
radarr.exampledomain.com |
xxx.xxx.xxx.xxx |
A |
nzbget.exampledomain.com |
xxx.xxx.xxx.xxx |
A |
duplicati.exampledomain.com |
xxx.xxx.xxx.xxx |
# 1. install docker
# https://docs.docker.com/install/linux/docker-ce/debian/
curl -sSL get.docker.com | sh
# 2. install docker-compose
# https://docs.docker.com/compose/install/#install-compose
sudo curl -L --fail https://github.com/docker/compose/releases/download/1.23.1/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 3. clone mediaserver repo
git clone https://github.com/klutchell/mediaserver.git
traefik.frontend.rule
needs to be set for each service indocker-compose.yml
CF_API_EMAIL
andCF_API_KEY
need to be set for traefik indocker-compose.yml
domain
andemail
need to be set intraefik.toml
# 1. pull latest public images
docker-compose pull
# 2. deploy containers with docker compose
docker-compose up -d --remove-orphans
- Log into each service and enable http authentication
Create secrets.env
in the root of the repo to avoid committing sensitive
details from your local configuration to git.
# add entries in the format "secret=placeholder" (placeholder can be blank)
echo "[email protected][email protected]" >> secrets.env
echo "secretdomain.com=exampledomain.com" >> secrets.env
echo "abcdefghijklmnopqrstuvwxyz1234567890=" >> secrets.env
# install pre-commit and post-commit hooks
ln -s ../../pre-commit .git/hooks/pre-commit
ln -s ../../post-commit .git/hooks/post-commit
Kyle Harding [email protected]
I didn't create any of these docker images myself, so credit goes to the maintainers, and the app creators.