feat: Try a different arr stack.

This commit is contained in:
2025-11-28 21:24:53 -05:00
parent 51c1d074fa
commit 58accb9276
2 changed files with 220 additions and 135 deletions

View File

@@ -1,3 +1,21 @@
# 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
services:
jellyfin:
image: jellyfin/jellyfin
@@ -9,171 +27,217 @@ services:
volumes:
- ./jellyfin-config:/config
- ./jellyfin-cache:/cache
- ${DATA_LOCATION}:/data
- ${DATA_MOUNT}:/data
restart: 'unless-stopped'
environment:
- TZ=${TIMEZONE}
- /dev/dri:/dev/dri
# 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
ports: # Expose qBittorrent's web UI and torrent ports through VPN
# - 8700:8096 # Jellyfin
- 8701:8701 # qBittorrent Web UI
- 6881:6881 # torrent port
- 6881:6881/udp
- 7878:7878 # Radarr
- 8989:8989 # Sonarr
- 8686:8686 # Lidarr
- 6767:6767 # Bazarr
- 9696:9696 # Prowlarr
- 8191:8191 # FlareSolverr
# - 5055:5055 # Jellyseerr
- /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:
- 8701:8701 # qbittorrent web interface
- 6881:6881 # qbittorrent torrent port
- 6789:6789 # nzbget
- 9696:9696 # prowlarr
volumes:
- ./gluetun:/gluetun
# - ./gluetun/us-den.conf:/gluetun/wireguard/wg0.conf
environment:
- VPN_TYPE=wireguard
- VPN_SERVICE_PROVIDER=protonvpn
- WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY}
# - OPENVPN_USER=${OPENVPN_USER}
# - OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
- VPN_PORT_FORWARDING=on
- SERVER_COUNTRIES=United States
- TZ=${TIMEZONE}
# 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
qbittorrent:
image: lscr.io/linuxserver/qbittorrent
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode: "service:gluetun" # Routes all traffic through Gluetun
depends_on:
- gluetun
restart: unless-stopped
labels:
- deunhealth.restart.on.unhealthy=true
environment:
- PUID=1000
- PGID=1000
- TZ=${TIMEZONE}
- WEBUI_PORT=8701
- WEBUI_ADDRESS=0.0.0.0
- WEBUI_EXTERNAL_ACCESS=true
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- WEBUI_PORT=8701 # 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
- ${DATA_LOCATION}:/data
restart: unless-stopped
radarr:
image: lscr.io/linuxserver/radarr
container_name: radarr
restart: unless-stopped
network_mode: "service:gluetun" # Routes all traffic through Gluetun
- ${DATA_MOUNT}:/data
depends_on:
- gluetun
# ports:
# - 7878:7878
environment:
- PUID=1000
- PGID=1000
- TZ=${TIMEZONE}
volumes:
- ./radarr:/config
- ${DATA_LOCATION}:/data
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
sonarr:
image: lscr.io/linuxserver/sonarr
container_name: sonarr
restart: unless-stopped
network_mode: "service:gluetun" # Routes all traffic through Gluetun
depends_on:
- gluetun
# ports:
# - 8989:8989
# See the 'qBittorrent Stalls with VPN Timeout' section for more information.
deunhealth:
image: qmcgaw/deunhealth
container_name: deunhealth
network_mode: "none"
environment:
- PUID=1000
- PGID=1000
- TZ=${TIMEZONE}
- LOG_LEVEL=info
- HEALTH_SERVER_ADDRESS=127.0.0.1:9999
- TZ=${TZ}
restart: always
volumes:
- ./sonarr:/config
- ${DATA_LOCATION}:/data
- /var/run/docker.sock:/var/run/docker.sock
lidarr:
image: lscr.io/linuxserver/lidarr:latest
container_name: lidarr
network_mode: "service:gluetun" # Routes all traffic through Gluetun
depends_on:
- gluetun
# ports:
# - 8686:8686
nzbget:
image: lscr.io/linuxserver/nzbget:latest
container_name: nzbget
environment:
- PUID=1000
- PGID=1000
- TZ=${TIMEZONE}
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- ./lidarr:/config
- ${DATA_LOCATION}:/data
restart: unless-stopped
bazarr:
image: lscr.io/linuxserver/bazarr
container_name: bazarr
restart: unless-stopped
network_mode: "service:gluetun" # Routes all traffic through Gluetun
- /etc/localtime:/etc/localtime:ro
- ./nzbget:/config
- ${DATA_MOUNT}:/data
depends_on:
- gluetun
# ports:
# - 6767:6767
environment:
- PUID=1000
- PGID=1000
- TZ=${TIMEZONE}
volumes:
- ./bazarr:/config
- ${DATA_LOCATION}:/data
gluetun:
condition: service_healthy
restart: true
restart: unless-stopped
network_mode: service:gluetun
prowlarr:
image: lscr.io/linuxserver/prowlarr
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
restart: unless-stopped
network_mode: "service:gluetun" # Routes all traffic through Gluetun
depends_on:
- gluetun
# ports:
# - 9696:9696
environment:
- PUID=1000
- PGID=1000
- TZ=${TIMEZONE}
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /etc/localtime:/etc/localtime:ro
- ./prowlarr:/config
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
network_mode: "service:gluetun" # Routes all traffic through Gluetun
environment:
- TZ=${TIMEZONE}
depends_on:
- gluetun
# ports:
# - 8191:8191
restart: unless-stopped
depends_on:
gluetun:
condition: service_healthy
restart: true
network_mode: service:gluetun
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
restart: unless-stopped
environment:
- TZ=${TIMEZONE}
- LOG_LEVEL=info
ports:
- "5055:5055"
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- ./jellyseerr:/app/config
- /etc/localtime:/etc/localtime:ro
- ./sonarr:/config
- ${DATA_MOUNT}:/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
depends_on:
- gluetun
- jellyfin
- sonarr
- radarr
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
volumes:
- /etc/localtime:/etc/localtime:ro
- ./radarr:/config
- ${DATA_MOUNT}:/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
- ${DATA_MOUNT}:/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
- ${DATA_MOUNT}:/data
ports:
- 6767:6767
networks:
servarrnetwork:
ipv4_address: 172.39.0.6
# Newer additions to this stack feel. Remove the '#' to add the service.
#
# ytdl-sub:
# image: ghcr.io/jmbannon/ytdl-sub:latest
# container_name: ytdl-sub
# environment:
# - PUID=${PUID}
# - PGID=${PGID}
# - TZ=${TZ}
# - DOCKER_MODS=linuxserver/mods:universal-cron
# volumes:
# - ./ytdl-sub:/config
# - /data/youtube:/youtube
# networks:
# servarrnetwork:
# ipv4_address: 172.39.0.8
# restart: unless-stopped
#
# jellyseerr:
# container_name: jellyseerr
# image: fallenbagel/jellyseerr:latest
# environment:
# - PUID=${PUID}
# - PGID=${PGID}
# - TZ=${TZ}
# volumes:
# - ./jellyseerr:/app/config
# ports:
# - 5055:5055
# networks:
# servarrnetwork:
# ipv4_address: 172.39.0.9
# restart: unless-stopped

View File

@@ -1,6 +1,27 @@
TIMEZONE="America/New_York"
DATA_LOCATION=/mnt/media
# General UID/GIU and Timezone
TZ=America/New_York
PUID=1000
PGID=1000
OPENVPN_USER="fixme"
OPENVPN_PASSWORD="super-secret"
WIREGUARD_PRIVATE_KEY="super-secret"
# Input your VPN provider and type here
VPN_SERVICE_PROVIDER=protonvpn
VPN_TYPE=wireguard
# Mandatory, airvpn forwarded port
FIREWALL_VPN_INPUT_PORTS=port
# Copy all these varibles from your generated configuration file
WIREGUARD_PUBLIC_KEY=key
WIREGUARD_PRIVATE_KEY=key
WIREGUARD_PRESHARED_KEY=key
WIREGUARD_ADDRESSES=ip
# Optional location varbiles, comma seperated list,no spaces after commas, make sure it matches the config you created
SERVER_COUNTRIES=United States
SERVER_CITIES=city
# Heath check duration
HEALTH_VPN_DURATION_INITIAL=120s
# Data Mount
DATA_MOUNT=/mnt/media