Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

docker-compose-servarr-with-gluetun

This is a Docker compose stack to deploy Sonarr, Radarr, Prowlarr, flaresolverr, and qBittorrent, with Prowlarr, flaresolverr, and qBittorrent connecting through Gluetun container.

All apps connect to a shared volume that connects to a NAS SMB share using CIFS.

Previous Versions: docker-arrs-with-nordvpn

Sources/Referances

Setup

The bellow setup is using Proton VPN with Wiregard. Check Gluetun-wiki for your specific VPN provider setup.

This setup assumes your VPN provider suports Port-Fowarding.

Docker Environment Variables

Variable Notes
nasUser The username on NAS host
nasPass The password on NAS host
WIREGUARD_PRIVATE_KEY Your Wiregard private key
UPDATER_PROTONVPN_EMAIL Your Proton user email
UPDATER_PROTONVPN_PASSWORD Your Proton passord
nasMediaPath Network path to your SMB share Example: //192.168.1.18/Media
timezone Whatever you timezone is, Example: America/New_York

Docker Compose File

networks:
  proxy-network:   # configure your reverse proxy network if needed
    external: true

volumes:
  qbit_config:
  prowlarr_config:
  flaresolver_config:
  sonarr_config:
  radarr_config:
  seerr_config:
  media:
    driver_opts:
      type: cifs
      # There is weird bug in the Linux kernel CIFS caching layer. Heavy torrent 
      # I/O to your NAS with cache=strict triggered kernel memory corruption, 
      # hanging qBittorrent in an unkillable state. Fixed by switching to 
      # cache=none, at the cost of a slight performance loss for stability. 
      o: username=$nasUser,password=$nasPass,file_mode=0777,dir_mode=0777,noperm,cache=none
      device: $nasMediaPath

