一台服务器可以运行多个 qBittorrent-nox,用于按任务用途分别管理种子。关键是让每个实例拥有自己的配置、运行用户、管理端口和下载目录。
本文以 Debian 12 为示例,手动部署两个全新实例,不依赖第三方一键脚本。命令按系统软件源安装的 qBittorrent-nox 设计;不同发行版、软件版本与既有部署可能需要调整。这是一份依据官方文档整理的部署教程,没有使用某台生产服务器的实测结果。
如果已经有符合特定服务结构的主实例,也可以参考本站的 more-qb 脚本介绍。那篇文章使用同一用户和独立 profile;本文使用不同 Linux 用户,适合从头部署,两套方案不要混着执行。
1. 先规划实例
本文使用以下参数,端口均为示例:
| 项目 | 实例一 | 实例二 |
|---|---|---|
| Linux 用户 | qbt1 | qbt2 |
| 用户家目录 | /var/lib/qbt1 | /var/lib/qbt2 |
| WebUI 端口 | 8082 | 8083 |
| BT 监听端口 | 23334 | 23335 |
| 下载目录 | /mnt/qbt1 | /mnt/qbt2 |
| systemd 服务 | [email protected] | [email protected] |
WebUI 端口用于浏览器管理,BT 端口用于与其他客户端传输数据。 改了 WebUI 端口,不代表 BT 端口也变了。
多实例仍共享服务器的 CPU、内存、磁盘和网络带宽。它方便拆分任务,但不会凭空增加磁盘性能,也不保证上传更快。
2. 检查环境并安装
以下服务器命令以 root 执行;普通用户可先使用 sudo -i。不要把服务器命令粘贴进博客编辑器。
先查看环境:
cat /etc/os-release
findmnt -T /mnt
df -hT /mnt
getent passwd qbt1 qbt2
ss -lntup | grep -E ':(8082|8083|23334|23335)([[:space:]]|$)'
getent 和端口筛选没有输出,分别表示未找到这两个用户、未找到这些端口的监听记录;这两项查询可能返回非零退出码,并不代表系统异常。若已经存在同名用户、实例目录、服务文件,或示例端口已占用,先换一套名称与端口,不要覆盖旧配置。
/mnt 必须是你确认过的数据存储位置。如果预期的数据盘未挂载,先处理挂载,否则后面的目录可能建在系统盘上。本文不会格式化磁盘、调整 RAID 或修改 swap。
安装发行版仓库中的软件,并确认实际版本:
apt update
apt install -y qbittorrent-nox sudo
command -v qbittorrent-nox
qbittorrent-nox --version
apt-cache policy qbittorrent-nox
本文服务文件假设程序位于 /usr/bin/qbittorrent-nox。如果路径不同,后文的启动命令也要对应修改。不要为了和示例版本完全一致而降级软件;用于 PT 时,另行确认站点允许的客户端版本。
3. 创建用户和下载目录
useradd --system --user-group --create-home --home-dir /var/lib/qbt1 --shell /usr/sbin/nologin qbt1
useradd --system --user-group --create-home --home-dir /var/lib/qbt2 --shell /usr/sbin/nologin qbt2
install -d -o qbt1 -g qbt1 -m 0750 /mnt/qbt1
install -d -o qbt2 -g qbt2 -m 0750 /mnt/qbt2
install -d -o qbt1 -g qbt1 -m 0700 /var/lib/qbt1/.config/qBittorrent
install -d -o qbt2 -g qbt2 -m 0700 /var/lib/qbt2/.config/qBittorrent
两个用户没有交互登录 shell,但可以由 systemd 或管理员通过 sudo -u 启动程序。
默认配置分别位于:
/var/lib/qbt1/.config/qBittorrent/qBittorrent.conf/var/lib/qbt2/.config/qBittorrent/qBittorrent.conf
不同用户通常也有各自的会话与种子恢复数据目录。因此,本文不需要额外使用 --profile。Linux 用户隔离也不是完整沙箱,不应把它理解成容器级隔离。
4. 首次启动:先限制管理界面
在两个尚未启动过的全新实例中,预先创建最小配置,让 WebUI 只监听服务器回环地址。下面的写入命令不能用来重置已有实例:
cat > /var/lib/qbt1/.config/qBittorrent/qBittorrent.conf <<'EOF'
[Preferences]
WebUI\Address=127.0.0.1
WebUI\LocalHostAuth=true
WebUI\AuthSubnetWhitelistEnabled=false
EOF
cat > /var/lib/qbt2/.config/qBittorrent/qBittorrent.conf <<'EOF'
[Preferences]
WebUI\Address=127.0.0.1
WebUI\LocalHostAuth=true
WebUI\AuthSubnetWhitelistEnabled=false
EOF
chown qbt1:qbt1 /var/lib/qbt1/.config/qBittorrent/qBittorrent.conf
chown qbt2:qbt2 /var/lib/qbt2/.config/qBittorrent/qBittorrent.conf
chmod 0600 /var/lib/qbt1/.config/qBittorrent/qBittorrent.conf
chmod 0600 /var/lib/qbt2/.config/qBittorrent/qBittorrent.conf
先启动第一个实例:
sudo -u qbt1 -H /usr/bin/qbittorrent-nox --webui-port=8082
阅读首次启动提示,并按提示接受法律声明。终端保持运行。
在自己电脑上另开一个终端,手动建立 SSH 隧道;把 你的SSH用户 和 服务器地址 替换为实际值:
ssh -N -L 18082:127.0.0.1:8082 -L 18083:127.0.0.1:8083 你的SSH用户@服务器地址
若 SSH 不是默认端口,给命令添加 -p 实际SSH端口。本地的 18082、18083 如果已占用,可以换成本地空闲端口。
保持隧道终端运行,然后在电脑浏览器中访问 http://127.0.0.1:18082/。这里的本地地址通过 SSH 转发到服务器,直接在电脑上访问服务器的 127.0.0.1 不会生效。
首次登录的用户名通常是 admin:
- 4.6.1 之前的全新版本配置通常使用初始密码
adminadmin。 - 4.6.1 及之后,在未设置持久密码时使用启动终端中打印的临时密码;以实际版本和终端提示为准。
登录后立即设置自己的强密码,并在设置中完成:
| 设置位置 | 实例一的值 |
|---|---|
| 下载 → 默认保存路径 | /mnt/qbt1 |
| 连接 → 传入连接监听端口 | 23334 |
| 连接 → 每次启动使用随机端口 | 关闭 |
如果启用了“未完成文件保存在其他位置”,该路径也必须属于当前实例并具有写权限;初次部署可以先不启用。保持 WebUI 身份验证开启,不启用本地主机免认证或子网免认证。
保存后,在运行第一个实例的服务器终端按 Ctrl+C,等待进程退出,再初始化第二个实例:
sudo -u qbt2 -H /usr/bin/qbittorrent-nox --webui-port=8083
访问 http://127.0.0.1:18083/,设置第二个实例自己的密码、下载目录 /mnt/qbt2 和 BT 端口 23335,关闭随机端口,保存后同样用 Ctrl+C 退出。
先后初始化,是为了在同时运行前为两个实例设置不同的 BT 端口。不要直接假设初始默认端口已经隔离。
5. 用 systemd 管理
先创建实例参数目录和两个文件:
install -d -m 0755 /etc/qbt-multi
printf 'WEBUI_PORT=8082\n' > /etc/qbt-multi/qbt1.env
printf 'WEBUI_PORT=8083\n' > /etc/qbt-multi/qbt2.env
创建服务模板:
cat > /etc/systemd/system/[email protected] <<'EOF'
[Unit]
Description=qBittorrent-nox instance %i
Wants=network-online.target
After=network-online.target
RequiresMountsFor=/mnt/%i
[Service]
Type=exec
User=%i
Group=%i
Environment=HOME=/var/lib/%i
EnvironmentFile=/etc/qbt-multi/%i.env
WorkingDirectory=/var/lib/%i
ExecStart=/usr/bin/qbittorrent-nox --webui-port=${WEBUI_PORT}
Restart=on-failure
RestartSec=5
TimeoutStopSec=180
UMask=0027
[Install]
WantedBy=multi-user.target
EOF
systemd-analyze verify /etc/systemd/system/[email protected]
systemctl daemon-reload
systemctl enable --now [email protected] [email protected]
%i 是实例名,例如 qbt1。同一个模板会以不同用户读取各自参数。Type=exec 让 systemd 跟踪前台进程,不要再添加 -d 或 --daemon。
RequiresMountsFor 根据对应路径的挂载关系安排依赖,但不会替你创建或正确配置数据盘挂载;部署前的 findmnt 检查仍然必要。
6. 验证是否真正启动
systemctl status [email protected] [email protected] --no-pager
ps -eo user,pid,args | grep '[q]bittorrent-nox'
ss -lntup | grep -E ':(8082|8083|23334|23335)([[:space:]]|$)'
curl -I http://127.0.0.1:8082/
curl -I http://127.0.0.1:8083/
检查重点是:两个服务均为 active (running);两个进程分别属于 qbt1 和 qbt2;WebUI 监听地址是 127.0.0.1;BT 端口与规划一致。UDP 在 ss 中显示为 UNCONN 是常见情况,不应只寻找 TCP 的 LISTEN。
通过 SSH 隧道分别进入两个 WebUI,再次核对保存路径。需要验证写权限时可以执行:
sudo -u qbt1 test -w /mnt/qbt1 && echo 'qbt1 download directory writable'
sudo -u qbt2 test -w /mnt/qbt2 && echo 'qbt2 download directory writable'
这些检查通过后,再添加自己有权下载、分发的小任务,验证实际下载和做种。不要只凭服务处于 running 状态判断全部部署完成。
7. 防火墙和远程访问
本文通过 SSH 隧道管理 WebUI,因此不需要对公网放行 8082、8083。
若使用并已启用 UFW,可按实际需要放行两个 BT 端口:
ufw allow 23334/tcp
ufw allow 23334/udp
ufw allow 23335/tcp
ufw allow 23335/udp
不要为了照抄命令临时启用另一套防火墙。使用 nftables、云安全组、供应商防火墙或路由器 NAT 时,在对应位置配置入站规则或端口转发。上述规则不会自动修改这些外部设备。
想改成域名访问,可另外配置 HTTPS 反向代理。若反向代理在容器中,容器自己的 127.0.0.1 不是服务器宿主机,不能直接套用本文的回环上游地址;需要先确认代理与 qBittorrent 的网络连通方式。
8. 常用管理和排错
单独重启第一个实例:
systemctl restart [email protected]
查看第二个实例最近的日志:
journalctl -u [email protected] -b -n 100 --no-pager
遇到问题先按症状排查:
| 现象 | 优先检查 |
|---|---|
| WebUI 打不开 | 服务状态、SSH 隧道是否保持运行、本地转发端口是否正确 |
| 能登录但下载报错 | 下载路径、未完成目录、挂载状态与目录权限 |
| 第二个实例启动失败 | 是否仍有手动进程、端口冲突、实例用户或环境文件是否缺失 |
| 上传很慢 | 种客需求、入站可达性、磁盘延迟、总带宽与任务并发 |
| 手改配置后又恢复 | 是否未停服务,导致退出时程序覆盖了配置 |
如果必须手动编辑 qBittorrent.conf,先停止对应服务,备份文件后修改,再启动。不要在进程运行时反复改同一个配置文件。
多个实例默认不要共用同一个下载目录:一个实例移动、重命名或删除文件,可能影响另一个实例。确实需要共享辅种文件时,应另外设计权限与删除策略。
9. 备份与移除
一致性备份应在两个实例都已停止后进行,备份整个家目录,而不只是一个配置文件:
systemctl stop [email protected] [email protected]
tar -C / -czf /root/qbt-multi-backup-$(date +%Y%m%d-%H%M%S).tar.gz \
var/lib/qbt1 var/lib/qbt2 etc/qbt-multi etc/systemd/system/[email protected]
systemctl start [email protected] [email protected]
执行前确认服务已停止、备份目标空间足够,执行后检查 tar 是否成功。备份中可能包含密码哈希、Tracker 地址和 passkey,应妥善保存。此备份不包含 /mnt/qbt1、/mnt/qbt2 的下载文件,数据需要单独备份。恢复时还需匹配用户 UID/GID 或重新检查所有权。
如果只想撤掉两个实例的自启和服务:
systemctl disable --now [email protected] [email protected]
rm /etc/systemd/system/[email protected]
systemctl daemon-reload
这组命令保留用户、配置、环境文件和下载数据,也不会卸载其他实例可能共用的 qBittorrent-nox。确认不再需要后,再分别处理剩余文件与用户,不要直接对下载目录使用递归删除。