Summary
Add automated media acquisition stack: qBittorrent routed through gluetun VPN, with Prowlarr (indexer manager), Sonarr (TV), and Radarr (movies) all wired together and integrated with the existing Jellyfin library.
Architecture note: gluetun network sharing
qBittorrent uses network_mode: service:gluetun to share gluetun's network namespace. As a result:
- Traefik labels live on
gluetun, not qbittorrent
- qBittorrent's WebUI is reached through gluetun's proxy network IP
Changes
docker-compose.yml
- Add
gluetun service with Traefik labels for qbittorrent.woggles.work
- Add
qbittorrent service with network_mode: service:gluetun
- Add
prowlarr service (port 9696, prowlarr.woggles.work)
- Add
sonarr service (port 8989, sonarr.woggles.work)
- Add
radarr service (port 7878, radarr.woggles.work)
- Add
HOMEPAGE_VAR_QBITTORRENT_USERNAME/PASSWORD, HOMEPAGE_VAR_PROWLARR/SONARR/RADARR_API_KEY to homepage environment block
homepage/config/services.yaml
- Add
Media Downloads section with cards for qBittorrent, Prowlarr, Sonarr, Radarr
.env.example
- Add VPN vars:
VPN_PROVIDER, VPN_TYPE, WIREGUARD_PRIVATE_KEY, WIREGUARD_ADDRESSES, VPN_SERVER_COUNTRIES
- Add
DOWNLOADS_PATH
- Add
QBITTORRENT_USERNAME, QBITTORRENT_PASSWORD
- Add
PROWLARR_API_KEY, SONARR_API_KEY, RADARR_API_KEY
scripts/setup.sh
- Add
mkdir -p qbittorrent/config prowlarr/config sonarr/config radarr/config
Post-deploy steps
- Visit
https://qbittorrent.woggles.work — verify VPN IP differs from server IP
- Grab API keys from each service's Settings > General and populate
.env
- Restart homepage to pick up new API keys
Acceptance
./scripts/lint-config.sh exits 0
- All four services reachable at their respective subdomains
- qBittorrent traffic exits through VPN (confirmed via IP leak check)
- Homepage widgets show live data for all four services
Summary
Add automated media acquisition stack: qBittorrent routed through gluetun VPN, with Prowlarr (indexer manager), Sonarr (TV), and Radarr (movies) all wired together and integrated with the existing Jellyfin library.
Architecture note: gluetun network sharing
qBittorrent uses
network_mode: service:gluetunto share gluetun's network namespace. As a result:gluetun, notqbittorrentChanges
docker-compose.ymlgluetunservice with Traefik labels forqbittorrent.woggles.workqbittorrentservice withnetwork_mode: service:gluetunprowlarrservice (port 9696,prowlarr.woggles.work)sonarrservice (port 8989,sonarr.woggles.work)radarrservice (port 7878,radarr.woggles.work)HOMEPAGE_VAR_QBITTORRENT_USERNAME/PASSWORD,HOMEPAGE_VAR_PROWLARR/SONARR/RADARR_API_KEYto homepage environment blockhomepage/config/services.yamlMedia Downloadssection with cards for qBittorrent, Prowlarr, Sonarr, Radarr.env.exampleVPN_PROVIDER,VPN_TYPE,WIREGUARD_PRIVATE_KEY,WIREGUARD_ADDRESSES,VPN_SERVER_COUNTRIESDOWNLOADS_PATHQBITTORRENT_USERNAME,QBITTORRENT_PASSWORDPROWLARR_API_KEY,SONARR_API_KEY,RADARR_API_KEYscripts/setup.shmkdir -p qbittorrent/config prowlarr/config sonarr/config radarr/configPost-deploy steps
https://qbittorrent.woggles.work— verify VPN IP differs from server IP.envAcceptance
./scripts/lint-config.shexits 0