Media Management Apps
OK. Here is a collection of tools that can be used to manage a complete media library. When I say manage, I mean that these tools allow for requesting movies or tv shows, downloading the request, and placing the request in your library in whatever fashion, folder, or naming scheme you want. Having said that you should know, that explanation is way over simplified. You will have some configurations on your hands, and will need some outside resources (indexers) to search from and maybe a couple sources (news servers and/or torrent sites) to pull from.
That is not part of this how-to.
Here I will describe installing some docker containers that would help facilitate the above idea. There are a bunch of folks that containerize these tools, but I am only going to show one particular offering. https://hotio.dev/
He/She/They have compiled a bunch of media management tools, so one stop shopping. The tools are also available through the docker hub.
docker search hotio
You can skip down to the code below if you just want to get rolling. If you want a bit more information, then here is the list of the tools we will load, their function, and a bit of explanation on the directory volume mounts we will create.
NZBGet - This is the core downloading client. Sonarr and Radarr will sent the request to NZBGet. Once the request is downloaded it will place the download in a categorized folder (sonarr or radarr respectively). Sonarr/Radarr will monitor the categorized folder for the download to appear.
Sonarr & Radarr - Sonarr is for TV shows, and Radarr is for movies. These applications will manage your media library, by forwarding your requests on to the downloader, and monitoring for it to complete. Once it appears in the categorized folder location, Sonarr/Radarr will take the download, rename it, create a folder for it, and drop it into your media collection. Sonarr/Radarr will also keep track of the quality of your media. If they detect a better quality has become available, it will automatically send a request to download on to NZBGet.
Overseerr - This application ties itself into your library and into Sonarr and Radarr. Overseerr gives a single pain of glass for you to make requests for media. When a request is made it forwards that on to Sonarr/Radarr. Once that request has hit your media library, it will mark it as available. Overseerr will scan your media library and notate your collection as already available, making it easy to recognize already downloaded or available media so that duplicate requests are not made. Overseerr also has the ability to launch the media using your desired media server.
Media Server - Plex, Emby, JellyFin to name a few. These systems make your media library available on your TV in a pretty, remote control, friendly way. They also provide the ability to access your media while remote (away from home). The backend of these systems control the streaming process and adjust transcoding (if required) in order to make your media stream-able while on various bandwidth handicapped networks. They also categorize your media into easily searchable areas.
Here is a sample media server folder structure. Please keep in mind, that this layout is for simplicity of this how-to. Your media could reside on some other storage system, and these dockers could be on different systems as well. You are not locked into a single source system. If using separate systems, you will need to map your media locations to the various tools, so that they have access. For this how-to, I am going to give a single source layout.
Imagine the following directory structure...
/opt/nzbget
/opt/radarr
/opt/sonarr
/opt/overseerr
/opt/utility
/opt/utility/nzbget
/opt/utility/radarr
/opt/utility/sonarr
/opt/media
/opt/media/movies
/opt/media/tv
Our docker images are build with all of their configuration files inside of a /config folder. We will install our images to the /opt directory and map a path to those /config folders, that will be available to us on the outside of the container. This mapping (or mount point as is called in the docker world) would look like this (using nzbget as the example)...
-v /opt/nzbget:/config
-v indicates a "mount" is being defined. Left of the colon is our path, and right of the colon is inside the container.
Are you tracking?
OK. So here are a couple more. Let me explain these with a reference to what I said previously about the applications. NZBGet is going to get a request from Sonarr or Radarr. When that request is made, those apps tell NZBGet to please pull down this request, and if you don't mind, please put it in my folder. Sonarr's folder that it will monitor for the request is /opt/utility/sonarr and same goes for Radarr /opt/utility/radarr. (this is all configurable)
So we need to make that location available to NZBGet and we need to make it available to the requesting applications.
NZBGet:
-v /opt/utility:/utility
Sonarr:
-v /opt/utility:/utility
Radarr:
-v /opt/utility:/utility
Here we just open up the /opt/utility directory to all three apps. Then during the configuration of the application you would select your respective directory.
Alright. I hope that makes sense.
Let me go ahead and drop the complete setup and image loads for these applications.
# make directory structure
mkdir -p /opt/{nzbget,radarr,sonarr,overseerr}
mkdir -p /opt/utility/{nzbget,radarr,sonarr}
mkdir -p /opt/media/{movies,tv}
# pull down the images
docker pull hotio/nzbget
docker pull hotio/radarr
docker pull hotio/sonarr
docker pull hotio/overseerr
# list out the images docker now holds
docker images
# build nzbget container
docker run -d --restart=unless-stopped \
--name nzbget \
-p 6789:6789 \
-e UMASK=002 -e TZ="America/Denver" \
-v /opt/nzbget:/config \
-v /opt/utility:/utility \
hotio/nzbget:latest
# build sonarr container
docker run -d --restart=unless-stopped \
--name sonarr \
-p 8989:8989 \
-e UMASK=002 -e TZ="America/Denver" \
-v /opt/sonarr:/config \
-v /opt/utility:/utility \
-v /opt/media:/media \
hotio/sonarr:latest
# build radarr container
docker run -d --restart=unless-stopped \
--name radarr \
-p 7878:7878 \
-e UMASK=002 -e TZ="America/Denver" \
-v /opt/radarr:/config \
-v /opt/utility:/utility \
-v /opt/media:/media \
hotio/radarr:latest
# build overseerr container
docker run -d --restart=unless-stopped \
--name overseerr \
-p 5055:5055 \
-e UMASK=002 -e TZ="America/Denver" \
-v /opt/overseerr:/config \
-v /opt/media:/media \
hotio/overseerr:latest
# check docker proccesses and see if our containers are running
docker ps
# some non-pro notes
#
# docker start <name or container id>
# docker stop <name or container id>
# docker rm <name or container id>
# docker image rm <image name or id>
#
All the applications should be running.
That was easy, yea? :)
It usually takes longer to explain than it does just doing the work.
Your should be able to reach each of those applications by referencing the docker server and the port you specified.
http://localhost:6789 --> nzbget
http://localhost:7878 --> radarr
http://localhost:8989 --> sonarr
http://localhost:5055 --> overseerr
Soooo.... remember I was saying that when creating the mount points, the content to the left of the colon is your side and the content to the right of the colon is inside the container?
Well that goes for ports as well.
So you want to change Overseerr to appear as the main web page for the server?
# change the line that references the port
-p 80:5055
Oh you want to upgrade or add another mount point to your NZBGet container?
# remove container - your settings were saved in the configured "config" location
docker rm nzbget
# add new mount location (media) then deploy nzbget container again
# as the container is build it will look for updates as well
docker run -d --restart=unless-stopped \
--name nzbget \
-p 6789:6789 \
-e UMASK=002 -e TZ="America/Denver" \
-v /opt/nzbget:/config \
-v /opt/utility:/utility \
-v /opt/media:/media \
hotio/nzbget:latest
You would like to install a different version? Perhaps you need to know what version you have right now if
"docker images" only shows "latest".
# docker images only shows "latest" under TAGS
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hotio/overseerr latest e5a53c0a5afb 3 days ago 1.32GB
hotio/radarr latest 696871c89ef3 5 days ago 247MB
hotio/sonarr latest bdd448f1c3ae 5 days ago 374MB
hotio/nzbget latest a592e2f8f7b2 5 days ago 104MB
# use "docker inspect <image name or id> and grep for "version"
docker inspect nzbget | grep version
"org.opencontainers.image.version": "21.1"
# you want to install the "testing" TAG version "21.2-testing-r2333"
docker stop nzbget
docker rm nzbget
docker image rm hotio/nzbget
# validate the image has been removed
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hotio/overseerr latest e5a53c0a5afb 3 days ago 1.32GB
hotio/radarr latest 696871c89ef3 5 days ago 247MB
hotio/sonarr latest bdd448f1c3ae 5 days ago 374MB
# on the last line, replace "latest" with the TAG you want and build it
docker run -d --restart=unless-stopped \
--name nzbget \
-p 6789:6789 \
-e UMASK=002 -e TZ="America/Denver" \
-v /opt/nzbget:/config \
-v /opt/utility:/utility \
-v /opt/media:/media \
hotio/nzbget:testing
I hope this was helpful!
:)