Below are instructions for Debian / Ubuntu operating system, but docker can be natively run on any linux distro
and if you have Windows or Mac - you can use for tools like Docker Desktop to run docker containers.
We will install docker and docker compose using this: LINK
So - go to Install (on the left) to Plugin - scroll down to Install using the Repository – Ubuntu (unless you install on other OS):
You should be in THIS LOCATION
Copy ALL those commands that are listed there, sth like:
# Add Docker's official GPG key:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
Then run:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl status docker
sudo docker run hello-world
To test if docker compose has been installed, run :
docker compose
You should get a lot of command arguments including 'version' one, so run again:
docker compose version
That will show all works as expected.
Create folder structure as per this TRASH GUIDE now:
sudo mkdir -p /data/{torrents/{tv,movies,music},media/{tv,movies,music}}
sudo apt install tree
tree /data
sudo chown -R 1000:1000 /data
sudo chmod -R a=,a+rX,u+w,g+w /data
ls -ln /data
(If you use torrents + Usenet client like NZBGet or SABnzbd then you need to use
mkdir -p /data/{usenet/{incomplete,complete}/{tv,movies,music},media/{tv,movies,music}} instead in that 1st first line)
Trash guide docker-compose configuration can be found HERE (scroll down a bit)
You can find more information on SERVARR
My docker-compose.yml file can be found HERE
You can use command like git clone https://github.com/automation-avenue/arr-new.git or simply copy that docker-compose file from that repo:
sudo nano docker-compose.yml - and paste it
Note that hostnames are not needed here as we have dedicated network for our containers
You should be able to run all services now with simple sudo docker compose up -d :)
Now you need to ensure your internal application settings match, for example:
- Radarr: Inside the web UI, your "Root Folder" for your library should be
/data/media/movies(/data/media/tvfor Sonarr and/data/media/musicfor Lidarr). - qBittorrent: Your download path should be set to
/data/torrents - because both paths are on the same mount (
/data), the OS treats them as the same file system, enabling instant hard links (also known as atomic moves)
Let's configure that all:
Check logs for qbittorrent container:
sudo docker logs qbittorrent
You will see in the logs something like:
The WebUI administrator username is: admin
The WebUI administrator password was not set. A temporary password is provided for this session:
Now you can go to URL:
If you are on the host: http://localhost:8080
From other device on your network: http://<host ip address>:8080
and log on using details provided in container logs.
Go to Tools - Options - WebUI - you can change the user and password here but remember to scroll down and save it.
In left panel go to Categories - All - right click and 'add category':
For Radarr: Category: movies
Save Path: movies (this will be appended to '/data/torrents/ Default Save Path you set above)
For Sonarr: Category: tv
Save Path: tv
For Lidarr: Category: music
Save Path: music
Create categories first and only then configure the steps below, as doing it opposite way round caused the Categories to disappear :)
With categories created - go to - Tools - Options - Downloads and in Saving Management make sure your settings match THIS
So Default Torrent Management Mode - Automatic
When Torrent Category changed - Relocate torrent
When Default Save Path Changed - Switch affected torrents to Manual Mode
When Category Save Path Changed - Switch affected torrents to Manual Mode
Tick BOTH BOXES for Use Subcategories and Use Category paths in Manual Mode (NOT shown on Trash Guides)
Default Save Path: - set to /data/torrents (so it matches your folder structure) - then scroll down and Save.
On Trash Guides it shows Copy .torrent files to but its optional, you can leave it blank
If you still have problems with adding categories, you can use different image like the one below:
qbittorrent:
<<: *common-keys
container_name: qbittorrent
image: ghcr.io/qbittorrent/docker-qbittorrent-nox:latest
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp
environment:
- QBT_LEGAL_NOTICE=confirm
- WEBUI_PORT=8080
- TORRENTING_PORT=6881
volumes:
- /etc/localtime:/etc/localtime:ro
- /docker/appdata/qbittorrent:/config
- /data:/data
Thats it for qBittorrent.
Now configure Prowlarr service (each of these services will require to set up user/pass):
Use 'Form (login page) authentication and set your user and pass for all.
http://<host_ip>:9696
Go to Settings - Download Clients - + symbol - Add download client - choose qBittorrent (unless you decided touse different download client)
UNTICK the Use SSL (unless you have SSL configured in qBittorrent - Tools - Options -WebUI but by default it is not used)
Host - use qbittorrent and port - put the port id matching the WebUI in docker-compose for qBittorrent (default is 8080)
username and password - use the one that you configured for qBittorrent in previous step
Click little Test button at the bottom, make sure you get a green tick then Save.
http://<host_ip>:7878
Go to Settings - Media Management - Add Root Folder (scroll down to the bottom) - set /data/media/movies as your root folder
Still in Settings - Media Management - click Show Advanced - Importing - Use Hardlinks instead of Copy - make sure its 'ticked'
Optional - you can also tick Rename Movies and Delete empty movie folders during disk scan , and in Import Extra Files - make sure that box is ticked
and in Import Extra files field type srt,sub,nfo (those 3 changes are all optional)
Then Settings- Download clients - click plus symbol, choose qBittorrent etc - basically same steps as for Prowlarr
so Host qbittorrent, port 8080, ,make sure SSL is unticked, username admin and password - one you configured for qBittorrent
and change the Category to movies (needs to match qbittorrent Category)
Now click the Test and if you have green 'tick' - Save.
Now go to Settings - General - scroll down to API key - Copy API key - go back to Prowlarr - Settings - Apps -click + - Radarr - paste API key.
Then change Prowlarr Server to http://prowlarr:9696 and Radarr Server to http://radarr:7878
Click Test and if Green - Save
BTW - you can see how to configure each service for hardlinks HERE
You need to configure SABnzbd / qbittorrent and any other services you run too, not only Radarr or Sonarr
http://<host_ip>:8989
Go to Settings - Media Management - Add Root Folder - set /data/media/tv as your root folder
Still in Settings - Media Management - Show Advanced - Importing - Use Hardlinks instead of Copy - make sure its 'ticked'
Optional - you can also tick Rename Episodes and Delete empty Folders - delete empty series and season folders during disk scan
Then in Import Extra Files - make sure that box is ticked and in Import Extra files field type srt,sub,nfo (those 3 changes are all optional)
Then Settings- Download clients - click plus symbol, choose qBittorrent etc - basically same steps as for previous services
Host qbittorrent, port 8080, ,make sure SSL is unticked, username admin and password - one you configured for qBittorrent
and change the Category to 'tv' (by default its 'tv-sonarr', but you need to match qbittorrent Category)
Now click the 'Test' and if you have green 'tick' - Save.
Now go to Settings - General - scroll down to API key - Copy API key - go back to Prowlarr - Settings - Apps -click '+' - Sonarr - paste API key.
Then change Prowlarr Server to http://prowlarr:9696 and Sonarr Server to http://sonarr:8989
Click Test and if Green - Save
http://<host_ip>:8686
Go to Settings - Media Management - Add Root Folder - set path to /data/media/music as your root folder, set name to Root or whatever and save
Then Settings- Download clients - click 'plus' symbol, choose qBittorrent etc - basically same steps as for previous services
Host 'qbittorrent', port 8080, ,make sure SSL is unticked, username admin and password - one you configured for qBittorrent
and change the Category to 'music' (by default its 'lidarr', but you need to match qbittorrent Category)
Now click the 'Test' and if you have green 'tick' - Save.
Now go to Settings - General - scroll down to API key - Copy API key - go back to Prowlarr - Settings - Apps -click '+' - Sonarr - paste API key.
Then change Prowlarr Server to http://prowlarr:9696 and Lidarr Server to http://lidarr:8686
Click Test and if Green - Save
http://host_ip>:6767
Languages: Go to Settings > Languages and create a "Language Profile" (e.g., "English" or "Any").
Providers: Go to Settings > Providers and add your subtitle sources (OpenSubtitles.org, Subscene, etc.). Most require a free account.
Sync: After connecting Radarr/Sonarr, go to the Series or Movies tab and click "Update" to pull in your existing library.
It might be a good idea to restart all services and see if they come up as expected:
sudo docker compose down
sudo docker compose up -d
If the first line that says :
`WARN[0000] No services to build` - this message is actually expected here.
That should be it, you just need to add some indexers to Prowlarr.
You can add more indexers - just google for something like 'what are the best legal indexers for Prowlarr' or something similar.
It is a common misconception that the "Arr" stack is only for pirated content.
In reality, these are powerful automation tools for managing media, and there is a wealth of legal, copyright-free, and open-source content you can use them for.
In Radarr, you can download movies that have entered the Public Domain or are released under Creative Commons licenses.
Public Domain Classics: These are "Golden Age" movies where the copyright was not renewed like:
Night of the Living Dead (1968), His Girl Friday (1940), Charade (1963), and The General (1926).
Configure Prowlarr with The "Gold Standard" Indexer for legal media like The Internet Archive (Archive.org).
They host thousands of public domain movies.
http://<host ip address>:8096
To watch your movies, just log on to Jellyfin, create user and password and you can Add Media Library.
For Content Type - choose Movies and find folder /data/media/movies.
Add more content types like TV or Music accordingly, binding them to correct media folder.
Test if your containers use CloudFlare DNS (configured in docker-compose.yml file):
sudo docker exec -it radarr cat /etc/resolv.conf
Check if the hardlinks work as expected:
Go to /data folder on your host and run tree and du -sch * commands to see the folder structure.
Find the same file in torrents and media that you have just downloaded and run commands:
ls -i /data/media/movies/<your video> and check its inode id (in first column, like 3881112)
Then run again the same command but for the torrent folder:
ls -i /data/torrents/movies/<your video> and see if the inode id is the same as above.
If they are - your hardlinks work as expected.
If they don't - first go to logs to see what is the problem (for Radarr/Sonarr go to System - Log Files)
If you have issue where the file is copied rather than hardlinked, then the most probable cause
is the read/write permission on either source or destination, but that can all be found in those logs so start there.
If the video does not move automatically from torrents to media, then check the Activity - Queue.
You might have a flag saying: 'Downloaded - Unable to Import Automatically'
Click the Manual Import (icon that looks like human head on the far right of the item row)
Confirm the Movie: In the popup, ensure the correct movie is selected in the dropdown. If it is correct, click 'Import'
You might want to add FlareSolverr if you find Prowlarr is failing to index some sites due to "Cloudflare" blocks:
###################################
# FLARESOLVERR - Cloudflare Bypass
###################################
flaresolverr:
<<: *common-keys
container_name: flaresolverr
image: ghcr.io/flaresolverr/flaresolverr:latest
ports:
- 8191:8191
environment:
- LOG_LEVEL=info
Once the container is running, you need to tell Prowlarr to use it:
- Open your Prowlarr Web UI (http://localhost:9696)
- Go to Settings > Indexers.
- Click the + (Add) button under Indexer Proxies and select FlareSolverr.
- Fill in the details:
- Name: FlareSolverr
- Host: http://flaresolverr:8191 (Note: Using the service name flaresolverr works because they are on the same Docker network).
- Tags: Give it a tag like cloudflare (this is important).
- Save the proxy
For Jellyfin hardware acceleration you might want to add bottom 2 lines:
jellyfin:
<<: *common-keys
<...snip...>
devices:
- /dev/dri:/dev/dri # << container setting to pass through GPU (this requires more steps outside of docker compose though)
If you use SABnzbd instead of qBittorrent then you need to add that to your yml file:
sabnzbd:
container_name: sabnzbd
image: ghcr.io/hotio/sabnzbd:latest
ports:
- 8080:8080
- 9090:9090
volumes:
- /etc/localtime:/etc/localtime:ro
- /docker/appdata/sabnzbd:/config
- /data:/data
Note that if you want to run both - qBittorrent AND sabnzbd - then you will have conflict for port 8080
as that port is also utilized by qBittorrent.
You will need to change the external port for one of the services to something not used, for example:
ports:
- 8081:8080
For sabnzbd you can use folder structure shown HERE
and then assign categories (similar to what we did in qbittorrent) following THIS GUIDE