Debian 9 安装 rTorrent + ruTorrent + Nginx 搭建自己的 PT / BT 盒子

在阅读本文前,请先了解什么是 Private Tracker (简称 PT)

Private Tracker,简称 PT,即私用种子服务器。Private Tracker 可以统计用户的上传和下载量,计算用户的分享率。你可以简单将它理解为 BT 的升级版,在拥有 BT 所有功能的同时,需要达到一定的分享率才能不被删除帐号。PT 下载其实也是 BT 下载的一种,但有两个明显的改进:一是私密的小范围下载,二是进行流量统计,根据上载量决定你的权限。

相关介绍请摸这儿这儿这儿

简单点说,就是不公开的 BT 下载,为了防止用户吸血(只下载不上传),很多 PT 站点都有一些上传考核等规定,而很多朋友家里的小水管上传带宽是不够的,这时候,我们就可以利用服务器的大带宽资源,在自己服务器上搭建 Seedbox (行内黑话叫做盒子)

这个圈子和域名圈子一样,有不少黑话,很多国内外的网站都被起了昵称,比如馒头,海德堡,天空、家园、春天等等等,当然这不是本文的重点,本文会指导你如何在自己服务器上搭建 rTorrent + ruTorrent 的盒子

rTorrent 是一款 Linux 下的 BT 下载软件

ruTorrent 则是一款 PHP 写的 rTorrent 的 Web UI

这两货搭配一起使用,是 PT 盒子的最佳组合

1、更新系统并安装 rTorrent

你需要一台大带宽的服务器,搭建在内网也是可以的,不推荐使用 VPS 等资源共享的机器,否则很容易被商家封账号,我们安装全新的 Debian 9 Stretch

本文不太适用于 Debian 8 / Ubuntu 14.04 / Ubuntu 16.04,如需这些操作系统需要自己更改某些软件包的名称

以下操作推荐在 root 用户下完成,请使用 sudo -i 切换到 root 用户进行操作

首先,更新系统

apt-get update && apt-get upgrade -y

如果使用了 Backports 也可以更新一下

apt-get -t stretch-backports update && apt-get -t stretch-backports upgrade -y

然后安装 rTorrent 以及必要的软件

apt-get install sudo nano curl vim wget rtorrent apt-transport-https lsb-release ca-certificates git subversion -y

2、新建用户和目录

使用 root 用户运行 rTorrent 虽然可以,但是不太安全,这里我们推荐新建一个用户,比如叫做 showfom

adduser showfom

接着给 showfom 这个用户赋予 sudo 权限

usermod -aG sudo showfom

然后我们切换到 showfom 这个用户

su

假设我们想把 PT 下载的资源放在 /home/downloads 目录,那么就新建立文件夹并修改权限

sudo mkdir -p /home/downloads/{.session,~watch}
sudo chown -R showfom:showfom /home/downloads

3、创建 rTorrent 配置文件并启动

然后在 showfom 这个用户的 home 目录下新建一个 .rtorrent.rc 配置文件

对于新手我们推荐使用 nano 编辑器

nano ~/.rtorrent.rc

rTorrent 的配置文件 .rtorrent.rc 里所有的参数可以参考这里这里

如果你没有特殊需求,可以使用我这份

编辑完成后按 ctrl + x 保存退出,再按 y 确认即可

接着我们可以直接使用 rtorrent 这个命令启动 rTorrent 了

rtorrent

你会在终端里看到类似 rTorrent 0.9.6/0.13.6 的标题,则说明 rTorrent 已经正确配置并启动

然后我们可以按 ctrl + q 退出

4、安装 Supervisor 让 rTorrent 保持后台运行

默认情况下 rTorrent 是不在后台运行的,老外的很多教程推荐使用 screen 来保持后台运行,这里我们用的是 Supervisor

首先我们退出 showfom 用户

exit

然后安装依赖环境

apt-get install python-dev build-essential -y

然后安装 PIP

apt-get install python-pip -y

接着升级 PIP

pip install --upgrade pip

然后安装 Supervisor

pip install supervisor

安装完成后,我们使用 echo_supervisord_conf 命令创建一个 Supervisor 配置文件

echo_supervisord_conf > /etc/supervisord.conf

接着在 /etc/supervisord.conf 文件最下方加入 rTorrent 的启动项目

[program:rtorrent]
command = /usr/bin/rtorrent
environment = HOME="/home/showfom"
user = showfom
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/rtorrent.log
stderr_logfile = /var/log/supervisor/rtorrent.error.log

注意修改 user = showfomHome="/home/showfom" 为你自己的用户名

如果没特殊要求,可以参考我的 Supervisor 配置

然后创建日志目录方便 debug

mkdir -p /var/log/supervisor

接着直接运行 Supervisor 即可让 rTorrent 保持后台运行

supervisord -c /etc/supervisord.conf

我们可以使用 ps 命令查看一下 rTorrent 是否已经正确用 showfom 这个用户运行

root@debian ~ # ps -df | grep rtorrent
showfom    1003   1002  0 09:48 ?        00:00:00 /usr/bin/rtorrent

5、安装配置 ruTorrent + PHP + Nginx

首先安装 ruTorrent 的一些插件需要使用的软件包

apt-get install unrar-free unzip ffmpeg mediainfo sqlite3 sox -y

