打造一台全能下载服务器

这篇文章,我们期望打造一台泛用的全能下载服务器。使用多种软件:qBittorrent、Aria2、MLDonkey 来支持几乎全部的下载协议,然后经过配置,整理它们的默认下载路径,以方便管理。由于无版权服务器基本都处于 某国 直连访问恶劣的环境下,我们还会设置自动将所有下载的文件上传到 Dropbox 网盘之中。在搭建一台 WebDAV 服务,通过 Cloudflare 的全球 CDN 网络来进行文件管理与下载。最后将全部服务由 Nginx 统一反向代理与权限验证。

下面会给出全部基本使用会需要修改的配置,而且会讲明 这是什么 以及 为什么 。由于这是一篇整合文章,我们会给出我们经过验证使用过的配置,如果你有了解,则不用理会每个设置后的 如果 ,请随心所欲的使用你需要的那一段即可。如果你不了解,或想使用跟我们完全一致的配置,则最好严格按照每个设置后的 如果 进行设置。

目录

Dropbox 同步目录:

  • 根目录 /var/www/Dropbox
  • 下载完成目录 /var/www/Dropbox/Downloads

WebDAV 目录:

  • /var/www/WebDAV

Aria2 目录:

  • 临时 /var/www/WebDAV/Aria2-temp
  • 完成 /var/www/Dropbox/Downloads/Aria2

qBittorrent 目录:

  • 临时 /var/www/WebDAV/qBittorrent-temp
  • 完成 /var/www/Dropbox/qBittorrent

MLDonkey 目录:

  • 临时 /var/www/WebDAV/MLDonkey-temp
  • 完成 /var/www/Dropbox/MLDonkey

网盘

Dropbox

Dropbox 在 Linux 上有官方提供的命令行客户端跟安装脚本,所以安装非常简单。

32位:
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf -

64位:
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

接着,从新建的 .dropbox-dist 文件夹运行 Dropbox 守护程序。

~/.dropbox-dist/dropboxd

Dropbox 就自动了,第一次启动时会在终端输出一个验证链接,只需要将这个链接复制到游览器中打开并登录你的账户即可。另外 Dropbox 也提供一个 Python 脚本,用来管理 Dropbox 与后台运行。

wget -C https://www.dropbox.com/download?dl=packages/dropbox.py -O /usr/local/bin/dropbox && chmod +x /usr/local/bin/dropbox

Dropbox 管理脚本:

  • dropbox autostart 登录时自动自动 Dropbox
  • dropbox start 启动 Dropbox
  • dropbox status 查看 Dropbox 状态
  • dropbox stop 停止 Dropbox
  • dropbox update 更新最新版本的 Dropbox

软件

以下操作假设环境为:

  • 系统 Ubuntu 18.04 LTS
  • 用户 www-data
  • 目录 /var/www/
  • 域名 abc.com

Nginx

Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。Nginx 非常稳定,可以承受巨大的并发连接,同时所需要的系统资源(CPU 与内存)非常的少。不过你也有其他优秀的选择,比如 Caddy(同样稳定与性能强大,还附带有 FileBrowser 模块) ,但是考虑到 Nginx 非常非常的流行且应用广泛,你可以轻易的找到几乎任何有关 Nginx 配置示例与说明,所以这里使用 Nginx 应该是最佳选择。

安装 Nginx

apt install nginx-full

配置 Nginx

  • 配置存放目录
/etc/nginx/
  • 网站配置目录
/etc/nginx/sites-enabled/

WebDAV

用户密码

使用 htpasswd 创建一个文件写入用户名与密码,并使用 MD5 算法进行加密。

htpasswd -bcm /etc/nginx/htpasswd admin 123456

htpasswd 命令:

  • -n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
  • -m:默认采用MD5算法对密码进行加密;
  • -d:采用CRYPT算法对密码进行加密;
  • -p:不对密码进行进行加密,即明文密码;
  • -s:采用SHA算法对密码进行加密;
  • -b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
  • -D:删除指定的用户。
WebDAV 配置

首先删除 Nginx 安装时自带的默认配置,然后新建一个。

cd /etc/nginx/sites-enabled
rm default
touch abc.com.conf

然后在新建的 abc.com.conf 文件中写入配置。

server {
    listen 80;
    server_name abc.com;

    client_max_body_size 20M;

    location / {
            dav_methods PUT DELETE MKCOL COPY MOVE;
            dav_ext_methods PROPFIND OPTIONS;
            dav_access group:rw all:r;
            root /var/www/WebDAV/;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/htpasswd;
    }
}

然后重启 Nginx 然后使用 WebDAV 连接登录测试。

systemctl restart nginx

Cloudflare 配置

