services: # ─── VPN Gateway ─────────────────────────────── gluetun: image: qmcgaw/gluetun container_name: gluetun cap_add: - NET_ADMIN devices: - /dev/net/tun:/dev/net/tun environment: - VPN_SERVICE_PROVIDER=protonvpn - VPN_TYPE=wireguard - WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY} - SERVER_COUNTRIES=${VPN_COUNTRY:-United States} - DOT=on - TZ=${TZ:-America/Los_Angeles} ports: - 8080:8080 volumes: - ./config/gluetun:/gluetun restart: unless-stopped networks: - gluetun_net # ─── Torrent Client ─────────────────────────── qbittorrent: image: linuxserver/qbittorrent container_name: qbittorrent environment: - PUID=1000 - PGID=1000 - TZ=${TZ:-America/Los_Angeles} - WEBUI_PORT=8080 volumes: - ./config/qbittorrent:/config - /mnt/media/downloads:/downloads network_mode: "service:gluetun" depends_on: - gluetun restart: unless-stopped # ─── Media Management ───────────────────────── sonarr: image: linuxserver/sonarr container_name: sonarr environment: - PUID=1000 - PGID=1000 - TZ=${TZ:-America/Los_Angeles} volumes: - ./config/sonarr:/config - /mnt/media/tv:/tv - /mnt/media/downloads:/downloads ports: - 8989:8989 networks: - default - gluetun_net restart: unless-stopped radarr: image: linuxserver/radarr container_name: radarr environment: - PUID=1000 - PGID=1000 - TZ=${TZ:-America/Los_Angeles} volumes: - ./config/radarr:/config - /mnt/media/movies:/movies - /mnt/media/downloads:/downloads ports: - 7878:7878 networks: - default - gluetun_net restart: unless-stopped lidarr: image: linuxserver/lidarr container_name: lidarr environment: - PUID=1000 - PGID=1000 - TZ=${TZ:-America/Los_Angeles} volumes: - ./config/lidarr:/config - /mnt/media/music:/music - /mnt/media/downloads:/downloads ports: - 8686:8686 networks: - default - gluetun_net restart: unless-stopped # ─── Request Management ─────────────────────── jellyseerr: image: fallenbagel/jellyseerr:latest container_name: jellyseerr environment: - PUID=1000 - PGID=1000 - TZ=${TZ:-America/Los_Angeles} volumes: - ./config/jellyseerr:/app/config ports: - 5055:5055 networks: - default - gluetun_net restart: unless-stopped # ─── Media Server ───────────────────────────── jellyfin: image: linuxserver/jellyfin container_name: jellyfin environment: - PUID=1000 - PGID=1000 - TZ=${TZ:-America/Los_Angeles} volumes: - ./config/jellyfin:/config - /mnt/media/tv:/data/tvshows - /mnt/media/movies:/data/movies - /mnt/media/music:/data/music ports: - 8096:8096 - 8920:8920 restart: unless-stopped networks: gluetun_net: