arr fleet: FrankBook-Pro is the sole deployment, all egress VPN-gated

FrankBook-Pro becomes the only *arr/qBittorrent deployment. Every fleet
container (qB + five arrs) now shares gluetun's netns, so all egress —
torrent, indexer APIs, metadata lookups — exits the WireGuard tunnel by
construction (AllowedIPs=0.0.0.0/0); the arrs' own ports publish on the
gluetun unit, none on the arr units themselves.

- dankserver/compose.yaml: remove the six arr services (the Aug 20 compose
  copy — never healthy, superseded; config dirs trashed on the host)
- dankclaw/Caddyfile + shared/homepage/services.json: arr vhosts and
  probes repoint 192.168.0.235 -> 192.168.0.112 (FrankBook-Pro)
- frankbook-pro units: five arrs join gluetun netns (Wants/After/Network);
  gluetun publishes 9696/8989/7878/8686/8787 alongside 8080/6881
- tests/frankbook_quadlet.bats: new VPN egress seam — every arr+qB unit
  must share gluetun's netns and publish no port; gluetun must publish the
  whole fleet's ports
- deploy-plan.py: gluetun changes carry the whole netns family (a gluetun
  recreation kills all six joiners); dankserver compose set loses the arrs
- AGENTS.md: deployment is complete only when unit tests AND the Playwright
  E2E suite both pass
This commit is contained in:
Frank
2026-09-04 12:54:28 -07:00
parent 8a6362401a
commit 4c7465d00d
14 changed files with 101 additions and 163 deletions
-2
View File
@@ -20,5 +20,3 @@ COPAY_PASS=changeme
# Jellyfin
JELLYFIN_PUBLISH_SERVER_URL=http://192.168.0.235:8096
# *arr Stack
ARR_TZ=America/New_York
-103
View File
@@ -146,109 +146,6 @@ services:
timeout: 10s
retries: 3
# ═══════════════════════════════════════════════
# *arr Stack — automated media download
# ═══════════════════════════════════════════════
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=America/Los_Angeles
- UMASK_SET=022
volumes:
- /mnt/entropy/downloads:/downloads:ro
- /opt/prowlarr/config:/config
networks: [appnet]
ports:
- "9696:9696"
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=America/Los_Angeles
- UMASK_SET=022
volumes:
- /opt/qbittorrent/config:/config
- /mnt/entropy/downloads:/downloads
- /mnt/entropy/downloads/incomplete:/downloads/incomplete
ports:
- "8080:8080"
networks: [appnet]
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=America/Los_Angeles
- UMASK_SET=022
volumes:
- /opt/radarr/config:/config
- /mnt/entropy/Movies:/movies
- /mnt/entropy/downloads:/downloads
ports:
- "7878:7878"
networks: [appnet]
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=America/Los_Angeles
- UMASK_SET=022
volumes:
- /opt/sonarr/config:/config
- /mnt/entropy/TVShows:/tv
- /mnt/entropy/downloads:/downloads
ports:
- "8989:8989"
networks: [appnet]
lidarr:
image: lscr.io/linuxserver/lidarr:latest
container_name: lidarr
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=America/Los_Angeles
- UMASK_SET=022
volumes:
- /opt/lidarr/config:/config
- /mnt/entropy/Music:/music
- /mnt/entropy/downloads:/downloads
ports:
- "8686:8686"
networks: [appnet]
readarr:
image: lscr.io/linuxserver/readarr:amd64-1.0.980
container_name: readarr
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=America/Los_Angeles
- UMASK_SET=022
volumes:
- /opt/readarr/config:/config
- /mnt/entropy/eBooks:/books
- /mnt/entropy/downloads:/downloads
ports:
- "8787:8787"
networks: [appnet]
# ═══════════════════════════════════════════════
# Node Exporter — host metrics