Skip to content

Arr’s Media Project – Radarr, Sonarr, Lidarr, Prowlarr, Bazarr, Readarr in Container Manager on a Synology NAS

Important or Recent Updates
Historic UpdatesDate
New guide13/09/2023
Added additional security option to the compose to restrict the container from gaining new privileges as well as umask variable25/10/2023
Adjusted the restart variable to make sure containers start on boot28/10/2023
Historic Updates

This guide is going to eventually replace the existing separate guides for all the apps in the title. By combining these into a single project it saves you time and effort in the initial set up and makes updates more seamless.

You can add and remove the containers from this project based on your preferences.

Migration from old guides.

If you followed my older guides where you set up each of these containers in the Container Manager UI or Pre DSM7.2 Docker UI you can follow this one to migrate in a couple of steps.

  1. Stop and delete the existing containers but keep your directories!
  2. Follow the rest of this guide and all your existing configs will be kept using your old files.

Settings for the Arrs

While I cover some very basics towards the end of the guide you really need to make use of the documentation, it goes into detail of how and why the core functions work across the apps. You can find it on the Servarr Wiki.

Let’s Begin

In order for you to successfully use this guide please complete the three initial setup guides if you have not done so already

As Container Manager now supports using Docker Compose in the UI we will be using it as it will save you lots of time and steps!

What on earth is a Docker Compose?
Docker Compose allows us to define how Docker should set up one or more containers within a single configuration file. This file is yaml formatted and Container Manager uses the Projects feature to manage them.


Folder Setup

First we need to set up some folders for the Arr’s to save their configuration files and also where the Project will save the compose.

Using File Station create the following folders. (Skip ones you don’t need)

Folders
/docker/projects/arrs-compose - Required
/docker/radarr
/docker/sonarr
/docker/lidarr
/docker/prowlarr
/docker/bazarr
/docker/readarr

Container Set Up

Next we are going to set up a ‘Project’ in Container Manager. Open up Container Manager and click on Project, then on the right-hand side click ‘Create’.

In the next screen we will set up our General Settings.

SectionSetting
Project Name:media-project
Path:/docker/projects/arrs-compose
Source:Create docker-compose.yml

Next we are going to drop in our docker compose configuration, copy all the code in the box below and paste it into line ‘1’

A couple of notes:

  • I personally use the Linuxserver images, so they are used below
  • I am pulling these images directly from Docker Hub and not lscr.io this is because container manager can’t check for updates on third party sites
  • You will see notes saying #change me we will do this on the next step, and you can remove the comments if you wish
YAML
services:
  sonarr:
    image: linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1234 #CHANGE_TO_YOUR_UID
      - PGID=65432 #CHANGE_TO_YOUR_GID
      - TZ=Europe/London #CHANGE_TO_YOUR_TZ
      - UMASK=022
    volumes:
      - /volume1/docker/sonarr:/config
      - /volume1/data:/data
    ports:
      - 8989:8989/tcp
    network_mode: synobridge
    security_opt:
      - no-new-privileges:true
    restart: always
  
  lidarr:
    image: linuxserver/lidarr:latest
    container_name: lidarr
    environment:
      - PUID=1234 #CHANGE_TO_YOUR_UID
      - PGID=65432 #CHANGE_TO_YOUR_GID
      - TZ=Europe/London #CHANGE_TO_YOUR_TZ
      - UMASK=022
    volumes:
      - /volume1/docker/lidarr:/config
      - /volume1/data:/data
    ports:
      - 8686:8686/tcp
    network_mode: synobridge
    security_opt:
      - no-new-privileges:true
    restart: always   
    
  radarr:
    image: linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1234 #CHANGE_TO_YOUR_UID
      - PGID=65432 #CHANGE_TO_YOUR_GID
      - TZ=Europe/London #CHANGE_TO_YOUR_TZ
      - UMASK=022
    volumes:
      - /volume1/docker/radarr:/config
      - /volume1/data:/data
    ports:
      - 7878:7878/tcp
    network_mode: synobridge
    security_opt:
      - no-new-privileges:true
    restart: always

  readarr:
    image: linuxserver/readarr:develop
    container_name: readarr
    environment:
      - PUID=1234 #CHANGE_TO_YOUR_UID
      - PGID=65432 #CHANGE_TO_YOUR_GID
      - TZ=Europe/London #CHANGE_TO_YOUR_TZ
      - UMASK=022
    volumes:
      - /volume1/docker/readarr:/config
      - /volume1/data/:/data
    ports:
      - 8787:8787/tcp
    network_mode: synobridge
    security_opt:
      - no-new-privileges:true
    restart: always

  bazarr:
    image: linuxserver/bazarr:latest
    container_name: bazarr
    environment:
      - PUID=1234 #CHANGE_TO_YOUR_UID
      - PGID=65432 #CHANGE_TO_YOUR_GID
      - TZ=Europe/London #CHANGE_TO_YOUR_TZ
      - UMASK=022
    volumes:
      - /volume1/docker/bazarr:/config
      - /volume1/data/:/data
    ports:
      - 6767:6767/tcp
    network_mode: synobridge
    security_opt:
      - no-new-privileges:true
    restart: always

