services:

  # image used to index torrent links from the internet
  prowlarr:
    image: linuxserver/prowlarr:latest
    container_name: arr-suite-prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/prowlarr:/config # location of database and configs
    expose:
      - 9696/tcp # web ui
    ports:
      - 9696:9696/tcp # web ui
    restart: unless-stopped
    #networks:
    #  - proxy
    #labels:
    #  - traefik.enable=true
    #  - traefik.docker.network=proxy
    #  - traefik.http.routers.prowlarr.rule=Host(`prowlarr.example.com`)
    #  - traefik.http.services.prowlarr.loadbalancer.server.port=9696
    #  # Optional part for traefik middlewares
    #  - traefik.http.routers.prowlarr.middlewares=local-ipwhitelist@file

  # image used to scan for tv shows
  sonarr:
    image: linuxserver/sonarr:latest
    container_name: arr-suite-sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/sonarr:/config # location of database and configs
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/media:/media # location of media library + qbittorrent download folder
    expose:
      - 8989/tcp # web ui
    ports:
      - 8989:8989/tcp # web ui
    restart: unless-stopped
    #networks:
    #  - proxy
    #labels:
    #  - traefik.enable=true
    #  - traefik.docker.network=proxy
    #  - traefik.http.routers.sonarr.rule=Host(`sonarr.example.com`)
    #  - traefik.http.services.sonarr.loadbalancer.server.port=8989
    #  # Optional part for traefik middlewares
    #  - traefik.http.routers.sonarr.middlewares=local-ipwhitelist@file

  # image used to scan for movies
  radarr:
    image: linuxserver/radarr:latest
    container_name: arr-suite-radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/radarr:/config # location of database and configs
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/media:/media # location of media library + qbittorrent download folder
    expose:
      - 7878/tcp # web ui
    ports:
      - 7878:7878/tcp # web ui
    restart: unless-stopped
    #networks:
    #  - proxy
    #labels:
    #  - traefik.enable=true
    #  - traefik.docker.network=proxy
    #  - traefik.http.routers.radarr.rule=Host(`radarr.example.com`)
    #  - traefik.http.services.radarr.loadbalancer.server.port=7878
    #  # Optional part for traefik middlewares
    #  - traefik.http.routers.radarr.middlewares=local-ipwhitelist@file

  # image used to scan for music
  lidarr:
    image: linuxserver/lidarr:latest
    container_name: arr-suite-lidarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/lidarr:/config # location of database and configs
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/media:/media # location of media library + qbittorrent download folder
    expose:
      - 8686/tcp # web ui
    ports:
      - 8686:8686/tcp # web ui
    restart: unless-stopped
    #networks:
    #  - proxy
    #labels:
    #  - traefik.enable=true
    #  - traefik.docker.network=proxy
    #  - traefik.http.routers.lidarr.rule=Host(`lidarr.example.com`)
    #  - traefik.http.services.lidarr.loadbalancer.server.port=8686
    #  # Optional part for traefik middlewares
    #  - traefik.http.routers.lidarr.middlewares=local-ipwhitelist@file

  # image used to scan for books
  readarr:
    image: linuxserver/readarr:develop
    container_name: arr-suite-readarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/readarr:/config # location of database and configs
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/media:/media # location of media library + qbittorrent download folder
    expose:
      - 8787/tcp # web ui
    ports:
      - 8787:8787/tcp # web ui
    restart: unless-stopped
    #networks:
    #  - proxy
    #labels:
    #  - traefik.enable=true
    #  - traefik.docker.network=proxy
    #  - traefik.http.routers.readarr.rule=Host(`readarr.example.com`)
    #  - traefik.http.services.readarr.loadbalancer.server.port=8787
    #  # Optional part for traefik middlewares
    #  - traefik.http.routers.readarr.middlewares=local-ipwhitelist@file

  # image used to manage subtitles
  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: arr-suite-bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/bazarr:/config # location of database and configs
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/media:/media # location of media library (optional)
    expose:
      - 6767/tcp # web ui
    ports:
      - 6767:6767/tcp # web ui
    restart: unless-stopped
    #networks:
    #  - proxy
    #labels:
    #  - traefik.enable=true
    #  - traefik.docker.network=proxy
    #  - traefik.http.routers.bazarr.rule=Host(`bazarr.example.com`)
    #  - traefik.http.services.bazarr.loadbalancer.server.port=6767
    #  # Optional part for traefik middlewares
    #  - traefik.http.routers.bazarr.middlewares=local-ipwhitelist@file

  # image used to bypass cloudflare for prowlarr
  flaresolverr:
    image: flaresolverr/flaresolverr:latest
    container_name: arr-suite-flaresolverr
    environment:
      - LOG_LEVEL=info
      - LOG_HTML=false
      - CAPTCHA_SOLVER=none
      - TZ=Europe/Berlin
    expose:
      - 8191/tcp # listening port for selenium
    restart: unless-stopped
    #networks:
    #  - proxy    

  # image used for vpn killswitch network
  gluetun:
    image: qmcgaw/gluetun:latest
    container_name: arr-suite-gluetun
    cap_add:
      - NET_ADMIN
    ports:
      - 8080:8080 # qbittorrent http web ui
    environment:
      # see https://github.com/qdm12/gluetun-wiki for more details
      # example envs based on https://github.com/qdm12/gluetun-wiki/blob/main/setup/providers/mullvad.md
      - VPN_SERVICE_PROVIDER=${VPN_SERVICE_PROVIDER:-mullvad} # define the vpn provider
      - VPN_TYPE=${VPN_TYPE:-wireguard} # define the vpn protocol to use
      - WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY:?WIREGUARD_PRIVATE_KEY must be set} # define your wireguard private key here
      - WIREGUARD_ADDRESSES=${WIREGUARD_ADDRESSES:?WIREGUARD_ADDRESSES must be set} # define the ipv4 vpn network subnet here
      - SERVER_CITIES=${SERVER_CITIES:?SERVER_CITIES must be set} # define the server cities
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/gluetun:/gluetun
    restart: unless-stopped
    #networks:
    #  - proxy
    #labels:
    #  - traefik.enable=true
    #  - traefik.docker.network=proxy
    #  - traefik.http.routers.qbittorrent.rule=Host(`qbittorrent.example.com`)
    #  - traefik.http.services.qbittorrent.loadbalancer.server.port=8080
    #  # Optional part for traefik middlewares
    #  - traefik.http.routers.qbittorrent.middlewares=local-ipwhitelist@file

  # image used to download stuff; run over gluetun network (vpn killswitch)
  qbittorrent:
    image: linuxserver/qbittorrent:latest
    container_name: arr-suite-qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
      - WEBUI_PORT=8080
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/qbittorrent:/config # location of database and configs
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/media/downloads:/media/downloads # location of qbittorrent downloads
    depends_on:
      - gluetun
    network_mode: container:arr-suite-gluetun # use the gluetun container network (vpn killswitch)
    restart: unless-stopped

  # image used to manage media and stream it
  emby:
    image: linuxserver/emby:latest
    container_name: arr-suite-emby
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    volumes:
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/emby:/config # location of database and configs; can grow very large
      - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/media:/data # location of media library
      #- ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/emby/lib:/opt/vc/lib # location for Raspberry Pi OpenMAX libs (optional)
    expose:
      - 8096/tcp # http web ui
      - 8920/tcp # https web ui
    ports:
      - 8096:8096/tcp # http web ui
    #devices:
    #  - /dev/dri:/dev/dri #optional
    #  - /dev/vchiq:/dev/vchiq #optional
    #  - /dev/video10:/dev/video10 #optional
    #  - /dev/video11:/dev/video11 #optional
    #  - /dev/video12:/dev/video12 #optional
    restart: unless-stopped
    #networks:
    #  - proxy
    #labels:
    #  - traefik.enable=true
    #  - traefik.docker.network=proxy
    #  - traefik.http.routers.emby.rule=Host(`emby.example.com`)
    #  - traefik.http.services.emby.loadbalancer.server.port=8096
    #  # Optional part for traefik middlewares
    #  - traefik.http.routers.emby.middlewares=local-ipwhitelist@file

  # image used to manage media and stream it
  #jellyfin:
  #  image: linuxserver/jellyfin:latest
  #  container_name: arr-suite-jellyfin
  #  environment:
  #    - PUID=1000
  #    - PGID=1000
  #    - TZ=Europe/Berlin
  #  volumes:
  #    - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/jellyfin:/config # location of database and configs; can grow very large
  #    - ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/media:/data # location of media library
  #    #- ${DOCKER_VOLUME_STORAGE:-/mnt/docker-volumes}/arr-suite/configs/jellyfin/lib:/opt/vc/lib # location for Raspberry Pi OpenMAX libs (optional)
  #  expose:
  #    - 8096/tcp # http web ui
  #  ports:
  #    - 8096:8096/tcp # http web ui
  #  #devices:
  #  #  - /dev/dri:/dev/dri #optional
  #  #  - /dev/vchiq:/dev/vchiq #optional
  #  #  - /dev/video10:/dev/video10 #optional
  #  #  - /dev/video11:/dev/video11 #optional
  #  #  - /dev/video12:/dev/video12 #optional
  #  restart: unless-stopped
  #  #networks:
  #  #  - proxy
  #  #labels:
  #  #  - traefik.enable=true
  #  #  - traefik.docker.network=proxy
  #  #  - traefik.http.routers.jellyfin.rule=Host(`jellyfin.example.com`)
  #  #  - traefik.http.services.jellyfin.loadbalancer.server.port=8096
  #  #  # Optional part for traefik middlewares
  #  #  - traefik.http.routers.jellyfin.middlewares=local-ipwhitelist@file    

#networks:
#  proxy:
#    external: true