Guide: Arr-Stack + qBitTorrent using Docker-Compose
With a whole slew of new reasons on why subscribing to streaming services WILL give you worse services than NOT subscribing to them, i think it's time to write a new up-to-date guide on how to install and configure an Arr-Stack + qBitTorrent via Docker-Compose.
0. Preamble
All these guides assume you have basic knowledge about docker & docker compose. To quickly summarize the methods here:
You either use a webui to manage your docker-compose like Dockge or you create a folder and a docker-compose.yaml for each service listed here and copy the contents of each of them into that docker-compose.yaml; IMPORTANT: You HAVE to name them docker-compose.yaml exactly like that. Do NOT name them radarr.yaml for example. After you created a docker-compose.yaml and filled it with the contents here, you simply run docker compose up -d
I specifically did NOT route all those docker-compose files through a VPN container like Gluetun. In my case i have my Mullvad VPN setup on my router directly and selected the whole server to be tunneled through that VPN.
You can add a VPN container to your setup and route all the docker compose files through that. But i will not go through this on this guide. There are guides out there how to do that and you can even ask any big enough LLM as this isn't really that complicated.
Just as a simple run through. Install Gluetun as an additional docker container and append network_mode: "container:gluetun" at the end of every docker-compose.yaml here according to the gluetun readme. You also have to remove all the ports: sections in the docker-compose.yamls of each service because it will throw an error if you use the network_mode: and you then have to add the ports of each service into the gluetun docker-compose.yaml.
You can then start a console for each docker container and check if the outside world IP adress is NOT your real one with curl ipinfo.io
For every configuration step in this guide where it says "ipofyourserver" for sonarr, radarr, etc. you will have to change that to 127.0.0.1 as they all run inside the same network of gluetun.
This is a super super quick run through and you HAVE to properly configure gluetun and run tests that stopping that container does NOT let your real IP go through.
1. Folder Structure
If you want to store all your media on a NAS or some other external drive, make sure it is configured properly for symlinking / hardlinking and that you have proper permissions for this storage. Everything here will run with the 1000 user and has to create new files to work.
So this is the folder structure i use. And it is stored on a NFS-Share coming from my TrueNAS.
arr-stack (for this example let's say it's located in /mnt/arr-stack)
|---- media
|---- movies
|---- shows
|---- music
|---- etc.
|---- configs
|---- radarr
|---- sonarr
|---- qbittorrent
|---- etc.
|---- torrents
|---- complete
I intentionally broke out the torrent folder to make it easier accessible for when you download something fully manual and you want to grab it out of the 'completed' folder without searching too deep.
2. Docker-Compose Files for each service
qBitTorrent is the download application for Usenet. Alternatively you can use NZBget but i find Sab to be more modern, versatile and i just like it.
Radarr and Sonarr are the applications that will actually find and track your Movies (Radarr) and Shows (Sonarr). Additionally there is Lidarr for Music and Whisparr for porn.
Prowlarr is the application where you can configure your usenet sites. There you will put in the URLs of your Indexers like Drunkenslug and your API keys for those sites. Prowlarr will periodically check the availability of those services and will sync these accounts to all your connected services (Radarr, Sonarr, Lidarr, Whisparr, etc.). Prowlarr will then be doing the actual heavy lifting of accessing the API of any Usenet and search for your stuff.
Type in the name of your indexer. Many of the big ones will be pre configures
Example: The Pirate Bay
Click on the entry
Check "Enable"
Sync Profile "Standard"
Under Base URL select the first one (you may have to cycle through if one of them doesn't work)
Enter your Seed Ratio
Test and Save
Prowlarr will now test and sync the indexers to your other apps like Sonarr and Radarr. Manually click on Test all Inders and then on Sync all Indexers. Now go back to Sonarr and Radarr and click on Settings -> Indexers and check if Drunkenslug (in our example) shows up there.
4. You're done
Now this is obviously just the tip of the iceberg. You still don't have "finetuned" profiles and explaining these would absolutely blow up the scope of this post.
Your -arrs see the torrent download folder as /mnt/arr-stack/torrents/completed, and qBittorrent sees it as /downloads.
Maybe this is only a problem with Transmission, but I've had trouble making my Arr stack play nice with torrents when the different apps think downloads live in different folders.
I have tried it like that before writing the guide and it didn't cause issues.
But yes, if it does one could simply mount the whole base folder and navigate from there
Well it isn't really that hard techznically, but you have to be really sure it actually works and that's the hard part.
You can look into "Gluetun". It is a small docker service that supports PIA. You will have to put this and the rest of the ARR stack into the same "docker network" and configure it so that radarr, etc. go through Gluetun and use it's VPN.
You can then open a terminal for the radarr container for example and run curl ipinfo.io for example to check the IP adress that container has to the outside world.
I didn't do that whole gluetun setup in quite a while so i'm not really in the position to give a proper guide on how to route your docker containers through it. But there are guides out there that will definetely help.
Testing that it's failproof would be for example run while sleep 5; do clear && curl ipinfo.io; done which shows your outside world IP for that container once per 5 seconds. Then stopping that gluetun container and look if the radarr container stops the ping and / or suddenly shows your real IP.
EDIT: found a quick readme for the gluetun container that shows how to route other containers through it
Saved for later, I've been meaning to look into getting this going. Any suggestions on storage solutions to hook to an rpi? I just have a 1tb external on it right now so obv that'd fill up pretty quick lol
I don't think a raspberry pi is really suitable for huge amounts of storage. Ideally you should prefer some proper NAS device that also does some proper RAID configuration.
I also highly recommend the mobile app called LunaSea as an alternative for nzb360.
LunaSea is a fully featured, open source self-hosted controller focused on giving you a seamless experience between all of your self-hosted media software remotely on your devices.