Yang dibangun
Sebuah storage node yang menjalankan qBittorrent sebagai layanan tanpa hak istimewa: data yang belum selesai ditulis ke tier NVMe, data yang selesai dipindahkan ke tier bulk lima puluh terabyte, semuanya dimiliki oleh grup bersama sehingga akun kedua dapat membacanya melalui SFTP tanpa perlu mengubah kepemilikan file secara manual, dan antarmuka web yang hanya dapat diakses melalui proxy yang diautentikasi.
Pendekatan yang umum adalah menginstal paket, mengklik antarmuka, dan melanjutkan aktivitas. Itu berfungsi selama dua minggu, sampai file pertama muncul dengan grup yang salah dan pengguna sinkronisasi Anda tidak dapat membacanya, dan saat itu sudah ada empat puluh ribu file dengan grup yang salah.
Sebelum memulai
- Sebuah S-50: lima puluh terabyte bulk di belakang tier NVMe satu terabyte, pada port sepuluh gigabit. Lalu lintas tidak diukur berdasarkan penggunaan wajar, dan kebijakan penggunaan yang dapat diterima singkat dan spesifik tentang apa yang boleh melaluinya. Hak distribusi adalah masalah Anda, bukan catatan kaki.
- Debian 13, root, dan hostname seperti
box.example.com.
1. Pengguna, grup, tata letak
apt update && apt install -y qbittorrent-nox nginx apache2-utils acl
groupadd -g 3000 media
useradd -r -g media -u 3000 -d /srv/qbt -m -s /usr/sbin/nologin qbt
useradd -m -G media syncDua akun, satu grup. Daemon berjalan sebagai qbt dan tidak pernah masuk; sync adalah akun yang Anda gunakan untuk menarik file dan tidak dapat menulis apa pun. Sekarang direktori, dan dua flag yang membuat ini berfungsi permanen:
install -d -o qbt -g media -m 2775 /srv/nvme/incomplete
install -d -o qbt -g media -m 2775 /srv/bulk/complete
setfacl -d -m g:media:rwx /srv/bulk/complete
setfacl -d -m g:media:rwx /srv/nvme/incompleteMode 2775 menetapkan bit setgid, sehingga setiap file yang dibuat di dalamnya mewarisi grup media, bukan grup utama pengguna yang membuat. ACL default kemudian memberikan grup tersebut hak baca dan tulis pada entri baru terlepas dari umask proses. Bersama-sama, keduanya berarti pertanyaan izin dijawab sekali, bukan setelah setiap unduhan.
Pada S-50, tier bulk dan NVMe adalah perangkat blok terpisah. Konfirmasikan mana yang mana sebelum Anda berkomitmen pada jalur:
lsblk -o NAME,SIZE,ROTA,MOUNTPOINT2. Daemon
Mulai sekali agar daemon menulis file konfigurasi, lalu hentikan dan edit file tersebut. Berdebat dengan antarmuka untuk pengaturan yang ada di file teks adalah buang-buang waktu.
sudo -u qbt qbittorrent-nox --webui-port=8080 &
sleep 5 && pkill -u qbt qbittorrent-noxEdit /srv/qbt/.config/qBittorrent/qBittorrent.conf sehingga bagian [BitTorrent] dan [Preferences] berisi:
[BitTorrent]
Session\DefaultSavePath=/srv/bulk/complete
Session\TempPath=/srv/nvme/incomplete
Session\TempPathEnabled=true
Session\Port=51413
Session\DiskCacheSize=2048
Session\MaxConnections=800
Session\MaxUploads=40
Session\GlobalMaxSeedingMinutes=-1
Session\Preallocation=true
[Preferences]
WebUI\Address=127.0.0.1
WebUI\Port=8080
WebUI\LocalHostAuth=false
WebUI\CSRFProtection=true
Downloads\UseIncompleteExtension=trueStaging di NVMe adalah trik utamanya. Tulis torrent kecil dan tersebar, yang merupakan pola terburuk untuk tier bulk; NVMe menyerapnya, dan file yang selesai dipindahkan sebagai satu salinan sekuensial. Preallocation mencegah fragmentasi saat masuk.
3. Unit yang tidak bisa berpindah
/etc/systemd/system/qbittorrent.service:
[Unit]
Description=qBittorrent
After=network-online.target
Wants=network-online.target
[Service]
User=qbt
Group=media
UMask=0002
ExecStart=/usr/bin/qbittorrent-nox
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=strict
ProtectHome=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
ReadWritePaths=/srv/qbt /srv/nvme/incomplete /srv/bulk/complete
LimitNOFILE=65535
[Install]
WantedBy=multi-user.targetUMask=0002 dan Group=media adalah yang menjaga file baru dapat ditulis grup. Tanpa yang pertama, setgid memberi Anda grup yang tepat pada file yang tidak dapat ditulis oleh siapa pun di grup itu, yang merupakan setengah keberhasilan yang rumit dan menjengkelkan.
systemctl daemon-reload && systemctl enable --now qbittorrent4. Kernel dan firewall
Sepuluh gigabit dengan beberapa ratus peer membutuhkan buffer soket yang lebih besar dan tabel koneksi yang tidak akan penuh:
cat > /etc/sysctl.d/70-seedbox.conf <<EOF
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.netfilter.nf_conntrack_max = 524288
EOF
sysctl --systemFirewall: port torrent terbuka di kedua keluarga, SSH dan HTTPS terbuka, antarmuka web terikat ke loopback dan karena itu tidak memerlukan apa pun.
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
iif lo accept
ip6 nexthdr icmpv6 accept
ip protocol icmp accept
tcp dport { 22, 443 } accept
tcp dport 51413 accept
udp dport 51413 accept
}
}5. Antarmuka, di belakang proxy
certbot certonly --standalone -d box.example.com
htpasswd -c /etc/nginx/qbt.htpasswd youserver {
listen 443 ssl;
server_name box.example.com;
ssl_certificate /etc/letsencrypt/live/box.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/box.example.com/privkey.pem;
client_max_body_size 100m;
location / {
auth_basic "closed";
auth_basic_user_file /etc/nginx/qbt.htpasswd;
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-Host $http_host;
proxy_http_version 1.1;
}
}Verifikasi
Gunakan sesuatu dengan swarm besar dan tersebar baik serta lisensi yang jelas. Gambar installer Debian saat ini adalah pilihan tradisional dan memenuhi port sepuluh gigabit lebih meyakinkan daripada apa pun yang dapat Anda uji secara legal.
Tambahkan torrent melalui antarmuka, lalu amati tier staging terisi:
watch -n2 "du -sh /srv/nvme/incomplete /srv/bulk/complete"Saat berjalan, konfirmasikan bahwa port benar-benar dapat dijangkau, bukan hanya terbuka di firewall Anda sendiri, karena port yang tidak dapat dijangkau menghasilkan seedbox yang mengunduh dengan baik tetapi tidak menyerahkan ke siapa pun:
ss -tn state established sport = :51413 | wc -lKoneksi masuk pada port itu berarti peer menemukan Anda. Nol, dengan banyak koneksi keluar, berarti hanya Anda yang menelepon keluar.
Saat unduhan selesai, periksa tiga hal yang dibangun untuk ini:
ls -l /srv/nvme/incomplete
ls -ln /srv/bulk/complete
sudo -u sync cat /srv/bulk/complete/*.iso > /dev/null && echo "sync can read"Direktori staging kosong, file yang selesai menunjukkan grup 3000 dengan baca dan tulis grup, dan akun sync dapat membacanya tanpa perbaikan izin manual. Perintah ketiga itulah yang membuktikan kerja setgid dan ACL berhasil.
Terakhir, buktikan bahwa antarmuka tidak terbuka:
curl -m5 http://box.example.com:8080/ ; echo "exit $?"
curl -sI https://box.example.com/ | head -1Yang pertama harus gagal pada koneksi, yang kedua harus mengembalikan 401. Jika tidak, pengikatan alamat pada langkah kedua tidak berhasil.
Setelahnya
Atur rasio seeding global atau batas waktu berbagi kecuali Anda berniat melakukan seeding selamanya, karena lima puluh terabyte terisi lebih cepat dari yang diperkirakan siapa pun. Jika keluhan tentang lalu lintas dari instance Anda mencapai kami, prosesnya dijelaskan di halaman penyalahgunaan: diteruskan kepada Anda, dan kami tidak memeriksa disk Anda.