I will be using Ubuntuserver in this guide. You can select whatever linux distro you prefer.
Download ubuntu server from https://ubuntu.com/download/server. Create a bootable USB drive using rufus or any other software(I prefer ventoy). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check "Install OpenSSH server". Don't install docker during the setup as the snap version is installed.
Once installation finishes you can now reboot and connect to your machine remotely using ssh.
ssh username@server-ip
# username you selected during installation
# Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.
Create the directories for audiobooks, books, movies, music and tv.
I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.
We will be using hardlinks so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the trash-guides to have a better understanding.
mkdir ~/server
mkdir ~/server/media # Media directory
mkdir ~/server/torrents # Torrents
# Creating the directories for torrents
cd ~/server/torrents
mkdir audiobooks books incomplete movies music tv
cd ~/server/media
mkdir audiobooks books movies music tv
Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.
There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn't work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.
Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.
I personally only use jellyfin because it's completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that's the only role plex has in my setup.
I will talk about the devices section later on.
For the media volume you only need to provide access to the /data/media directory instead of /data as jellyfin doesn't need to know about the torrents.
As I mentioned in the jellyfin section there is a section in the conmpose file as "devices". It is used for transcoding. If you don't include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.
The default username is admin and password adminadmin. You can change the user and password by going to Tools → Options → WebUI
Change "Default Save Path" in WebUI section to /data/torrents/ and "Keep incomplete torrents in" to /data/torrents/incomplete/
Create categories by right clicking on sidebar under category. Type category as TV and path as tv. Path needs to be same as the folder you created to store your media. Similarly for movies type Movies as category and path as movies. This will enable to automatically move the media to its correct folder.
Sonarr
Navigate to YOUR_SERVER_IP:8989
Under "Download Clients" add qbittorrent. Enter the host as YOUR_SERVER_IP port as **8080,** and the username and password you used for qbittorrent. In category type TV (or whatever you selected as categoryname(not path) on qbittorent). Test the connection and then save.
Under indexers, for each indexer you added in Jackett
Click on add button
Select Torzab
Copy the tornzab feed for the indexer from jackett
Copy the api key from jackett
Select the categories you want
Test and save
Under general, define the root folder as /data/media/tv
Repeat this process for Radarr, Lidarr and readarr.
Use /data/media/movies as root for Radarr and so on.
The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.
Bazarr
Navigate to YOUR_SERVER_IP:6767
Go to settings and then sonarr. Enter the host as YOUR_SERVER_IP port as 8989. Copy the api key from sonarr settings→general.
Similarly for radarr, enter the host as YOUR_SERVER_IP port as 7878. Copy the api key from radarr settings→general.
Jellyfin
Go to YOUR_SERVER_IP:8096
Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from /data/media. Repeat this for movies, tv, music, books and audiobooks.
Go to dashboard→playback, and enable transcoding by selecting as VAAPI and enter the device as /dev/dri/renderD128
Monitor GPU usage while playing content using
sudo intel_gpu_top
Heimdall
Navigate to YOUR_SERVER_IP:8090
Setup all the services you use so you don't need to remember the ports like I showed in the first screenshot.
Updating docker images
With docker compose updates are very easy.
Navigate to the compose file directory ~/server/compose/media-server.
Then docker-compose pull to download the latest images.
And finally docker-compose up -d to use the latest images.
Remove old images by docker system prune -a
What's next
You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don't use VPN for my server, so I have left out the VPN part.
You can read about port forwarding to access your server over the internet.
Yet... I don't get why using the *Arr stack and Plex is so popular. Plex is annoying as fuck and tries to shill you their paid bullshit at every corner. The Arr stack is buggy and having a separate system for recommendations and requests and for library management is super cumbersome for me. Compare that with Stremio... I could never convince the wife to use Plex with overseer at all. Stremio is super convenient.
Im just saying this because I spent my weekend getting another Arr stack running after years of absence and noticed that the whole thing is as convoluted and fiddly as ever and that really got me wondering why people just take this as the industry standard for torrenting.
I might just do that when I find the time. It's way too unknown imho. Yes, it's not the right choice if you want to keep everything you watched, but for everything you want to watch once and be done with, it's a better solution in my opinion.
Thanks for putting this together. I am currently looking to build a self hosted media server and I think you may have just convinced me to go with the build you wrote up
People keep saying this about Plex, yet I’ve received one pop up about paying them during the last 6 months. That was while I tried to use a pay feature. Not once otherwise.
There are plenty of apps that I can’t use due to their annoyance when you’re in the free tier. Plex have not bothered me in the least.
Why am I not using streamio? Well, we have an Apple TV so that’s tough. Might get something else down the line, but I pirate to save money, not to save money on entertainment and spend it on equipment instead.
It kept adding its own menu items / sections to my home screen with its shilled content like some annoying TV streams etc. Ever so often after updates etc it would keep adding it back
It phones home
Their servers has been hacked at least two times
They dealt poorly with the hacks so I don’t trust them to know anything about my content or usage
Their last hack was the straw for me. I have a lifetime Plex Pass. I still refuse to use Plex anymore.
From my experience, their communication about the last security breach was slow, lackluster and left me wanting. End result was that I did no longer trust them. In reality I may have been biased and already subconsciously made up my mind about their trustworthiness. Everyone have to make their own opinion and decisions.
lol that’s funny, didn’t know that was the cause for the latest LastPass breach. I just noped tf out of LastPass after that without looking back.
No I was just referring to their breach in August 2022 where I guess I was annoyed that they didn’t just invalidate/reset everyone’s password immediately. Instead, everyone had to try do to it on their servers, which couldn’t handle the traffic, so then a lot were either unable to reset password, unable to set new one, unable to reclaim server etc.
Also, when trying to calm us with mentioning everything they didn’t think was affected by the breach, it just made me realize that I’m done letting a company like Plex have all that data available to me.
Finally, they have to my knowledge still not acknowledged how the breach took place, just that they have taken steps to avoid it in the future.
It's not just popups, it's the irrelevant bullshit that clutters up the UI.
It's that they're "pushing". A lot of people have an inherent dislike of having shit pushed on them, regardless of how extreme or avoidable it is. Plex absolutely pushes their services in the way they design their UI.
It's your library, afterall. It's your computer doing the work, your Internet connection being streamed from, your network it's running on. It's not unreasonable to want your library to not be put next to garbage you didn't put there.
Also, your kidding yourself if you don't think Plex is going to get progressively worse and more pushy. They are on a very clear trajectory, it's just a matter of time.
On AndroidTV, Kodi (formerly XBMC) with the Jellyfin addon (or Jellycon addon if you're only casting from another client, and don't need to sync the libraries) is still a much better video player than the Jellyfin app for AndroidTV imo. It's more versatile regarding video codecs, and so much more customizable. Also, I really like the Arctic Zephyr skin!
I wasn't doing the whole "self host thing", and just running things as needed, but I still got to a point where I questioned why I needed those for. I basically could do things faster by just manually searching on qBit's external gui attached to Jackett's trackers. The extra *arr step just made it more fiddly to setup, and gave me less control on the output.
Because if you are using Stremio (without Debris) sometimes you have to wait a long time for it to download the torrent and sometimes it doesn't even load. I use Stremio when I want to watch the first episode of something and if I decide I want to watch the rest I add it trough Sonarr