树莓派——rTorrent和Flood搭建种子下载站
手边空闲的树莓派一直不知道可以做什么,前几天就想能不能搭一个Bt下载服务器让它帮我自动下载资源,搜了一下还真的有现成的一套开源软件可以用。
rTorrent是一款linux上的种子下载器。但是它只提供了文字界面用户接口,如果每次需要ssh登录到服务器,上传种子,再输入指令下载未免有点麻烦。好在已经有大佬为它开发了一个nodejs版的图形界面了,可以直接拿来使用,就可以很方便地管理种子了。效果如图:
安装配置 rTorrent
安装使用 rTorrent
通过 apt-get 安装。如果你使用的是CentOS红帽系的系统,可以试试能不能直接通过yum安装。
1sudo apt-get install rtorrent
尽量不要使用root运行rtorrent。可以创建一个普通用户来配置rTorrent。
配置rTorrent只需要在当前用户主目录下创建一个名为.rtorrent.rc
的文件,就可以在里面写配置项了。一份参考的配置文件如下:
# 最小允许peer数
#min_peers = 3
# 最大允许peer数
#max_peers = 500
# 最大同时上传用户数
#max_uploads = 10
# 最大下载1024k/s
#download_rate = 1024
# 最大上传200k/s
#upload_rate = 200
# 默认下载目录
directory = ~/cdn
# 下载历史目录(此目录中包括下载进度信息和DHT节点缓存)
session = ~/.rtorrent/session
# 配置自动监视, 把bt种子扔进~/download目录就自动下载
#schedule = watch_directory,5,5,load_start=~/download/*.torrent
# 配置自动监视,把bt种子从~/universe目录拿走就自动停止下载
#schedule = untied_directory,5,5,stop_untied=
# 硬盘空间低于100M就自动停止一切下载
schedule = low_diskspace,5,60,close_low_diskspace=100M
# 在总上传量达到200M的情况下上传/下载率达到200%,或者在总上传量不足200M情况下上传/下载率达到2000%,则停止上传
#schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"
# bt监听端口
port_range = 9400-9500
# 随机从上面范围内选择端口
port_random = yes
# 修改编码以避免中文乱码
encoding_list=UTF-8
######开启DHT######
#dht = on
# DHT所用的UDP端口
dht_port = 9501
# 种子交换功能
#peer_exchange = yes
# SCGI port, used to communicate with Flood
scgi_port = 127.0.0.1:5000
# Check the hash after the end of the download
check_hash = yes
有几个需要特别关心的配置项:directory:默认下载目录。scgi_port:和Flood交换数据的端口。
然后中断输入rtorrent
尝试运行。
rTorrent 基本操作:
回车:输入种子路径,添加新种子
上下方向键:选择列表中的种子
选中一个列表中的种子后:
Ctrl+S 激活,开始下载
Ctrl+O 设置下载路径(仅能给未激活的种子)
Ctrl+D 停止下载。如果已经停止,再按组合键则删除种子
Ctrl+Q 退出
安装使用 screen
因为rTorrent为用户提供一个交互式的文字界面,所以可以用screen工具让rTorrent跑在后台,不会因为ssh下线而停止。
sudo apt-get install screen
screen 基本操作:
screen -S xxx 创建名为 xxx 的新窗口
screen -r xxx 进入名为 xxx 的窗口。如果只有一个窗口,则可以省略名字。
screen -d xxx 删除名为 xxx 的窗口
在窗口内,Ctrl+A+D 切出窗口(退出但后台运行);Ctrl+D 删除窗口(退出且后台不运行)
我还为screen设置了一些alias,就好用多了:
1# 用户主目录下的 .bashrc 文件末尾添加
2alias sr="screen -r" # 快速恢复窗口
3alias sl="screen -ls" # 查看窗口
新建服务
为了防止服务器意外关机,将rTorrent做成服务,并设置开机运行。
1sudo vim /etc/systemd/system/rtorrent.service
2
3# 以下为服务配置
4# ExecStartPre 考虑到开机重启的时候可能因为 rtorrent.lock 的缘故导致启动失败,应该先删除该文件
5[Unit]
6Description=rTorrent
7After=network.target
8
9[Service]
10User=pi
11Type=forking
12KillMode=none
13ExecStartPre=rm -f /home/pi/.rtorrent/session/rtorrent.lock
14ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
15ExecStop=/usr/bin/killall -9 /usr/bin/rtorrent
16WorkingDirectory=/home/pi/bt/
17
18[Install]
19WantedBy=default.target
20
21# 保存退出
22sudo systemctl start rtorrent # 测试是否能正常运行
23sudo systemctl enbale rtorrent # 设置开机启动
写这篇文章的时候刚好遇到学校宿舍停电检修,庆幸已经做成服务了:)
安装配置 Flood
安装 nodejs
Flood 是使用 NodeJS 编写的,所以要先安装 NodeJS 和 npm。
1sudo apt-get install nodejs npm
npm 不走代理的话在国内下载速度实在感人,推荐使用淘宝的 cnpm。使用 npm 安装 cnpm,然后以后用到 npm 的地方全部可以用 cnpm 代替。不出意料的话也挺慢的,可以使用上面刚装好的 screen 让他自己在后台装着。。
1screen -S cnpm
2# 进入新窗口后输入
3sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
4# 然后可以 Ctrl+A+D 去做别的事情了
安装 Flood
1git clone https://github.com/jfurrow/flood.git
2cd flood
3cp config.template.js config.js #使配置文件生效
4vim config.js
5# 找到设置可访问主机列表的地方,把可访问ip改为0.0.0.0。这样才可以远程访问Flood
6cnpm install #要很久
7cnpm install -g node-gyp
8cnpm run build # 要很久
做成服务
和 rTorrent 一样做成服务会方便很多:
1sudo vim /etc/systemd/system/flood.service
2
3#以下是服务配置文件
4[Unit]
5Description=floop
6After=rtorrent.service
7
8[Service]
9User=pi
10WorkingDirectory=/home/pi/flood/
11ExecStart=/usr/local/bin/cnpm start
12Restart=always
13StandardOutput=syslog
14StandardError=syslog
15SyslogIdentifier=notell
16Environment=NODE_ENV=production
17
18[Install]
19WantedBy=multi-user.target
20
21# 保存退出
22
23sudo systemctl start flood
24sudo systemctl enable flood
记得将 Flood 的目录改成你的。
使用纯 Nginx 做下载目录索引和视频在线播放
资源是下载下来了,但是在服务器上,如果想看里面的视频还需要再下到自己电脑上。这里可以用 nginx 给下载目录做一个自动索引,再借助一些设置,使得点到 mp4 格式的视频时可以在线播放。
1sudo vim /etc/nginx/nginx.conf
2
3# 修改配置文件,添加两个server。思路是一个用来提供索引,一个用来提供视频内容。
4http{
5 # 8400 端口的服务器用来展示目录
6 server{
7 listen 8400;
8 set $name 'http://pi.claws.top:8500';
9 # 如果请求的是mp4文件,则发送一个带有video标签的网页。
10 location ~\.mp4$ {
11 default_type text/html;
12 add_header Content-Type 'text/html; charset=utf-8';
13 return 200 '<video controls><source src=\"$name$request_uri\"></video>';
14 }
15 location / {
16 root /home/pi/cdn;
17 autoindex on;
18 autoindex_exact_size off;
19 autoindex_format html;
20 charset utf-8,gbk;
21 }
22 }
23 # 8500 端口的服务器用来提供视频内容
24 server{
25 listen 8500;
26 location / {
27 root /home/pi/cdn;
28 }
29 }
30}
回头有时间了准备专门写一个前端,然后把nginx自动索引的返回格式改成json就可以实现一个真正的视频站了。