The Docker compose codes below are a build-your-own-stack collection of already configured codes ready to be assembled to a stack or (with slight modifications) used independently.
A supplementary guide for how to configure these applications are available below:
Configure a Complete Downloader Stack
I you want to use any of these codes without the VPN, just remove this and it will work:
depends_on:
GluetunVPN:
condition: service_healthy
GluetunVPN
The backbone of the stack. All the traffic from the other applications will tunnel through this one. The settings you want to edit are the ones in ”{}” (OpenVPN and Wireguard).
If you want to add other applications through the VPN, add ports to ports
and FIREWALL_INPUT_PORTS
. Then change the “network mode” in the new containers to container:GluetunVPN
.
version: "3"
services:
GluetunVPN:
image: qmcgaw/gluetun:latest
container_name: GluetunVPN
network_mode: bridge
# line above must be uncommented to allow external containers to connect. See https://github.com/qdm12/gluetun/wiki/Connect-a-container-to-gluetun#external-container-to-gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
- 8310:8000/tcp # HTTP Server
- 8888:8888/tcp # HTTP proxy
- 8388:8388/tcp # Shadowsocks
- 8388:8388/udp # Shadowsocks
#- 9696:9696 # Prowlarr
#- 8989:8989 # Sonarr
#- 7878:7878 # Radarr
#- 8686:8686 # Lidarr
#- 8787:8787 # Readarr
#- 6767:6767 # Bazarr
#- 8112:8112 # Deluge
#- 8180:8180 # QBittorrent
#- 9091:9091 # Transmission
volumes:
- /path/to/appdata/gluetun:/gluetun
environment:
# See https://github.com/qdm12/gluetun/wiki
- VPN_SERVICE_PROVIDER=mullvad
- VPN_TYPE=openvpn
# OpenVPN:
- OPENVPN_USER={YOUR-USERNAME-HERE}
- OPENVPN_VERBOSITY=2
- SERVER_COUNTRIES={COUNTRY-OF-VPN-SERVER}
- SERVER_CITIES={CITYNAME-OF-VPN-SERVER}
# Wireguard:
- WIREGUARD_PRIVATE_KEY={YOUR-WIREGUARD-KEY-HERE}
- WIREGUARD_ADDRESSES={ADRESS-LIKE 10.10.10.10/32}
# Timezone for accurate log times
- TZ=Europe/Stockholm
# Server list updater. See https://github.com/qdm12/gluetun/wiki/Updating-Servers#periodic-update
- UPDATER_PERIOD=24h
- UPDATER_VPN_SERVICE_PROVIDERS=
#Remove the Firewall Input Ports that you wont use!
- FIREWALL_INPUT_PORTS=9696,8989,7878,8686,8787,6767,8180,9091,8112 # Prowlarr, Sonarr, Radarr, Lidarr, Readarr, Bazarr, QBittorrent, Transmission, Deluge
# DOT (DNS over TLS) for Outbound
- DOT=on
- DOT_PROVIDERS= cloudflare
- DOT_PRIVATE_ADRESS= 127.0.0.1/8,10.0.0.0/8,172.16.0.0/12,169.254.0.0/16,::1/128,fc00::/7,fe80::/10,::ffff:7f00:1/104,::ffff:a00:0/104,::ffff:a9fe:0/112,::ffff:ac10:0/108,::ffff:c0a8:0/112
- DOT_CACHING=on
- BLOCK_MALICIOUS=on
Starr Containers
I’ve included the paths for the backup directory in the *arr containers. If you don’t want custom backup paths, just comment the line out. Their useful for centralized backup solutions, such as *arr containers → backup directory → rclone → cloud directory / remote drive.
Prowlarr
Torrent monitor using RSS feeds. Only change path/to/appdata
to your appdata folder. I kept the ports just in case, but when using GluetunVPN they are not necessary.
prowlarr:
image: ghcr.io/hotio/prowlarr:latest
container_name: prowlarr
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=99
- PGID=100
- UMASK=000
- TZ=Europe/Stockholm
volumes:
- /path/to/appdata/prowlarr:/config
- /path/to/backup/docker/prowlarr:/config/Backups
# ports:
# - 9696:9696
restart: unless-stopped
Huntarr
A nifty little search helper for Sonarr, Radarr and Readarr. Huntarr will randomly (or sequentally) order a search for x number of missing episodes or movies at set intervals.
huntarr:
container_name: Huntarr
network_mode: container:GluetunVPN
environment:
- TZ=Europe/Stockholm
volumes:
- /path/to/appdata/Huntarr:/config:rw
image: huntarr/huntarr:latest
Sonarr
The TV series monitor and download manager that needs no introduction. Only things to change is path/to/appdata
to point to your appdata folder and /path/to/data
to where you store your media.
sonarr:
image: ghcr.io/hotio/sonarr:latest
container_name: sonarr
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=99
- PGID=100
- UMASK=022
- TZ=Europe/Stockholm
volumes:
- /path/to/appdata/sonarr:/config
- /path/to/data/:/data #optional
- /path/to/backup/docker/sonarr:/config/Backups
# ports:
# - 8989:8989
restart: unless-stopped
Radarr
Like Sonarr but for movies. Same things to change as Sonarr.
radarr:
image: ghcr.io/hotio/radarr:latest
container_name: radarr
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=99
- PGID=100
- UMASK=022
- TZ=Europe/Stockholm
volumes:
- /path/to/appdata/radarr:/config
- /path/to/data/:/data #optional
- /path/to/backup/docker/radarr:/config/Backups
# ports:
# - 7878:7878
restart: unless-stopped
Lidarr
Searches for music to download and manages local music files.
lidarr:
container_name: lidarr
image: ghcr.io/hotio/lidarr
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=1000
- PGID=1000
- UMASK=002
- TZ=Etc/UTC
volumes:
- /path/to/appdata:/config
- /path/to/data:/data
- /path/to/backup/docker/lidarr:/config/Backups
# ports:
# - "8686:8686"
restart: unless-stopped
Readarr
Manages and searches for books and audiobooks to download.
readarr:
container_name: readarr
image: ghcr.io/hotio/readarr
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=1000
- PGID=1000
- UMASK=002
- TZ=Etc/UTC
volumes:
- /path/to/appdata:/config
- /path/to/data:/data
- /path/to/backup/docker/readarr:/config/Backups
# ports:
# - "8787:8787"
restart: unless-stopped
Bazarr
Monitors your media library and downloads subtitles for your movies and tv shows. It really hates being behind a VPN, that’s why I chose bridged for its networking.
bazarr:
container_name: bazarr
image: ghcr.io/hotio/bazarr
network_mode: bridged
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=1000
- PGID=1000
- UMASK=002
- TZ=Etc/UTC
volumes:
- /path/to/appdata/bazarr:/config
- /path/to/data:/data
- /path/to/backup/docker/bazarr:/config/backup
ports:
- "6767:6767"
restart: unless-stopped
Kapowarr
Comics and Manga downloader (I’ve not had any success with this…but if you’ve tried to find manga, you know what a unstandardized dumpster fire finding stuff is).
kapowarr:
container_name: kapowarr
image: mrcas/kapowarr:latest
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
volumes:
- /path/to/appdata/kapowarr/db:/app/db
- /path/to/downloads/dir/books:/app/temp_downloads
- /path/to/data/media:/comics
Downloaders
QBittorrent
One of the many great downloaders. Just change the volumes to your liking.
qbittorrent:
image: ghcr.io/hotio/qbittorrent:latest
container_name: qbittorrent
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=99
- PGID=100
- UMASK=002
- TZ=Europe/Stockholm
- WEBUI_PORTS=8180/tcp,8180/udp
volumes:
- path/to/appdata/qbittorrent:/config
- path/to/data/torrents/:/data/torrents #optional
# ports:
# - 8180:8180
restart: unless-stopped
Deluge
The classic Linux torrent downloader that’s reliable and easy to use.
deluge:
image: lscr.io/linuxserver/deluge:latest
container_name: deluge
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- DELUGE_LOGLEVEL=error #optional
volumes:
- /path/to/appdata/deluge:/config
- /path/to/data/torrents:/downloads
# ports:
# - 8112:8112
# - 6881:6881
# - 6881:6881/udp
restart: unless-stopped
Transmission
A minimalist and easy to drive Torrent downloader.
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
network_mode: container:GluetunVPN
depends_on:
GluetunVPN:
condition: service_healthy
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- TRANSMISSION_WEB_HOME= #optional
- USER= #optional
- PASS= #optional
- WHITELIST= #optional
- PEERPORT= #optional
- HOST_WHITELIST= #optional
volumes:
- /path/to/appdata/transmission:/config
- /path/to/data/torrents:/downloads
- /path/to/watch/folder:/watch
# ports:
# - 9091:9091
# - 51413:51413
# - 51413:51413/udp
restart: unless-stopped
Extras
Doplarr
If you’ve reached this far, I’m going to give you a little bonus. Every heard of Doplarr? Its a awesome little Discord bot that connects with Sonarr and Radarr and allow you to request media through a Discord server. Here’s the code:
doplarr:
environment:
- SONARR__URL=http://localhost:8989
- RADARR__URL=http://localhost:7878
- SONARR__API=sonarr_api
- RADARR__API=radarr_api
- DISCORD__TOKEN=bot_token
container_name: doplarr
image: "ghcr.io/kiranshila/doplarr:latest"
Recyclarr
If you’ve ever found yourself among THRaSHs Guides and thought “This seems nice but HOW am I going to import this into my starr apps?”, then your in luck. After some config configurating, your starr apps will be kept up to date with THRaSHs settings without you ever having to think about it again. Set and forget.
recyclarr:
container_name: recyclarr
networks:
- main-net
environment:
- TZ=Europe/Stockholm
- CRON_SCHEDULE=@daily
- RECYCLARR_CREATE_CONFIG=false
- volumes:
- /path/to/appdata/recyclarr:/config:rw
user: 99:100
image: ghcr.io/recyclarr/recyclarr:latest
Refrences
- GluetunVPN by qdm12 on Github
https://github.com/qdm12/gluetun - List of containers by Linuxsserver.io
https://fleet.linuxserver.io - List of containers by Hotio.dev
https://hotio.dev/containers/autoscan/ - Huntarr by Admin9705 on Github https://github.com/plexguide/Huntarr.io
- Kapowarr by Casvt on Github https://github.com/Casvt/Kapowarr
- Doplarr by karanshila on Github page https://kiranshila.github.io/Doplarr/#/
- Recyclarr by rcdailey on Github https://github.com/recyclarr/recyclarr