15 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	navigation, title, main
| navigation | title | main | ||
|---|---|---|---|---|
| true | Automation | 
  | 
:ellipsis{left=0px width=40rem top=10rem blur=140px}
Servarr
::alert{type="info"} 🎯 Goals:
- Automate movie and TV show downloads using Radarr, Sonarr, Bazarr, Prowlarr, and Overseerr. ::
 
Servarr is a suite of applications developed to automate the downloading, updating, and management of media. Here, we'll focus on movies and TV shows with the goal of:
- Selecting a movie from a catalog through a web interface.
 - Sitting back and enjoying it on Plex a few minutes later.
 
Simple.
We’ll start by deploying the stack and then proceed to configure each app and understand how they work.
Install the Apps
Docker Compose
Folder structure:
root
├── docker
│   ├── plex      
│   │   ├── compose.yml
│   │   ├── config
│   │   └── transcode
│   ├── tautulli
│   │   └── config
│   ├── sonarr
│   │   └── config
│   ├── radarr
│   │   └── config
│   ├── bazarr
│   │   └── config
│   ├── prowlarr
│   │   └── config
│   └── overseerr
│       └── config
└── media
    ├── downloads
    ├── tvseries
    ├── movies
    └── library
::alert{type="warning"} :::list{type="warning"}
- Warning: Make sure to follow this file structure carefully, especially the 
mediafolder. This folder must be mounted exactly the same way in both the Qbittorrent compose file (/your/path/media:/media) and the arr applications.
If not, the arr apps may not recognize the path provided by Qbittorrent and will fail to create hardlinks.
Without hardlinks, the arr apps will copy the files instead—doubling the space used on your storage. ::: :: 
Open Docker and your plex stack. Modify the compose file as follows:
---
services:
  linuxserver_plex:
    image: ghcr.io/linuxserver/plex:latest
    container_name: plex
    network_mode: host
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=Europe/Paris
      - VERSION=docker
      - PLEX_CLAIM= #optional
    volumes:
      - /docker/plex/config:/config
      - /docker/plex/transcode:/transcode #optional
      - ${MEDIA_PATH}:/media
    labels:
      - com.centurylinklabs.watchtower.enable=true
    restart: unless-stopped
    mem_limit: 4096m
    mem_reservation: 2048m
    devices:
      - /dev/dri:/dev/dri
  tautulli:
    image: lscr.io/linuxserver/tautulli:latest
    container_name: tautulli
    environment:
      - TZ=Europe/Paris
    volumes:
      - /docker/tautulli/config:/config
    ports:
      - 8181:8181
    restart: unless-stopped
  
  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=Europe/Paris
    volumes:
      - /docker/sonarr/config:/config
      - ${MEDIA_PATH}:/media
    ports:
      - 8989:8989
    restart: unless-stopped
  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=Europe/Paris
    volumes:
      - /docker/radarr/config:/config
      - ${MEDIA_PATH}:/media
    ports:
      - 7878:7878
    restart: unless-stopped
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=Europe/Paris
    volumes:
      - /docker/prowlarr/data:/config
    ports:
      - 9696:9696
    restart: unless-stopped
  overseerr:
    image: lscr.io/linuxserver/overseerr:latest
    container_name: overseerr
    dns:
      - 1.1.1.1
      - 8.8.8.8
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=Europe/Paris
    volumes:
      - /docker/overseerr/config:/config
    ports:
      - 5055:5055
    restart: unless-stopped
  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: bazarr
    restart: unless-stopped
    environment:
      - PUID=1000 
      - PGID=1000
      - TZ=Europe/Paris
    volumes:
      - /docker/bazarr/config:/config
      - ${MEDIA_PATH}:/media
    ports:
      - 6767:6767
::alert{type="success"} ✨ Add the Watchtower label to each container to automate updates
services:
  plex:
    #...
    labels:
      - com.centurylinklabs.watchtower.enable=true
  tautulli:
    #...
    labels:
      - com.centurylinklabs.watchtower.enable=true
