Files
arr-suite-template-bootstrap/compose/docker-compose-vpn.yml
openhands 24f2cd64e9 Initial template repository
🎬 ARR Suite Template Bootstrap - Complete Media Automation Stack

Features:
- 16 production services (Prowlarr, Sonarr, Radarr, Plex, etc.)
- One-command Ansible deployment
- VPN-protected downloads via Gluetun
- Tailscale secure access
- Production-ready security (UFW, Fail2Ban)
- Automated backups and monitoring
- Comprehensive documentation

Ready for customization and deployment to any VPS.

Co-authored-by: openhands <openhands@all-hands.dev>
2025-11-28 04:26:12 +00:00

152 lines
4.0 KiB
YAML

version: '3.8'
services:
sonarr:
image: linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=${PUID:-1234}
- PGID=${PGID:-65432}
- TZ=${TZ:-Europe/London}
- UMASK=022
volumes:
- ${CONFIG_ROOT:-/volume1/docker}/sonarr:/config
- ${DATA_ROOT:-/volume1/data}:/data
ports:
- ${SONARR_PORT:-8989}:8989/tcp
network_mode: ${NETWORK_MODE:-synobridge}
security_opt:
- no-new-privileges:true
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8989/ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
radarr:
image: linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=${PUID:-1234}
- PGID=${PGID:-65432}
- TZ=${TZ:-Europe/London}
- UMASK=022
volumes:
- ${CONFIG_ROOT:-/volume1/docker}/radarr:/config
- ${DATA_ROOT:-/volume1/data}:/data
ports:
- ${RADARR_PORT:-7878}:7878/tcp
network_mode: ${NETWORK_MODE:-synobridge}
security_opt:
- no-new-privileges:true
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:7878/ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
lidarr:
image: linuxserver/lidarr:latest
container_name: lidarr
environment:
- PUID=${PUID:-1234}
- PGID=${PGID:-65432}
- TZ=${TZ:-Europe/London}
- UMASK=022
volumes:
- ${CONFIG_ROOT:-/volume1/docker}/lidarr:/config
- ${DATA_ROOT:-/volume1/data}:/data
ports:
- ${LIDARR_PORT:-8686}:8686/tcp
network_mode: ${NETWORK_MODE:-synobridge}
security_opt:
- no-new-privileges:true
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8686/ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
bazarr:
image: linuxserver/bazarr:latest
container_name: bazarr
environment:
- PUID=${PUID:-1234}
- PGID=${PGID:-65432}
- TZ=${TZ:-Europe/London}
- UMASK=022
volumes:
- ${CONFIG_ROOT:-/volume1/docker}/bazarr:/config
- ${DATA_ROOT:-/volume1/data}:/data
ports:
- ${BAZARR_PORT:-6767}:6767/tcp
network_mode: ${NETWORK_MODE:-synobridge}
security_opt:
- no-new-privileges:true
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6767/ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
# VPN Container (GlueTUN example)
gluetun:
image: qmcgaw/gluetun:latest
container_name: gluetun
cap_add:
- NET_ADMIN
environment:
- VPN_SERVICE_PROVIDER=${VPN_PROVIDER:-nordvpn}
- VPN_TYPE=${VPN_TYPE:-openvpn}
- OPENVPN_USER=${VPN_USER}
- OPENVPN_PASSWORD=${VPN_PASSWORD}
- SERVER_COUNTRIES=${VPN_COUNTRIES:-Netherlands}
- PUID=${PUID:-1234}
- PGID=${PGID:-65432}
- TZ=${TZ:-Europe/London}
volumes:
- ${CONFIG_ROOT:-/volume1/docker}/gluetun:/gluetun
ports:
- ${PROWLARR_PORT:-9696}:9696/tcp # Prowlarr through VPN
network_mode: ${NETWORK_MODE:-synobridge}
security_opt:
- no-new-privileges:true
restart: always
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://www.google.com/"]
interval: 60s
timeout: 10s
retries: 3
start_period: 30s
# Prowlarr running through VPN
prowlarr:
image: linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=${PUID:-1234}
- PGID=${PGID:-65432}
- TZ=${TZ:-Europe/London}
- UMASK=022
volumes:
- ${CONFIG_ROOT:-/volume1/docker}/prowlarr:/config
network_mode: "container:gluetun" # Use VPN container's network
security_opt:
- no-new-privileges:true
restart: always
depends_on:
- gluetun
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9696/ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s