Downloads
← Home
Services running on PCT 101 (downloads, 192.168.2.190). All standalone containers — not Swarm-managed.
Services
| Container | URL | Port | Purpose |
|---|---|---|---|
qbittorrent-mam |
qbittorrent.carr-family.org |
8080 | MyAnonamouse torrent client |
qbittorrent-vpn |
qbittorrent-vpn.carr-family.org |
8081 (via gluetun) | VPN-routed general torrents |
gluetun-proton |
— | — | ProtonVPN gateway for qbittorrent-vpn |
qui |
qui.carr-family.org |
7476 | Multi-instance qBittorrent web UI |
Compose files on PCT 101:
qbittorrent-mam+qui:/root/stacks/qbittorrent-mam/docker-compose.ymlqbittorrent-vpn+gluetun-proton:/root/stacks/bittorrent-vpn/docker-compose.yml
All four containers excluded from Watchtower — qbittorrent-vpn uses network_mode: "service:gluetun" which is incompatible with rolling restart.
qbittorrent-mam
MAM (MyAnonamouse) torrent client. Image: linuxserver/qbittorrent:4.6.7.
- WebUI:
192.168.2.190:8080, creds:admin / 32Ab0321!! - Config:
/mnt/tank/appdata/qbittorrent/ - Volume:
/mnt/tank/media:/data— only this mount. Do not add a separate bookingest mount;bookingestis accessible as/data/bookingestvia the main mount, and a separate mount would break hardlinks (files would span datasets). - Ports: 8080 (WebUI), 52525 TCP+UDP (BitTorrent)
Tuned settings (4-core Xeon E5-1620 v2, 8 GB RAM, 1 Gbps):
| Setting | Value | Notes |
|---|---|---|
max_active_downloads |
70 | |
disk_cache |
512 MB | ZFS has its own ARC; auto mode balloons to ~6 GB |
max_connec |
1000 | |
max_connec_per_torrent |
200 |
Categories
| Category | Save Path | Used By |
|---|---|---|
MAM |
/data/content/books-seeds |
Direct MAM ebook downloads |
audiobooks |
/data/content/audiobooks |
Audiobookshelf library |
books-shelfmark |
/data/bookingest |
Shelfmark ebook downloads |
audiobook-shelfmark |
/data/bookingest |
Unused |
On-completion Hook
Script: /mnt/tank/appdata/qbittorrent/scripts/hardlink-to-ingest.sh — fires only for MAM category. Hardlinks by file extension (preserving directory structure):
| Extensions | Destination |
|---|---|
.epub, .mobi, .azw3, .pdf, etc. |
/data/bookingest (CWA ingest) |
.m4b, .mp3, .m4a, .aax, etc. |
/data/content/audiobooks (Audiobookshelf) |
.cbz, .cbr, .cb7, .cbt, etc. |
/data/content/comics (Komga) |
Hardlinks work because bookingest (/tank/media/bookingest) and books-seeds (/tank/media/content/books-seeds) are both on the tank/media ZFS dataset. Do not move bookingest back to the tank root dataset.
A background chown 1000:1000 runs 5 minutes after each MAM torrent completes to keep CWA import ownership correct.
Fixing Incorrect Save Paths
The qBittorrent API setLocation returns 200 but silently fails. The only reliable fix:
docker kill --signal SIGKILL qbittorrent-mam(SIGKILL skips state save; graceful stop would overwrite your edits)- Patch
qBt-savePathandsave_pathin/mnt/tank/appdata/qbittorrent/qBittorrent/BT_backup/<hash>.fastresume - Delete all
*.fastresume.*stale backup files in that directory docker start qbittorrent-mam- Force-recheck the affected torrents via API or WebUI
qbittorrent-vpn + gluetun-proton
VPN-routed torrents via ProtonVPN.
- Compose:
/root/stacks/bittorrent-vpn/docker-compose.ymlon PCT 101 - WebUI:
192.168.2.190:8081(via gluetun network),qbittorrent-vpn.carr-family.org(external) qbittorrent-vpnusesnetwork_mode: "service:gluetun"— traffic routes through gluetun's ProtonVPN tunnel- Both containers excluded from Watchtower (
com.centurylinklabs.watchtower.enable=false) — update manually
qui
Multi-instance qBittorrent web UI at qui.carr-family.org. Port 7476. Not in Swarm — static route in Traefik routes.yml → 192.168.2.190:7476.
Configured instances:
qbittorrent-mam→http://192.168.2.190:8080(admin / 32Ab0321!!)qbittorrent-vpn→http://192.168.2.190:8081
Config: /mnt/tank/appdata/qui/
