前言

老司机不知道多久没下过片了,大概有好几年了,有人发了张车牌照,看上去很养眼……

那咱得去仔细研究下,发现下载速度堪忧,照这速度也不知道猴年马月能下载完。想想自己常年养着几个外网 VPS,也大都处于资源闲置状态,不如就此整个下载服务器。

系统方案

不知道哪年整过 aria 下载,那自然是按熟悉的套路来:AriaNg 作为前端管理下载任务,aria2 作为后端下载。经过筛选,看到 P3TERX 大神整了个 Aria2 Docker,功能够强大,完全能满足需求。

graph LR;
    AriaNg --> aria2 --files--> download_to_local & remote_player;
    Browser --bt/http/ftp...--> AriaNg;

实施

安装 Aria2-Pro-Docker

没必要写重复的教程,直接看 P3TERX 大神的教程,总的来说这个 Docker 使用 Aria2 完美配置方案,功能比较完善,镜像特点:

  • BT 下载率高、速度快
  • 重启后不丢失任务进度、不重复下载
  • 删除正在下载的任务自动删除未完成的文件
  • 下载错误自动删除未完成的文件
  • 下载完成自动删除控制文件(.aria2后缀名文件)
  • 下载完成自动删除种子文件(.torrent后缀名文件)
  • 下载完成自动删除空目录
  • BT 下载完成自动清除垃圾文件(文件类型过滤功能)
  • BT 下载完成自动清除小文件(文件大小过滤功能)
  • 有一定的防版权投诉、防迅雷吸血效果
  • 更好的 PT 下载支持

部署 AriaNg

有人把这个也放 Docker 里,但站长觉着完全没必要,Ar­i­aNg就是个前端静态页,如果用宝塔之类的部署个网站就更简单快捷,也不用多一次反代处理,还能让宝塔自动申请证书。

同样的,不写重复的教程,可参考:P3TERX 大神的教程

科普: Ar­i­aNg 只是一个静态网页,只负责发送指令给 Aria2 服务端,所填写的 RPC 地址和 RPC 密钥等设置数据只会储存在本地浏览器中,不管是在本地直接打开使用还是访问在线网页使用都只是本地浏览器到远端 Aria2 服务的 RPC 协议通讯。所以部署到 Web 服务器不是必要操作,对页面设置密码更是徒劳。

以上两个弄完,随便传个种子就可以体验公网 IP 下载速度了,如果不做限速,服务器带宽能跑满,这个24小时挂机的下载服务器你值得拥有!

aria2高速下载

常见问题

关于前面的安装部署,网上教程多如牛毛,但往往自己去实施的时候就遇到各种磕磕碰碰,这才是本文章要记录的重点。

提示错误:认证失败

这一定是 Aria2 RPC 密钥 错误了,在 AriaNg 页面上打开:AriaNg 设置 --》RPC……,填上正确的认证密钥,就是 Aria2 Docker 启动时 RPC_SECRET= 设置的值,建议不要有空格。

errorCode=1 Failed to bind a socket, cause: Name or service not known

有以下两种可能会导致:

  1. Docker 端口未做外部映射:做端口映射,同时防火墙将端口放行
  2. 启用了https,但https不可用状态:配置https证书,见下文配置方法

https访问时aria2未连接

当使用 https 协议访问前端 AriaNg 时,Aria2 RPC 连接协议 会被强制为 HttpsWebSocket(安全),此时我们需要配置 Aria2 启用安全协议及证书,编辑 Aria2 配置文件 aria2.con

1
2
3
4
5
6
7
8
9
10
11
12
13
# RPC 服务 SSL/TLS 加密, 默认:false
# 启用加密后必须使用 https 或者 wss 协议连接
# 不推荐开启,建议使用 web server 反向代理,比如 Nginx、Caddy ,灵活性更强。
rpc-secure=true

# 将证书文件复制到映射 `/config/` 路径的地方
# 也可以将宝塔的证书目录做路径映射再直接配置到此处

# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件(.pem/.crt)
rpc-certificate=/config/fullchain.pem

# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件(.key)
rpc-private-key=/config/privkey.pem

保存配置重启 Docker,就能愉快地使用 HttpsWebSocket(安全) 协议连通 Aria2 了。

以上涉及的文件路径:

  • aria2.con:在 Docker 启动时 /config 映射的对应路径里,不知道的话可以用 find / -name aria2.conf 搜索
  • rpc-certificate:以宝塔自动申请的证书位置为例,在 /www/server/panel/vhost/cert/ 下以域名目录存放,默认认证文件为 fullchain.pem
  • rpc-private-key:同上,另一个 privkey.pem 即为私钥文件

证书配置好了,仍然报错:无法连接到 Aria2

是不是域名启用了CDN?

如前文 AriaNg 科普所言:

不管是在本地直接打开使用还是访问在线网页使用都只是本地浏览器到远端 Aria2 服务的 RPC 协议通讯

也就是说是关系到通讯端口的,启用CDN后访问端口 443,默认是不能转发到 AriaNg 需要使用的 https://xxx:6800/jsonrpc 这个端口,所以需要额外做一个反代,如前文配置中的注释提示:

1
# 不推荐开启,建议使用 web server 反向代理,比如 Nginx、Caddy ,灵活性更强。

站长一开始就没有接受 Aria2 的建议,把 cloudflare 的云朵代理关了,因为就自己用,想用 CDN 的有两条路径:

  1. 将RPC通讯端口改成 CDN 支持的端口,如 cloudflare 的 8443,具体可以参考:Network ports compatible with Cloudflares proxy
  2. 再搞个单独的域名用于 RPC 通讯地址,然后该域名再反代到 RPC 的 6800 端口

文件自动归档/分类

所谓归档,就是将下载完成的任务文件移动到一个单独的文件夹去,默认是在下载文件夹下的 completed 目录,如果需要移动到其他目录,那么需要给 Docker 做相应路径映射:

1
2
-v /data/downloads:/downloads \ # 下载中
-v /data/completed:/completed \ # 下载完

同时,修改 script.conf

1
2
3
4
5
## 文件移动设置(move.sh) ##

# 移动目标目录
# dest-dir=/downloads/completed # 默认配置
dest-dir=/completed

以上,每次下载完成的任务就会自动被移动到 /data/completed 这个目录,但由于 Docker 的限制,此移动并不是真正的移动,而是复制后删除,也就意味着磁盘会被重复全量写一遍,虽然死道友不死贫道,但貌似也没必要。

参考链接

  1. Aria2 Pro - 更好用的 Aria2 Docker 容器镜像
  2. Aria2 前端面板 ( GUI、WebUI ) AriaNg 使用教程
  3. 使用 HTTPS 连接 Aria2