登录 Cloudflare 控制面板 注册你的域名,然后新建一条 A 记录 @ server_ip 点击后方的云朵 Logo 为橘黄色,然后添加。大约等待几十分钟或数小时 Cloudflare 为域名下发 HTTPS 证书,然后在使用 WebDAV 客户端软件以 HTTPS 方式登录测试。

Aria2

Aria2 主要安装与配置参见这篇文章:Aria2 配置与完成自动移动脚本 ,然后对配置稍微进行修改。

因为全部网络服务统一交由 Nginx 处理,然后在经由 Cloudflare ,所以在无必要为 Aria2 进行单独的 HTTPS 设置,将以下配置全部注销或删除。

#是否启用https加密,启用之后要设置公钥,私钥的文件路径
rpc-secure=true
#启用加密设置公钥
rpc-certificate=/etc/nginx/ssl/hello.com.cer
#启用加密设置私钥
rpc-private-key=/etc/nginx/ssl/hello.com.key

同样,一切交由 Nginx ,所以 Aria2 RPC 只需监听本地端口即可。

rpc-listen-all=false

最后修改移动脚本 move.sh 中的路径。

DOWNLOAD=/var/www/WebDAV/Aria2-Temp
COMPLETE=/var/www/Dropbox/Downloads/Aria2

qBittorrent

qBittorrent是一个跨平台的自由BitTorrent客户端,其图形用户界面是由Qt所写成的。使用libtorrent作为后端。是由Christophe Dumez在贝尔福- 蒙贝利亚尔理工大学时开始开发。

安装 qBittorrent

首先添加最新版 qBittorrent 的软件源,然后安装它。

sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-stable

sudo apt install qbittorrent-nox

qBittorrent 服务

为 qBittorrent 创建一个服务配置。

sudo touch /etc/systemd/system/qbittorrent-nox.service

然后写入服务配置。

[Unit]
Description=qBittorrent Command Line Client
After=network.target

[Service]
Type=forking
User=www-data
Group=www-data
UMask=007
ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080
Restart=on-failure

[Install]
WantedBy=multi-user.target

最后启用这个服务器配置,接着重新载入系统守护进程,启动 qBittorrent 服务。

sudo systemctl start qbittorrent-nox

sudo systemctl daemon-reload

sudo systemctl enable qbittorrent-nox

systemctl status qbittorrent-nox
  • 启动 systemctl start qbittorrent-nox
  • 停止 systemctl stop qbittorrent-nox
  • 重启 systemctl restart qbittorrent-nox
  • 检查 systemctl status qbittorrent-nox

反代 Nginx

在 Nginx 的 /etc/nginx/sites-enabled/abc.com.conf 配置文件中插入配置。(注:这里不知道在哪里插入无所谓,这只是给能看明白的写的。文章末尾有完整的配置文件,看不明白直接整个复制粘贴即可。)

    location /q/ {
        proxy_pass              http://127.0.0.1:8080/;
        proxy_set_header        X-Forwarded-Host        $server_name:$server_port;
        proxy_hide_header       Referer;
        proxy_hide_header       Origin;
        proxy_set_header        Referer                 '';
        proxy_set_header        Origin                  '';
        add_header              X-Frame-Options         "SAMEORIGIN";
    }

然后重新载入 Nginx 配置。

systemctl reload nginx

此时打开 https://abc.com/q 就会打开 qBittorrent 的 WebUI 界面,初次登录的默认管理员账户是 admin 默认密码是 adminadmin 。登录之后点击工具栏齿轮图标打开设置界面,将下载设置中的 默认保存路径 修改为 /var/www/Dropbox/Downads/qBittorrent 然后勾选 保存未完成的 torrents 到: 将其路径设置为 /var/www/WebDAV/qBittorrent-Temp 即可。

qBittorrent 启用 保存未完成的 torrents 到: 后会默认会将没下载完成的任务的临时文件储存在这个文件夹中,待文件下载完成之后才会转移到 默认保存路径 之中。所以不会发生将文件直接下载到网盘目录之中而造成网盘客户端 I/O 错误崩溃等问题。

MLDonkey

MLDonkey是一个开源免费的多协议P2P应用程序。起初它只是一个Linux下的eDonkey协议客户端,现在它支持多种点对点协议,并能在在各种不同风格的类Unix系统、Mac OS X、Windows以及MorphOS下运行。它使用OCaml语言编写,同时有些部分使用了一些C语言以及汇编语言的代码,从而保证了它的高性能。

MLDonkey 支持如下协议:

  • EDonkey Network
  • Overnet
  • Kad Network
  • BitTorrent
  • Gnutella
  • Gnutella2
  • FastTrack
  • HTTP/FTP

