在 VPS 上搭建私人离线下载

随着各大净网行动的实施,各大网盘,离线下载变得似乎不那么好用了。

何况想着自己5.99美元一年的 Bandwagon VPS 只用来当自己回国期间翻院墙的服务器,每个月300GB的流量白白浪费,实现有点可惜。

于是萌生了在 VPS 上搭一个私人离线下载的想法。一分价钱一分货,这个廉价的 VPS 只有可怜的 128M 内存,4GB 硬盘空间,因此系统用的是 Debian 6.0。Web 服务器 Apache 已经安装并且 host 了一个静态个人网站。

实现的原理并不复杂,Transmission 作为 BT 下载客户端,Apache 加密目录实现下载文件的 Web 管理(验证访问 + 查看 + HTTP 取回本地 + 在线播放)。参考了以下文章:

How to install the torrent client Transmission on Debian 7

Permission denied when downloading with transmission deamon

How To Set Up Password Authentication with Apache on Ubuntu 14.04


1. 安装及配置 Transmission

  • 安装

sudo apt-get install transmission-daemon
  • 配置

停止服务(否则配置文件锁定,无法修改)

sudo service transmission-daemon stop


编辑配置文件

/etc/transmission-daemon/settings.json
{
    "ratio-limit": 0.0100, 
    "ratio-limit-enabled": true,  
    "rpc-password": "*******",   
    "rpc-username": "wei1000", 
}

我只列出了我修改过且无法在 Transmission Web-GUI 中无法完成修改的几项,四项依次是下载完成做种率,开启限制做种率,Web-GUI 密码,Web-GUI 用户名。像保存路径,下载/ 上传速度限制,都可以在 Web-GUI 中直接设定。

注:为了方便之后对下载文件的 Web 管理,我直接将保存路径改到了 Web 发布路径下的一个子目录。


重载配置(也许是可选步骤,原文章找不到了)。
sudo service transmission-daemon reload

重启服务

sudo service transmission-daemon start

此时在浏览器输入

VPS的IP地址/域名:9091

并输入刚刚设置的用户名及密码应该就可以访问 Transmission 的 Web-GUI了。

可是在添加了第一个任务后出现保存路径写入权限的问题。尝试对保存路径更改 “-777” 权限无效。

解决办法如下:

sudo service transmission-daemon stop
sudo nano /etc/init.d/transmission-daemon

找到 “USER=debian-transmission” 一行并将其改为 “USER=root”。这样 Transmission 便可以对任意目录进行读写了。

到此,Transmission 的安装及配置全部完成。可以添加种子或磁力链开始下载任务了。

图中可以看到,只要是热门的磁力链/ 种子,VPS 的下载速度还是相当给力的!


2. 配置 Apache 加密区域

首先,使用 htpasswd 生成用户密码文件。

sudo htpasswd -c /etc/apache2/.htpasswd 用户名

然后会被提示输入两次该 “用户名” 的密码。

注:采取同样的方式可以在同一文件中设定、储存多组用户名/ 密码;修改该 “用户名” 的密码采用同一命令。


要对 Web 发布路径下某一子目录实现加密访问有两种方式:

  • 通过修改虚拟 host 的配置文件
sudo nano /etc/apache2/sites-enabled/000-default.conf

在其中添加

<Directory "directory_that_needs_authentication">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

其中

directory_that_needs_authentication

是例如

/var/www/html

的绝对路径。并且,外面的双引号应该保留。

/etc/apache2/.htpasswd

是刚刚通过 htpasswd 生成的储存用户名及密码的文件。

  • 通过在需要加密的路径下生成 .htaccess 文件

例如想要对路径

/var/www/html
进行加密:

在该路径下创建 .htaccess 文件

sudo nano /var/www/html/.htaccess

并添加内容

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

即可。

注:采取此种方法还需将 Apache 配置文件中的 AllowOverride 从默认的 “None” 改为 “All“:

sudo nano /etc/apache2/apache2.conf
. . .

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

最后,无论采用哪种方法,都需要重启 Apache:

sudo service apache2 restart

通过 Web 方式查看刚刚添加的任务。


通过 HTTP 将下载的任务取回本地,速度也很快!

3. 总结

这样,通过访问 Transmission Web-GUI “投喂” 种子,磁力链,然后在下载完成后通过 HTTP 方式从 VPS 将资源取回本地,甚至直接对 .mp3、.mp4 等文件格式进行在线播放,实现了一个简化版的迅雷离线下载,可是它却在下载某些特定资源时远比迅雷离线管用。