::
Set your .env file with the variables below:
PUID=
GUID=
MEDIA_PATH=
| Variable | Description | Example | 
|---|---|---|
PUID | 
Set using your user info (check with id yourusername) | 
1000 | 
GUID | 
Same as above | 1000 | 
MEDIA_PATH | 
Path to your media folder, here: /media. It must match the one used by Qbittorrent. | 
/media | 
Deploy the stack.
Configure Radarr
Radarr queries your torrent sources and lets you define the type of releases to prioritize. It can also upgrade your movies if a better version is available.
Once deployed, visit http://yourserverip:7878.
::alert{type="danger"} :::list{type="danger"}
- If it fails: check your firewall rules. ::: ::
 
Create an account and choose forms login.
Add a root folder
- Go to Settings > Media Management.
 - Add a root folder and select 
/media/movies. 
::alert{type="warning"} :::list{type="warning"}
- Warning: If you already have movies in 
moviesfrom Qbittorrent, do not let Radarr add them. Radarr might modify them, which could stop seeding in Qbittorrent. ::: :: 
Configure Profiles
Go to Settings > Profiles. These are your default quality profiles. When you make a request, you're selecting one of these. For example, configure the “any” profile by unchecking everything except what is shown in the image and ordering them accordingly. This makes Radarr search for 4K REMUX first, then go down the list if unavailable.
Add Qbittorrent
In Settings > Download Clients, add Qbittorrent.
- Use your server IP as Host and port 
5695if following this guide. - Provide your Qbittorrent Username and Password.
 - Click Test.
 - If successful, click Save.
 
Connect to Plex
Go to Settings > Connect, add a new connection and choose Plex Media Server.
- Use 
plexor your server IP for Host. - Port: 
32400 - Click the blue "authenticate with Plex.tv" button and log into Plex.
 - Press Test, then Save if successful.
 
Get API Key for Prowlarr and Overseerr
- Go to Settings > General and copy your API Key for later use.
 
Configure Sonarr
Sonarr queries torrent sources and defines what kind of TV series releases to prioritize. It also upgrades series when better versions are available.
- Visit 
http://yourserverip:8989. - Follow the same steps as for Radarr, but use 
/media/tvseriesas the root folder. 
::alert{type="danger"} :::list{type="danger"}
- If it fails: check your firewall rules. ::: ::
 
Configure Prowlarr
Prowlarr acts as a proxy to manage your torrent indexers and link them to Radarr and Sonarr.
Go to http://yourserverip:9696 and create an account, using forms login.
::alert{type="danger"} :::list{type="danger"}
- If it fails: check your firewall rules. ::: ::
 
Add an Indexer
- Go to the Indexers section and add your torrent indexer.
 
Add Radarr and Sonarr
In Settings > Apps, add Radarr and Sonarr with the following details:
- Prowlarr Server: 
http://prowlarr:9696(or use server IP) - Sonarr / Radarr Server: 
http://sonarr:8989orhttp://radarr:7878 - API Key: use the one copied from Radarr and Sonarr.
 - Click Test, then Save if all goes well.
 
Configuring Bazarr
Bazarr is an app that automatically searches for the correct subtitles in your preferred languages for all the movies and TV shows added by Radarr and Sonarr.
Go to http://yourserverip:6767.
::alert{type="danger"} :::list{type="danger"}
- If it fails: check your firewall rules. ::: ::
 
Go to Settings > General and create a username and password using forms login.
Add a Language Profile
- In Settings > Languages, click the pink Add new profile button and name it.
 - Click the pink Add Languages button and add your preferred languages, e.g., French and English.
 - Save and exit.
 - At the bottom of the screen under Default Language For Newly Added Show, check both boxes and select the profile you just created.

 - Save using the button at the top of the screen.
 
Add Subtitle Providers
- In Settings > Providers, add your preferred providers, for example:
 
- Save using the button at the top of the screen.
 
Add Radarr and Sonarr
- Go to Settings > Sonarr
 - In Address, enter 
sonarror your server's IP address. - In Port, enter 
8989. - In API Key, enter Sonarr’s API key.
 - Click Test.
 - Save using the button at the top of the screen.
 
