Files
Docker-stacks/arr-stack/docker-compose.yml
T

288 lines
7.7 KiB
YAML

# Compose file for the *arr stack. Configuration files are stored in the
# directory you launch the compose file on. Change to bind mounts if needed.
# All containers are ran with user and group ids of the main user and
# group to aviod permissions issues of downloaded files, please refer
# the read me file for more information.
#############################################################################
# NOTICE: We recently switched to using a .env file. PLEASE refer to the docs.
# https://github.com/TechHutTV/homelab/tree/main/media#docker-compose-and-env
#############################################################################
networks:
servarrnetwork:
name: servarrnetwork
ipam:
config:
- subnet: 172.39.0.0/24
# Gluetun container, connects to the VPN of your choice.
services:
# airvpn recommended (referral url: https://airvpn.org/?referred_by=673908)
gluetun:
image: qmcgaw/gluetun
container_name: gluetun
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun # If running on an LXC see readme for more info.
networks:
servarrnetwork:
ipv4_address: 172.39.0.2
ports:
- 8080:8080 # qbittorrent web interface
- 6881:6881 # qbittorrent torrent port
- 6789:6789 # nzbget
#- 9696:9696 # prowlarr
#- 8191:8191 # flaresolverr
- 8888:8888/tcp # HTTP proxy
- 8388:8388/tcp # Shadowsocks
- 8388:8388/udp # Shadowsocks
volumes:
- ./gluetun:/gluetun
# Make a '.env' file in the same directory.
env_file:
- .env
healthcheck:
test: ping -c 1 www.google.com || exit 1
interval: 20s
timeout: 10s
retries: 5
restart: unless-stopped
# WebUI for Gluetun
# gluetun-webui:
# image: scuzza/gluetun-webui:latest
# container_name: gluetun-webui
# ports:
# - "127.0.0.1:3002:3000"
# environment:
# - GLUETUN_CONTROL_URL=http://gluetun:8000
# - PUID=${PUID}
# - PGID=${PGID}
# Uncomment if Gluetun auth is enabled:
#- GLUETUN_API_KEY=yourtoken
#- GLUETUN_USER=username
#- GLUETUN_PASSWORD=password
# restart: unless-stopped
# read_only: true
# tmpfs:
# - /tmp
# security_opt:
# - no-new-privileges:true
# cap_drop:
# - ALL
# healthcheck:
# test: ["CMD", "wget", "-qO-", "http://localhost:3002/api/health"]
# interval: 30s
# timeout: 5s
# start_period: 10s
# retries: 3
# gluetun-monitor:
# image: ghcr.io/csmarshall/gluetun-monitor:latest
# # Or from Docker Hub: chasmarshall/gluetun-monitor:latest
# container_name: gluetun-monitor
# restart: unless-stopped
# environment:
# - PUID=${PUID}
# - PGID=${PGID}
# - TZ=${TZ}
# - GLUETUN_CONTAINER=gluetun
# - DEPENDENT_CONTAINERS=auto # auto-discovery (default)
# - CHECK_INTERVAL=30 # seconds between checks
# - TIMEOUT=10 # seconds per site test
# - FAIL_THRESHOLD=2 # consecutive failures to trigger restart
# - HEALTHY_WAIT_TIMEOUT=120 # seconds to wait for healthy status
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock:ro
# - ./sites.conf:/config/sites.conf:ro
# - ./logs:/logs
# Containers run through Gluetun. Qbittorrent is on 8085, nzbget is on port 6789, Prowlarr is on port 9696
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
restart: unless-stopped
#labels:
# - deunhealth.restart.on.unhealthy=true
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- WEBUI_PORT=8080 # must match "qbittorrent web interface" port number in gluetun's service above
- TORRENTING_PORT=${FIREWALL_VPN_INPUT_PORTS} # airvpn forwarded port, pulled from .env
volumes:
- ./qbittorrent:/config
- ./qbittorrent/data:/data
depends_on:
gluetun:
condition: service_healthy
restart: true
network_mode: "service:gluetun"
healthcheck:
test: ping -c 1 www.google.com || exit 1
interval: 60s
retries: 3
start_period: 20s
timeout: 10s
# See the 'qBittorrent Stalls with VPN Timeout' section for more information.
#deunhealth:
# image: qmcgaw/deunhealth
# container_name: deunhealth
# network_mode: "none"
# environment:
# - LOG_LEVEL=info
# - HEALTH_SERVER_ADDRESS=127.0.0.1:9999
# - TZ=${TZ}
# restart: always
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
nzbget:
image: lscr.io/linuxserver/nzbget:latest
container_name: nzbget
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /etc/localtime:/etc/localtime:ro
- ./nzbget:/config
- ./nzbget/data:/data
depends_on:
gluetun:
condition: service_healthy
restart: true
restart: unless-stopped
network_mode: "service:gluetun"
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /etc/localtime:/etc/localtime:ro
- ./prowlarr:/config
restart: unless-stopped
ports:
- 9696:9696
networks:
servarrnetwork:
ipv4_address: 172.39.0.11
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
restart: unless-stopped
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /etc/localtime:/etc/localtime:ro
- ./sonarr:/config
- ./sonarr/data:/data
ports:
- 8989:8989
networks:
servarrnetwork:
ipv4_address: 172.39.0.3
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
restart: unless-stopped
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /etc/localtime:/etc/localtime:ro
- ./radarr:/config
- ./radarr/data:/data
ports:
- 7878:7878
networks:
servarrnetwork:
ipv4_address: 172.39.0.4
lidarr:
container_name: lidarr
image: lscr.io/linuxserver/lidarr:latest
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- ./lidarr:/config
- ./lidarr/data:/data
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ports:
- 8686:8686
networks:
servarrnetwork:
ipv4_address: 172.39.0.5
bazarr:
image: lscr.io/linuxserver/bazarr:latest
container_name: bazarr
restart: unless-stopped
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /etc/localtime:/etc/localtime:ro
- ./bazarr:/config
- ./bazarr/data:/data
ports:
- 6767:6767
networks:
servarrnetwork:
ipv4_address: 172.39.0.6
seerr:
container_name: seerr
image: ghcr.io/seerr-team/seerr:latest
environment:
- LOG_LEVEL=debug
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
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
volumes:
- ./seerr:/app/config
ports:
- 5055:5055
networks:
servarrnetwork:
ipv4_address: 172.39.0.9
flaresolverr:
# DockerHub mirror flaresolverr/flaresolverr:latest
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_FILE=${LOG_FILE:-none}
- LOG_HTML=${LOG_HTML:-false}
- CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
- TZ=${TZ}
volumes:
- ./flaresolver:/config
networks:
servarrnetwork:
ipv4_address: 172.39.0.7