This project is not in any way designed to be a simple one-click-to-deploy project that let's you chose which software you want to run and can be tailored to your needs. It's my personal media services host config that I use at home in order to retrieve media, serve them over the network and host a Nextcloud instance.
If you're really looking for a complete, easy to configure and to use, media server deployment tool take a look at Cloudbox which uses Ansible and Docker to deploy the same services I use (and much more).
Because it's design is so heavily influenced by my personal tastes, you may prefer to just learn from it and take bits and pieces here and there rather than clone and run the whole thing as is.
Either way, I still try to be as concise as possible so that you can pretty much start from scratch with just this project and if someone happens to have a similar setup as me they can get up and running pretty easily just by reading this README.
It leverages Docker and Docker Compose in order to bring up/host the services. The services that are hosted on the server are:
- Træfik: A reverse-proxy that is very easy to configure and can automatically obtain Let's Encrypt certificates.
- Transmission: An easy to use BitTorrent client to downloads files using the BitTorrent protocol.
- SABnzbd: An easy to use binary newsreader to download files using the Usenet protocol.
- Jackett: A proxy server that helps interface PVR programs (Radarr, Sonarr, Lidarr etc.) and your BitTorrent trackers.
- NZBHydra 2: A meta search software for NZB indexers, you can configure and then search all your NZB indexers in one place.
- Sonarr, Radarr and Lidarr: PVR programs for managing TV Shows, Movies and Music respectively. They will automatically monitor, grab and send the wanted file to a specified binary newsreader or BitTorrent downloader then rename and organize the resulting download according to your own preferences.
- Bazarr: Companion application to Sonarr and Radarr, it manages and downloads subtitles based on your requirements.
- LazyLibrarian: Ebook library downloader and manager, works like Sonarr/Radarr/Lidarr.
- Ombi: Give your users the ability to request missing media content from your media collection.
- Plex Media Server: Plex is a centralised media server solution that let you organize your personal video, music as well as photo collections and streams them to all of your devices with a consistent interface.
- Tautulli: Tautulli is a 3rd party program that runs alongside a Plex Media Server instance to monitor it's activity and track various statistics that Plex doesn't show in it's own interface.
- Calibre-Web: Calibre-Web is a web app providing a clean interface for browsing, reading and downloading ebooks using an existing Calibre database.
- Nextcloud: It's a suite of client-server software for creating and using file hosting services. It is functionally similar to Google Drive, although Nextcloud is free and open-source, allowing anyone to self-host an instance.
- Collabora Online: A powerfull web-based LibreOffice suite that features collaborative editing and which can be integrated in Nextcloud.
Services to consider:
- Add openHAB and/or Home Assistant as a home automation hub (will maybe run it on a separate Raspberry Pi instead)
- Add Grafana & InfluxDB + Telegraf / Prometheus or even the Elastic Stack to properly monitor devices, operating systems and services
Project:
- Learn and use Ansible to replace docker-compose and all the setup scripts
I have a separate server running FreeNAS that host all my files. That's why I'm mounting datasets with NFS on the docker host. My FreeNAS server is also configured to pull my container config files from the docker host with rsync once per hour.
- Fedora Server 31 (other Linux distributions are possible but you will need to adapt the setup scripts).
- A properly configured DNS server in your LAN as well as proper DNS entries with a domain suffix for your servers (populated by hand or automatically with the hostname of your devices).
- A paid domain name for which you have full control over.
git clone https://github.com/PlqnK/docker-home-services-host.git
cd docker-home-services-host
for file in *.example*; do cp $file $(echo $file | sed -e 's/.example//'); done
You then need to:
- Adapt the NFS mount points in
docker-host-mount-points.txt
with what you have on your file server. You need to make it match the target 1:1, except for the source folder name which isn't important, otherwise you will need to modify every reference to the original target name in thedocker-compose.yml
file. - Get a Plex claim token here and replace the
PLEX_CLAIM
variable in the.env
file with it. - Update every reference to
example.com
in the files with your personal domain name, every reference tomyserver
with either the hostname of your server with a proper domain suffix where needed. ChangeUSER
indocker-host-setup.conf
to the name of the user created during the installation of Fedora/Ubuntu. - Fill in passwords for
MYSQL_ROOT_PASSWORD
,MYSQL_PASSWORD
andCOLLABORA_PASSWORD
in.env
. - Put your OpenVPN configuration file in the working dir as
client.ovpn
. - Adapt the rest of the variables in .env and other conf files according to your needs.
Install htpasswd with:
sudo dnf install httpd-tools
Then choose a password for the Træfik web interface and hash it as followed:
htpasswd -nb admin yourchosenpassword
Replace yourpasswordhash
of the variable TRAEFIK_API_PASSWORD
in .env
with the hash that you just obtained.
Next, chmod and execute the setup script:
chmod u+x fedora-setup.sh
sudo ./fedora-setup.sh
You can then create and run your containers with a simple:
docker-compose up -d
Run the post install script which will modify some services config files that were created during the first run:
sudo ./post-first-launch.sh
If you want to update your containers, just run:
cd /path/to/docker-home-services-host
docker-compose pull && docker-compose up -d
If you also want to update the source files of the project you just need to run git pull
right before docker-compose pull && docker-compose up -d
.
Contributions are welcome if you see any area of improvement!
There's no specific guidelines for pull requests but keep in mind that this project is tailored to my needs and, for example, I might not agree with what you think should be added.
This project is released under the BSD 3-Clause License. A copy of the license is available in this project folder.