I have split out Prowlarr as you may want this running on a VPN connection if your ISP blocks certain indexers. If not copy this section into your compose as well. See my Gluetun guides for more information on adding to a VPN.

YAML
  prowlarr:
    image: linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=1234 #CHANGE_TO_YOUR_UID
      - PGID=65432 #CHANGE_TO_YOUR_GID
      - TZ=Europe/London #CHANGE_TO_YOUR_TZ
      - UMASK=022
    volumes:
      - /volume1/docker/prowlarr:/config
    ports:
      - 9696:9696/tcp
    network_mode: synobridge
    security_opt:
      - no-new-privileges:true
    restart: always

Editing the Compose & Environment Variables

Please keep in mind that yaml formatting is very specific, so keep things lined up as per the original.

The compose contains all the Arr’s in the overall stack, you can remove any you don’t plan on using by deleting their entire section in the code.

We need to make some minor edits to the compose file in order to make sure the containers use the ‘dockerlimited’ user we created earlier and also let them know which timezone we are located. You will need to edit these in each section noted with ‘#change me’

VariableValue
PUID=Change it to the UID you obtained earlier in the first setup guides
PGID=Change it to the GID you obtained earlier in the first setup guides
TZ=You will need to change this line to your own timezone code – you can find the correct list of ones to use on wikipedia.org/wiki/List_of_tz_database_time_zones
Key Edits

Once you have made all your required edits click ‘Next’

Nothing to change on the next screen click ‘Next’ again..

On the final screen just click ‘Done’ and you will see a new window appear which will kick of downloading of the required container image and configure the containers.

This can take a couple of minutes to finish as all the images are downloaded and extracted. You should see ‘Code 0’ when it has finished.

Once finished you will see the Project is running with a green status.


Firewall Exceptions

(Skip if you don’t have the Firewall configured)

If you have enabled and configured the Synology Firewall you will need to create exceptions for any containers that have a Web UI or have any incoming or outgoing connections. This section covers the basics of how to add these. (Please note this is a generic section and will not show the specific ports used in this guide however it applies in the same way)

Also, I would like to refer people to the great guide on getting the Firewall correctly configured over on WunderTechs site.

Head into the Control Panel> Security > Firewall, from here click Edit Rules for the profile you set up when you enabled the Firewall.

Next click on Create and you will see the screen below. Source IP and Action will be automatically selected to All and Allow, I will leave it up to you as to your own preference on whether you want to lock down specific Source IPs from having access. In this example we will leave as All.

You will now choose ‘Custom‘ and then the Custom button

Now select Destination from the drop-down menu, most web based containers require TCP access but check the guide as it will show the port and protocol. Then add comma separated ports. Then press OK.

Click OK a couple of times to get back to the main screen. You will see by default the new rule is added to the bottom of the list. You must always have your Block All rule last in the list as the rules are applied top down so move your container up.

You have now completed the Firewall changes and can continue with the guide.

Containers are ready to use

You will now be able to access each of the containers on their respective ports.

AppPort used
LidarrNASIP:8686
RadarrNASIP:7878
SonarrNASIP:8989
ReadarrNASIP:8787
BazarrNASIP:6767
ProwlarrNASIP:9696

Please see the next section which covers the ‘basics’ of each application setup as these usually catch people out. Full documentation can be found on https://wiki.servarr.com/

Key Settings within the Arrs

Settings > Media Management > Root Folders

Each of the Arr’s refer to the place(s) you keep your media as ‘Root Folders’. These are where the app will ultimately move your music/movies/books/shows once they finish downloading. Use the table below to set each of your folders correctly.

AppRoot Folder
Lidarr/data/media/music
Radarr/data/media/movies
Sonarr/data/media/tv
Readarr/data/media/books
BazarrNot required
ProwlarrNot required

Settings > Media Management > Remote Path Mappings

While most of the settings on this page are self-explanatory something that has caught people out is the Remote Path Mappings setting. If you are hosting all your services on the same NAS and in Docker do not add any settings here.

Settings > Download Client(s) > Add your Client > Host and Port

As our containers are all running on the ‘Synobridge’ custom bridge we can use the Gateway IP for this bridge for inter container networking. This will be 172.20.0.1 and the appropriate port for your Client assuming it is running in Docker!

You should now have the basics in place and I 100% recommend having a look at the previously mentioned https://wiki.servarr.com/ documentation as it will help you understand how the Arrs work.



Buy Me a Coffee or a Beer

