手边空闲的树莓派一直不知道可以做什么,前几天就想能不能搭一个Bt下载服务器让它帮我自动下载资源,搜了一下还真的有现成的一套开源软件可以用。
rTorrent是一款linux上的种子下载器。但是它只提供了文字界面用户接口,如果每次需要ssh登录到服务器,上传种子,再输入指令下载未免有点麻烦。好在已经有大佬为它开发了一个nodejs版的图形界面了,可以直接拿来使用,就可以很方便地管理种子了。效果如图:
安装配置 rTorrent
安装使用 rTorrent
通过 apt-get 安装。如果你使用的是CentOS红帽系的系统,可以试试能不能直接通过yum安装。
sudo 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,就好用多了:
# 用户主目录下的 .bashrc 文件末尾添加
alias sr="screen -r" # 快速恢复窗口
alias sl="screen -ls" # 查看窗口
新建服务
为了防止服务器意外关机,将rTorrent做成服务,并设置开机运行。
sudo vim /etc/systemd/system/rtorrent.service
# 以下为服务配置
# ExecStartPre 考虑到开机重启的时候可能因为 rtorrent.lock 的缘故导致启动失败,应该先删除该文件
[Unit]
Description=rTorrent
After=network.target
[Service]
User=pi
Type=forking
KillMode=none
ExecStartPre=rm -f /home/pi/.rtorrent/session/rtorrent.lock
ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -9 /usr/bin/rtorrent
WorkingDirectory=/home/pi/bt/
[Install]
WantedBy=default.target
# 保存退出
sudo systemctl start rtorrent # 测试是否能正常运行
sudo systemctl enbale rtorrent # 设置开机启动
写这篇文章的时候刚好遇到学校宿舍停电检修,庆幸已经做成服务了:)
安装配置 Flood
安装 nodejs
Flood 是使用 NodeJS 编写的,所以要先安装 NodeJS 和 npm。
sudo apt-get install nodejs npm
npm 不走代理的话在国内下载速度实在感人,推荐使用淘宝的 cnpm。使用 npm 安装 cnpm,然后以后用到 npm 的地方全部可以用 cnpm 代替。不出意料的话也挺慢的,可以使用上面刚装好的 screen 让他自己在后台装着。。
screen -S cnpm
# 进入新窗口后输入
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
# 然后可以 Ctrl+A+D 去做别的事情了
安装 Flood
git clone https://github.com/jfurrow/flood.git
cd flood
cp config.template.js config.js #使配置文件生效
vim config.js
# 找到设置可访问主机列表的地方,把可访问ip改为0.0.0.0。这样才可以远程访问Flood
cnpm install #要很久
cnpm install -g node-gyp
cnpm run build # 要很久
做成服务
和 rTorrent 一样做成服务会方便很多:
sudo vim /etc/systemd/system/flood.service
#以下是服务配置文件
[Unit]
Description=floop
After=rtorrent.service
[Service]
User=pi
WorkingDirectory=/home/pi/flood/
ExecStart=/usr/local/bin/cnpm start
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=notell
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
# 保存退出
sudo systemctl start flood
sudo systemctl enable flood
记得将 Flood 的目录改成你的。
使用纯 Nginx 做下载目录索引和视频在线播放
资源是下载下来了,但是在服务器上,如果想看里面的视频还需要再下到自己电脑上。这里可以用 nginx 给下载目录做一个自动索引,再借助一些设置,使得点到 mp4 格式的视频时可以在线播放。
sudo vim /etc/nginx/nginx.conf
# 修改配置文件,添加两个server。思路是一个用来提供索引,一个用来提供视频内容。
http{
# 8400 端口的服务器用来展示目录
server{
listen 8400;
set $name 'http://pi.claws.top:8500';
# 如果请求的是mp4文件,则发送一个带有video标签的网页。
location ~\.mp4$ {
default_type text/html;
add_header Content-Type 'text/html; charset=utf-8';
return 200 '<video controls><source src=\"$name$request_uri\"></video>';
}
location / {
root /home/pi/cdn;
autoindex on;
autoindex_exact_size off;
autoindex_format html;
charset utf-8,gbk;
}
}
# 8500 端口的服务器用来提供视频内容
server{
listen 8500;
location / {
root /home/pi/cdn;
}
}
}
回头有时间了准备专门写一个前端,然后把nginx自动索引的返回格式改成json就可以实现一个真正的视频站了。