Files

295 lines
7.9 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
- 3002:3000 #webui
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
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
network_mode: "container:gluetun"
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
network_mode: "container:gluetun"
# 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
depends_on:
gluetun:
condition: service_healthy
restart: true
restart: unless-stopped
network_mode: "service:gluetun"
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
depends_on:
gluetun:
condition: service_healthy
restart: true
restart: unless-stopped
network_mode: "service:gluetun"
# networks:
# servarrnetwork:
# ipv4_address: 172.39.0.7