If you have found my site useful please consider pinging me a tip as it helps cover the cost of running things or just lets me get the odd beverage. Plus 10% goes to the devs of the apps I do guides for every year.

Published inMedia Management 7.2

139 Comments

  1. TJ TJ

    Hi Thank you for the guide, I can’t find the following paths

    > Download Client > Client IP and Port

    and

    > Settings > Indexers

    • Dr_Frankenstein Dr_Frankenstein

      These should be settings within the Arrs themselves, they can vary a little between versions but essentially the settings themselves are the same.

      • TJ TJ

        Hi Thank you for your reply.

        I have gone through all the arrs and there is no such option that I can see called “client IP and Port” under Download client. Also can’t find where to enter Gateway IP under indexers.

        Thanks

        • Dr_Frankenstein Dr_Frankenstein

          Hey, I will reword this section of the guide and add some screenshots. Essentially the options are when you add a download client it will ask you to enter an ip address or hostname.

          Will get on it tonight after work.

          • TJ TJ

            Hi thank you.

            I have managed to set up the download client. However, I still don’t understand the indexer part. I have prowlarr installed following your guide. I have connected both radarr and sonarr in prowlarr. But where do I add “Gateway IP of 172.20.0.1 for your connection to Prowlarr if you are using it.”

            • Dr_Frankenstein Dr_Frankenstein

              Edited after my initial reply..

              I think I need to lay off the coffee!

              “As per the Download client settings use the Gateway IP of 172.20.0.1 for your connection to Prowlarr to each of the arrs if you are using it.”
              “As per the Download client settings use the Gateway IP of 172.20.0.1 for your connection from Prowlarr to each of the arrs if you are using it.”

              Within Prowlarr once you have added each of the Arrs it will sync the indexers you configure to each app on a schedule nothing more to do with Radarr etc.

  2. Michael Michael

    Maybe unrelated question, but i dont know where to ask it.

    Assuming i set up the Arr project and a torrent downloader (most likely qbittorrent) with vpn.

    How would i use the qbittorrent for videos/stuff which i dont want to have within the arrs? I do however want to download it with qbittorrent because of the VPN.

    I also dont want to make a separate container for qbittorrent as i would only use it occassionally and would then be ok with manually moving the files where i want them.

    Is that possible? Maybe i just overread it or missed a crucial part

    • Dr_Frankenstein Dr_Frankenstein

      Hey

      So as long as those additional downloads are not tagged/categorised for Radarr/Sonarr then it will not import them.

  3. Rob Rob

    Hey Doc
    Hope you’re well, and thanks for all the assistance with your guides.

    I’m running a DS1821+ and Radarr seems to be having issues with SQLite ‘database is locked’ errors during ‘refresh movie’ (either manually or the daily automated task. In researching this, it seems that it’s due to problems with SQLite via SMB or NFS (if you use it). This grinds my NAS to a crawl until it’s worked it’s way right through the entire movie list, failing at random movies.

    Is there a way to set Radarr to directly access the docker /config directory directly to improve SQLite performance ?

    See: https://www.reddit.com/r/radarr/comments/b150np/docker_radarr_and_sonarr_database_locked/
    I’m not running NFS, but instead standard SMB.

    Many thanks

    • Dr_Frankenstein Dr_Frankenstein

      Hey, they are two unrelated issues you are running in Docker which is directly accessing the filesystem so no relation to SMB. I have had 3 others with the same issue and we think this must be an upstream change as went from no issues to lots in the course of a few days. Some people have reported moving to the nightly version fixes it. Someone else disabled there SSD read cache and it went away.

      I will reply again a little later but I think it might be worth rolling back to a known working version from maybe a month ago. I am mobile at the moment so shorter reply.

      I have even seen random locks on my 1821 with read/write cache so feels like something is not right.

  4. sean payne sean payne

    Everything apart from Sonarr is working, it wont connect to any indexers or the download client. any ideas on how to fix this please

    • Dr_Frankenstein Dr_Frankenstein

      Got to love it when everything works apart from one thing! – Are you using the IP 172.20.0.1 as suggested at the end of the guide.

  5. Wally Wally

    Hey Doc!
    Have you had much experience with separate pools (ie. an additional pool added to a previous setup) and how to redirect downloads/media to the new(bigger) pool?

    • Dr_Frankenstein Dr_Frankenstein

      Hey

      You can mount additional shares on other volumes just like the main /volume1/data we use in the guides..

      e.g. /volume2/data2:/data2 (or whatever you called the secondary share.)

      Then within Radarr/Sonarr etc you add the additional ‘root folder’of /data2/media/tv and any existing or new series you want to go there just add them to the new root folder accordingly

      Just make sure you give the appropriate permissions to the share beforehand

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

drfrankenstein.co.uk – writing Synology Docker Guides since 2016 – Join My Discord!