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.yml
  • qbittorrent-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:/dataonly this mount. Do not add a separate bookingest mount; bookingest is accessible as /data/bookingest via 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:

  1. docker kill --signal SIGKILL qbittorrent-mam (SIGKILL skips state save; graceful stop would overwrite your edits)
  2. Patch qBt-savePath and save_path in /mnt/tank/appdata/qbittorrent/qBittorrent/BT_backup/<hash>.fastresume
  3. Delete all *.fastresume.* stale backup files in that directory
  4. docker start qbittorrent-mam
  5. 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.yml on PCT 101
  • WebUI: 192.168.2.190:8081 (via gluetun network), qbittorrent-vpn.carr-family.org (external)
  • qbittorrent-vpn uses network_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.yml192.168.2.190:7476.

Configured instances:

  • qbittorrent-mamhttp://192.168.2.190:8080 (admin / 32Ab0321!!)
  • qbittorrent-vpnhttp://192.168.2.190:8081

Config: /mnt/tank/appdata/qui/

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9