services:
  gluetun:
    image: qmcgaw/gluetun:v3 # Latest stable version. The "latest" is the rolling release and may break at any time.
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    environment:
      - TZ=${timezone:-UTC}
      - VPN_SERVICE_PROVIDER=protonvpn                                                      # set your vpn provider
      - VPN_TYPE=wireguard                                                                  # set your vpn protocol
      - WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY:?Private key required}                # set your wireguard private key
      - SERVER_COUNTRIES=United States                                                      # set your preferred server country
      - FIREWALL_OUTBOUND_SUBNETS=172.18.0.0/16,192.168.0.0/16                              # allow access to you local and docker networks
      - UPDATER_PERIOD=24h                                                                  # frequency of updater checks
      - UPDATER_PROTONVPN_EMAIL=${UPDATER_PROTONVPN_EMAIL:?Updater Email Required}          # set your protonvpn account email for automatic server updates if needed
      - UPDATER_PROTONVPN_PASSWORD=${UPDATER_PROTONVPN_PASSWORD:?Updater Password Required} # set your protonvpn account password for automatic server updates if needed
      - PORT_FORWARD_ONLY=on                                                                # required to filter server list to only those that support port forwarding
      - VPN_PORT_FORWARDING=on                                                              # required to enable port forwarding
      # Required: Commands to run when port forwarding is set up or taken down. see documentation for details.
      - VPN_PORT_FORWARDING_UP_COMMAND=/bin/sh -c 'wget -O- --retry-connrefused --post-data "json={\"listen_port\":{{PORT}},\"current_network_interface\":\"{{VPN_INTERFACE}}\",\"random_port\":false,\"upnp\":false}" http://127.0.0.1:9080/api/v2/app/setPreferences 2>&1' 
      - VPN_PORT_FORWARDING_DOWN_COMMAND=/bin/sh -c 'wget -O- --retry-connrefused --post-data "json={\"listen_port\":0,\"current_network_interface\":\"lo"}" http://127.0.0.1:9080/api/v2/app/setPreferences 2>&1'
    ports:
      - 8000:8000 #gluetun http server
      - 9080:9080 #qbittorrent UI
      - 9696:9696 #prowlarr
      - 8192:8192 #Byparr
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=1     # optional, disable ipv6; recommended if using ipv4 only
    networks:
      - proxy-network 
    restart: unless-stopped
    labels:
      - autoheal="true"                       # optional, for willfarrell/docker-autoheal. Gluetun has its own healthcheck and restart mechanism, may be redundant.

  qbittorrent:
    image: linuxserver/qbittorrent:latest
    container_name: qbittorrent
    network_mode: service:gluetun            # IMPORTANT: use gluetun's network stack
    depends_on:
      gluetun:
        condition: service_healthy           # wait for gluetun to be healthy before starting
    environment:
      - PUID=1000
      - PGID=997
      - TZ=${timezone:-UTC}
      - WEBUI_PORT=9080
      - DOCKER_MODS=arafatamim/linuxserver-io-mod-vuetorrent # optional, for vuetorrent mod
    volumes:
      - qbit_config:/config
      - media:/media
    restart: unless-stopped
    stop_grace_period: "10s"                # optional, may help with container shutdown issues.
    labels:
     autoheal: "true"
     com.centurylinklabs.watchtower.depends-on: gluetun
    healthcheck:
      # using the gluetun healthcheck to determine if vpn is up, since qbittorrent won't work without it
      test: curl -sL --retry-connrefused -w "%{http_code}" -o /dev/null http://localhost:9999 || exit 1
      interval: 10s
      timeout: 10s
      retries: 3

  prowlarr:
    image: linuxserver/prowlarr:latest
    container_name: prowlarr
    network_mode: service:gluetun            # IMPORTANT: use gluetun's network stack
    depends_on:
      gluetun:
        condition: service_healthy           # wait for gluetun to be healthy before starting
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${timezone:-UTC}
    volumes:
      - prowlarr_config:/config
    restart: unless-stopped
    labels:
     autoheal: "true"
     com.centurylinklabs.watchtower.depends-on: gluetun
    healthcheck:
      # using the gluetun healthcheck to determine if vpn is up, since prowlarr won't work without it
      test: curl -sL --retry-connrefused -w "%{http_code}" -o /dev/null http://localhost:9999 || exit 1
      interval: 10s
      timeout: 10s
      retries: 3

  byparr:
    image: ghcr.io/thephaseless/byparr:latest
    container_name: byparr
    network_mode: service:gluetun
    depends_on:
      gluetun:
        condition: service_healthy
    environment:
      - TZ=${timezone:-UTC}
      - PORT=8192
    restart: unless-stopped
    labels:
     autoheal: "true"
     com.centurylinklabs.watchtower.depends-on: gluetun
    healthcheck:
      # using the gluetun healthcheck to determine if vpn is up, since byparr won't work without it
      test: curl -sL --retry-connrefused -w "%{http_code}" -o /dev/null http://localhost:9999 || exit 1
      interval: 10s
      timeout: 10s
      retries: 3

  sonarr:
    image: linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=997
      - TZ=${timezone:-UTC}
    volumes:
      - sonarr_config:/config
      - media:/media
    ports:
      - 8989:8989
    networks:
      - proxy-network
    restart: unless-stopped
    labels:
      autoheal: "true"
    healthcheck:
      test: curl -sL --retry-connrefused -w "%{http_code}" -o /dev/null --ipv4 1.1.1.1 || curl -sL --retry-connrefused -w "%{http_code}" -o /dev/null --ipv4 8.8.8.8  || exit 1
      interval: 10s
      timeout: 5s
      retries: 3
      
  radarr:
    image: linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=997
      - TZ=${timezone:-UTC}
    volumes:
      - radarr_config:/config
      - media:/media
    ports:
      - 7878:7878
    networks:
      - proxy-network
    restart: unless-stopped
    labels:
      autoheal: "true"
    healthcheck:
      test: curl -sL --retry-connrefused -w "%{http_code}" -o /dev/null --ipv4 1.1.1.1 || curl -sL --retry-connrefused -w "%{http_code}" -o /dev/null --ipv4 8.8.8.8  || exit 1
      interval: 10s
      timeout: 5s
      retries: 3
  
  seerr:
    image: ghcr.io/seerr-team/seerr:latest
    init: true
    container_name: seerr
    environment:
      - LOG_LEVEL=debug
      - TZ=${timezone:-UTC}
      - PORT=5055 #optional
    ports:
      - 5055:5055
    networks:
      - proxy-network
    volumes:
      - seerr_config:/app/config
    labels:
      autoheal: "true"
    healthcheck:
      test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1
      start_period: 20s
      timeout: 3s
      interval: 15s
      retries: 3
    restart: unless-stopped

About

This is a Docker compose stack to deploy Sonarr, Radarr, Prowlarr, flaresolverr, and qBittorrent, with Prowlarr, flaresolverr, and qBittorrent connecting through Gluetun container.

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Contributors