services: # Synchronisiert das Git-versionierte Postprocessing vor jedem SAB-Start # atomar auf den bestehenden NFS-Skriptpfad und setzt das Execute-Bit. script-sync: image: alpine:3.22 container_name: sabnzbd-script-sync volumes: - ./usenet-scripts:/source:ro - usenet:/usenet command: - /bin/sh - -ec - | mkdir -p /usenet/scripts install -m 0755 /source/movetdarr.sh /usenet/scripts/movetdarr.sh.new mv -f /usenet/scripts/movetdarr.sh.new /usenet/scripts/movetdarr.sh restart: "no" # WireGuard VPN-Exit -> Hetzner wg2 (dedizierter Tunnel). SABnzbd teilt diesen Netzstack, # damit der gesamte Usenet-Traffic ueber die Hetzner-IP rausgeht. wireguard: image: lscr.io/linuxserver/wireguard:latest container_name: sabnzbd-wg cap_add: - NET_ADMIN - SYS_MODULE environment: - PUID=1000 - PGID=1000 - TZ=Europe/Berlin volumes: - /app-config/sabnzbd/wg:/config - /lib/modules:/lib/modules:ro sysctls: - net.ipv4.conf.all.src_valid_mark=1 ports: - 7777:7777 # SABnzbd-WebUI laeuft im Netzstack dieses Containers healthcheck: test: ["CMD-SHELL", "wg show wg0 | grep -q 'latest handshake' || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 20s restart: unless-stopped sabnzbd: image: lscr.io/linuxserver/sabnzbd:latest container_name: sabnzbd network_mode: "service:wireguard" depends_on: wireguard: condition: service_healthy script-sync: condition: service_completed_successfully environment: - PUID=1000 - PGID=1000 - TZ=Europe/Berlin volumes: - /app-config/sabnzbd/config:/config - usenet:/usenet - tdarr:/tdarr - chris:/chris - /mnt/media:/data restart: unless-stopped volumes: usenet: name: tdarr_usenet driver: local driver_opts: device: :/usenet o: addr=10.2.1.1,nolock,hard,rw type: nfs tdarr: name: tdarr driver: local driver_opts: device: :/tdarr o: addr=10.2.1.1,nolock,hard,rw type: nfs chris: name: chris_data driver: local driver_opts: device: :/chris o: addr=10.7.1.106,nolock,hard,rw type: nfs