Repeat the same steps for Radarr.
Configuring Overseerr
Overseerr is an app that lets you browse a movie catalog and send requests to Sonarr and Radarr. Just browse movies or series, click Request, and the media will automatically be downloaded according to your Radarr or Sonarr settings. If the title hasn’t been released yet, it will be downloaded automatically when available. This way, episodes of a series appear in Plex without any manual intervention.
Go to http://yourserverip:5055 and log in with your Plex account.
::alert{type="danger"} :::list{type="danger"}
- If it fails: check your firewall rules. ::: ::
 
Add Radarr and Sonarr
When prompted, add a Radarr server:
- Check Default server.
 - Server name: Radarr
 - Hostname or IP address: 
radarror your server's IP - Port: 
7878 - API Key: Radarr’s API key
 - Click Test at the bottom.
 
If the test succeeds, continue filling in the fields:
- Quality Profile: the one you configured (e.g., 
any) - Root Folder: the Plex folder. In our examples: 
/media/movies - Minimum Availability: 
Announced. This allows requesting unreleased content and downloads it upon release. - Check all 3 boxes at the bottom.
 - Save and continue.
 
Now do the same for Sonarr:
- Check Default server.
 - Server name: Sonarr
 - Hostname or IP address: 
sonarror your server's IP - Port: 
8989 - API Key: Sonarr’s API key
 - Click Test at the bottom.
 
If the test succeeds, continue filling in the fields:
- Quality Profile: the one you configured (e.g., 
any) - Root Folder: the Plex folder. In our examples: 
/media/tvseries - Language Profile: 
Deprecated - Check all 4 boxes at the bottom.
 - Save and continue.
 
And that’s it! Just request a movie or series, then check in qBittorrent or Radarr/Sonarr. Within a few minutes, your media will be available on Plex!
Exposing Overseerr with SWAG
It can be useful to expose Overseerr if you want to send requests from outside your network without a VPN, or if you've shared your Plex library with others and want them to have Overseerr access.
::alert{type="info"} :::list{type="info"}
- We assume you have the subdomain 
films.mydomain.comwith aCNAMEpointing tofilms.frin your DNS zone. And that unless you’re using Cloudflare Zero Trust, port443on your router is forwarded to port443on your server via NAT rules. ::: :: 
Go to Dockge, edit the SWAG compose file, and add the Overseerr network, which is the same as Plex (since it’s in the Plex stack):
services:
  swag:
     container_name: # ...
      # ... 
     networks:          # Connects the container to a custom network 
      # ...           
      - plex            # Name of the network declared in the stack
    
networks:               # Defines the custom network
  # ...
  plex:                 # Name of the declared network
    name: plex_default  # Actual name of the external network
    external: true      # Indicates it’s an external network
Restart the stack by clicking “Deploy” and wait until SWAG is fully operational.
::alert{type="info"} :::list{type="info"}
- Here we assume the Tautulli network is named 
plex_default. You can verify the connection works by visiting the SWAG dashboard athttp://yourserverip:81. ::: :: 
Create and edit the file films.subdomain.conf:
::alert{type="success"} ✨ Tip: you can use File Browser to browse and edit files instead of using terminal commands. ::
sudo vi /docker/swag/config/nginx/proxy-confs/films.subdomain.conf
Enter insert mode by pressing i:
## Version 2024/07/16
# make sure that your overseerr container is named overseerr
# make sure that your dns has a cname set for overseerr
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name films.*;
    include /config/nginx/ssl.conf;
    client_max_body_size 0;
    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;
    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;
    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;
    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;
        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;
        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;
        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app overseerr;
        set $upstream_port 5055;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }
    location ~ (/overseerr)?/api {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app overseerr;
        set $upstream_port 5055;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }
}
Press Escape, then type :x and press Enter to save and exit.
Wait a few minutes, then visit http://films.mydomain.com in your browser.
::alert{type="danger"} :::list{type="danger"}
- If it fails: check your firewall rules. ::: ::
 
And there you go, Overseerr is now publicly accessible!