安装 MLDonkey

apt install mldonkey-server

配置 MLDonkey

  • 下载相关
/var/lib/mldonkey/downloads.ini
  • 用户相关
/var/lib/mldonkey/users.ini
允许登录

编辑 /var/lib/mldonkey/downloads.ini 文件修改。

allowed_ips = ["127.0.0.1";]

一般这里设置为 0.0.0.0 来允许远程登录,如果你想跟我们使用一样的配置,这里保持默认不修改即可。

下载路径

编辑 /var/lib/mldonkey/downloads.ini 文件修改。

  {     dirname = "incoming/files"
     strategy = incoming_files
     priority = 0
};

incoming/files 修改为你想要的下载路径即可,如果你想跟我们使用一样的配置,这里输入 /var/www/Dropbox/Downloads/MLDonkey 即可。

MLDonkey 默认会将没下载完成的任务的临时文件储存在 ~/.mldonkey/temp/ ,待文件下载完成之后才会转移到 incoming_files 目录之中。所以不会发生将文件直接下载到网盘目录之中而造成网盘客户端 I/O 错误崩溃等问题。

使用 MLDonkey

启动

使用命令 mlnet/usr/bin/mlnet 即可启动。

服务

为 MLDonkey 创建一个服务配置。

sudo touch /etc/systemd/system/mldonkey.service

然后写入服务配置。

[Unit]
Description=Mldonkey - Multiple Peer-To-Peer Network Client
After=network.target
[Service]
User=www-data
ExecStart=/usr/bin/mlnet -log_to_syslog yes -log_file /dev/null -pid /run/mldonkey
[Install]
WantedBy=multi-user.target

最后启用这个服务器配置,接着重新载入系统守护进程,启动 qBittorrent 服务。

sudo systemctl start mldonkey.service

sudo systemctl daemon-reload

sudo systemctl enable mldonkey.service

systemctl status mldonkey.service
  • 启动 systemctl start mldonkey
  • 停止 systemctl stop mldonkey
  • 重启 systemctl restart mldonkey
  • 检查 systemctl status mldonkey
密码

第一次登录后需要初始化用户名与密码,在右上角的命令输入框中输入 useradd admin admin,然后点击 Inpu 即可。如果你想跟我们使用一样的配置,就已经默认被 WebDAV 的用户名与密码所保护了,这里就可以不需要设置。

忘记了密码,可以在 /var/lib/mldonkey/users.ini 配置文件中将 user_name = admin 下方的 user_pass 后的字符串删除,然后重启 MLDonkey 然后在 WebUI 重新设置即可。

反代 MLDonkey

在 Nginx 的 /etc/nginx/sites-enabled/abc.com.conf 配置文件中插入配置。

server {
    location /m/ {
            proxy_pass http://127.0.0.1:4080;
            break;
        }
    }

之后重启 Nginx ,然后访问 http://abc.com/m 即可访问 MLDonkey 的 WebUI 界面。

附录

Nginx

  • /etc/nginx/sites-enabled/abc.com.conf
server {
    listen 80;
    server_name abc.com;

    client_max_body_size 20M;

    location / {
            dav_methods PUT DELETE MKCOL COPY MOVE;
            dav_ext_methods PROPFIND OPTIONS;
            dav_access group:rw all:r;
            root /var/www/WebDAV/;
            auth_basic "Restricted";
            auth_basic_user_file /etc/nginx/htpasswd;
    }

    location /q/ {
        proxy_pass              http://127.0.0.1:8080/;
        proxy_set_header        X-Forwarded-Host        $server_name:$server_port;
        proxy_hide_header       Referer;
        proxy_hide_header       Origin;
        proxy_set_header        Referer                 '';
        proxy_set_header        Origin                  '';
        add_header              X-Frame-Options         "SAMEORIGIN";
    }

    location /m/ {
        proxy_pass http://127.0.0.1:4080/;
        break;
    }

    location /jsonrpc {
    proxy_pass http://localhost:6800/jsonrpc;
    proxy_redirect off;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    }
}

文章作者: REPL\ acgio
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 REPL\ acgio !
 上一篇
SSH 开启两步验证 SSH 开启两步验证
这里使用 Google Authenticator PAM module 来为 SSH 添加两步验证,操作系统为 Ubuntu 18.04 LTS 。 https://github.com/google/google-authentic
2019-12-10
下一篇 
macOS 安装 Spacemacs macOS 安装 Spacemacs
安装 Emacs Plus使用 Homebrew 安装 Emacs Plus,如果没用过 Homebrew 可以看这篇文章:。 brew tap d12frosted/emacs-plus brew install emacs-plus
2019-10-30
  目录