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: services:
jellyfin: jellyfin:
image: jellyfin/jellyfin image: jellyfin/jellyfin
@@ -9,171 +27,217 @@ services:
volumes: volumes:
- ./jellyfin-config:/config - ./jellyfin-config:/config
- ./jellyfin-cache:/cache - ./jellyfin-cache:/cache
- ${DATA_LOCATION}:/data - ${DATA_MOUNT}:/data
restart: 'unless-stopped' restart: 'unless-stopped'
environment: environment:
- TZ=${TIMEZONE} - TZ=${TIMEZONE}
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
# airvpn recommended (referral url: https://airvpn.org/?referred_by=673908)
gluetun: gluetun:
image: qmcgaw/gluetun image: qmcgaw/gluetun
container_name: gluetun container_name: gluetun
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
devices: devices:
- /dev/net/tun - /dev/net/tun:/dev/net/tun # If running on an LXC see readme for more info.
ports: # Expose qBittorrent's web UI and torrent ports through VPN networks:
# - 8700:8096 # Jellyfin servarrnetwork:
- 8701:8701 # qBittorrent Web UI ipv4_address: 172.39.0.2
- 6881:6881 # torrent port ports:
- 6881:6881/udp - 8701:8701 # qbittorrent web interface
- 7878:7878 # Radarr - 6881:6881 # qbittorrent torrent port
- 8989:8989 # Sonarr - 6789:6789 # nzbget
- 8686:8686 # Lidarr - 9696:9696 # prowlarr
- 6767:6767 # Bazarr
- 9696:9696 # Prowlarr
- 8191:8191 # FlareSolverr
# - 5055:5055 # Jellyseerr
volumes: volumes:
- ./gluetun:/gluetun - ./gluetun:/gluetun
# - ./gluetun/us-den.conf:/gluetun/wireguard/wg0.conf # Make a '.env' file in the same directory.
environment: env_file:
- VPN_TYPE=wireguard - .env
- VPN_SERVICE_PROVIDER=protonvpn healthcheck:
- WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY} test: ping -c 1 www.google.com || exit 1
# - OPENVPN_USER=${OPENVPN_USER} interval: 20s
# - OPENVPN_PASSWORD=${OPENVPN_PASSWORD} timeout: 10s
- VPN_PORT_FORWARDING=on retries: 5
- SERVER_COUNTRIES=United States restart: unless-stopped
- TZ=${TIMEZONE}
qbittorrent: qbittorrent:
image: lscr.io/linuxserver/qbittorrent image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent container_name: qbittorrent
network_mode: "service:gluetun" # Routes all traffic through Gluetun restart: unless-stopped
depends_on: labels:
- gluetun - deunhealth.restart.on.unhealthy=true
environment: environment:
- PUID=1000 - PUID=${PUID}
- PGID=1000 - PGID=${PGID}
- TZ=${TIMEZONE} - TZ=${TZ}
- WEBUI_PORT=8701 - WEBUI_PORT=8701 # must match "qbittorrent web interface" port number in gluetun's service above
- WEBUI_ADDRESS=0.0.0.0 - TORRENTING_PORT=${FIREWALL_VPN_INPUT_PORTS} # airvpn forwarded port, pulled from .env
- WEBUI_EXTERNAL_ACCESS=true
volumes: volumes:
- ./qbittorrent:/config - ./qbittorrent:/config
- ${DATA_LOCATION}:/data - ${DATA_MOUNT}:/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
depends_on: depends_on:
- gluetun gluetun:
# ports: condition: service_healthy
# - 7878:7878 restart: true
environment: network_mode: service:gluetun
- PUID=1000 healthcheck:
- PGID=1000 test: ping -c 1 www.google.com || exit 1
- TZ=${TIMEZONE} interval: 60s
volumes: retries: 3
- ./radarr:/config start_period: 20s
- ${DATA_LOCATION}:/data timeout: 10s
sonarr: # See the 'qBittorrent Stalls with VPN Timeout' section for more information.
image: lscr.io/linuxserver/sonarr deunhealth:
container_name: sonarr image: qmcgaw/deunhealth
restart: unless-stopped container_name: deunhealth
network_mode: "service:gluetun" # Routes all traffic through Gluetun network_mode: "none"
depends_on:
- gluetun
# ports:
# - 8989:8989
environment: environment:
- PUID=1000 - LOG_LEVEL=info
- PGID=1000 - HEALTH_SERVER_ADDRESS=127.0.0.1:9999
- TZ=${TIMEZONE} - TZ=${TZ}
restart: always
volumes: volumes:
- ./sonarr:/config - /var/run/docker.sock:/var/run/docker.sock
- ${DATA_LOCATION}:/data
lidarr: nzbget:
image: lscr.io/linuxserver/lidarr:latest image: lscr.io/linuxserver/nzbget:latest
container_name: lidarr container_name: nzbget
network_mode: "service:gluetun" # Routes all traffic through Gluetun
depends_on:
- gluetun
# ports:
# - 8686:8686
environment: environment:
- PUID=1000 - PUID=${PUID}
- PGID=1000 - PGID=${PGID}
- TZ=${TIMEZONE} - TZ=${TZ}
volumes: volumes:
- ./lidarr:/config - /etc/localtime:/etc/localtime:ro
- ${DATA_LOCATION}:/data - ./nzbget:/config
restart: unless-stopped - ${DATA_MOUNT}:/data
bazarr:
image: lscr.io/linuxserver/bazarr
container_name: bazarr
restart: unless-stopped
network_mode: "service:gluetun" # Routes all traffic through Gluetun
depends_on: depends_on:
- gluetun gluetun:
# ports: condition: service_healthy
# - 6767:6767 restart: true
environment: restart: unless-stopped
- PUID=1000 network_mode: service:gluetun
- PGID=1000
- TZ=${TIMEZONE}
volumes:
- ./bazarr:/config
- ${DATA_LOCATION}:/data
prowlarr: prowlarr:
image: lscr.io/linuxserver/prowlarr image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr container_name: prowlarr
restart: unless-stopped
network_mode: "service:gluetun" # Routes all traffic through Gluetun
depends_on:
- gluetun
# ports:
# - 9696:9696
environment: environment:
- PUID=1000 - PUID=${PUID}
- PGID=1000 - PGID=${PGID}
- TZ=${TIMEZONE} - TZ=${TZ}
volumes: volumes:
- /etc/localtime:/etc/localtime:ro
- ./prowlarr:/config - ./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 restart: unless-stopped
depends_on:
gluetun:
condition: service_healthy
restart: true
network_mode: service:gluetun
jellyseerr: sonarr:
image: fallenbagel/jellyseerr:latest image: lscr.io/linuxserver/sonarr:latest
container_name: jellyseerr container_name: sonarr
restart: unless-stopped
environment: environment:
- TZ=${TIMEZONE} - PUID=${PUID}
- LOG_LEVEL=info - PGID=${PGID}
ports: - TZ=${TZ}
- "5055:5055"
volumes: 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 restart: unless-stopped
depends_on: environment:
- gluetun - PUID=${PUID}
- jellyfin - PGID=${PGID}
- sonarr - TZ=${TZ}
- radarr 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" # General UID/GIU and Timezone
DATA_LOCATION=/mnt/media TZ=America/New_York
PUID=1000
PGID=1000
OPENVPN_USER="fixme" # Input your VPN provider and type here
OPENVPN_PASSWORD="super-secret" VPN_SERVICE_PROVIDER=protonvpn
WIREGUARD_PRIVATE_KEY="super-secret" 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