然后按照《Debian 9 / Debian 8 使用源安装 LEMP 教程》安装 PHP 7.2

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

sh -c 'echo "deb https://mirror.xtom.com.hk/sury/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt-get update
apt-get install php7.2 php7.2-fpm php-geoip php7.2-cli php7.2-json php7.2-curl php7.2-cgi php7.2-mbstring -y

修改 php.ini 防止跨站攻击以及调整上传文件大小(PT 站的大包种子文件挺大的)

sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/7.2/fpm/php.ini 
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 10M/' /etc/php/7.2/fpm/php.ini
sed -i 's/post_max_size = 8M/post_max_size = 10M/' /etc/php/7.2/fpm/php.ini

然后重启 PHP 7.2 FPM

systemctl restart php7.2-fpm.service

然后我们安装 Nginx

wget -O /etc/apt/trusted.gpg.d/nginx-mainline.gpg https://packages.sury.org/nginx-mainline/apt.gpg

sudo cat >> /etc/apt/sources.list.d/nginx.list << EOF
deb https://mirror.xtom.com.hk/sury/nginx-mainline/ $(lsb_release -sc) main
EOF
apt-get update
apt-get install nginx-extras -y

接着进入 /var/www 目录

cd /var/www

使用 gitsvn 命令把 ruTorrent 和所有的插件都拖回来

git clone https://github.com/Novik/ruTorrent.git rutorrent
rm -r rutorrent/plugins
svn checkout https://github.com/Novik/ruTorrent/trunk/plugins rutorrent/plugins

然后我们可以查看 /var/www/rutorrent/conf/config.php 文件,在大概 42 行的位置,需要你手工填写程序的 path

$pathToExternals = array(
    "php" => '',
    "curl" => '',
    "gzip" => '',
    "id" => '',
    "stat" => '',
);

我们可以在系统里使用 which 命令查看文件所在的路径

root@debian ~ # which php curl gzip id stat sox
/usr/bin/php
/usr/bin/curl
/bin/gzip
/usr/bin/id
/usr/bin/stat
/usr/bin/sox

然后直接修改 /var/www/rutorrent/conf/config.php

$pathToExternals = array(
    "php" => '/usr/bin/php',
    "curl" => '/usr/bin/curl',
    "gzip" => '/bin/gzip',
    "id" => '/usr/bin/id',
    "stat" => '/usr/bin/stat',
);

再修改 $topDirectory 为你下载资源的目录

$topDirectory = '/home/downloads/';

修改 /var/www/rutorrent/plugins/spectrogram/conf.php 文件,增加 sox(一款管理音频的软件) 的路径

$pathToExternals['sox'] = '/usr/bin/sox';

然后我们修改 /var/www/rutorrent/conf/plugins.ini 文件,把我们需要的插件加上去

rm -f /var/www/rutorrent/conf/plugins.ini
nano /var/www/rutorrent/conf/plugins.ini

可以参考我使用的 plugins.ini

更多的插件可以参考 Github

最后我们设置 /var/www/rutorrent 目录的用户组和权限,因为 Nginx 和 PHP 默认是用 www-data 用户运行,这个用户在 Debian 9 下编号 33 所以直接运行

chown -R 33:33 /var/www/rutorrent -R
chmod -R 755 /var/www/rutorrent

即可更改权限

最后增加一个 Nginx 配置文件

server {
	listen 8080;
	listen [::]:8080;

	server_name _;
	client_max_body_size 10m;
	server_tokens off;

	root /var/www/rutorrent;
	index index.html index.htm index.php;

	location / {
		try_files $uri $uri/ =404;
		}

	location /RPC2 {
		include scgi_params;
		scgi_pass 127.0.0.1:5000;
	}

	location ~ \.php$ {
		fastcgi_pass unix:/run/php/php7.2-fpm.sock;
		include snippets/fastcgi-php.conf;
	}
}

重启 Nginx 后即可访问 http://localhost:8080/ 进入你的 ruTorrent 了

当然这样很不安全,我们建议给目录增加密码访问

最简单的方法就是使用 OpenSSL 生成 Nginx 支持的密码文件,比如这里我们设定用户名 showfom 密码 sb.sb 并且把文件保存在 /etc/nginx/passwd

printf "showfom:$(openssl passwd -crypt sb.sb)\n" >> /etc/nginx/passwd

然后查看一下这个文件格式

root@debian ~ # cat /etc/nginx/passwd
showfom:fQ6xtSccmstZ.

这种方法有个弊端是密码最多只能 8 位,所以我们也可以使用 Apache 的密码管理器

apt-get install apache2-utils -y

然后生成一个用户名为 showfom 的密码文件并保存到 /etc/nginx/passwd

htpasswd -c /etc/nginx/passwd showfom

然后修改 Nginx 配置文件,在 location / 段加入

auth_basic "Restricted";
auth_basic_user_file /etc/nginx/passwd;

如果你有固定 IP 还可以设置 IP 白名单

allow 192.0.2.2/24;
allow 2001:DB8::/32;
allow 127.0.0.1;
deny  all;

再配合《Linux 下使用 acme.sh 配置 Let’s Encrypt 免费 SSL 证书 + 通配符证书》,给自己的盒子加个 SSL 证书,最终配置文件可以参考我的

最终效果如下

Snipaste_2018-03-28_03-36-21.png

如有疑问请随时进群发言讨论

本文参考教程