前言

我平时有一些下载视频和一些资源文件的需求,有时候需要离线下载,也要速度比较快的方式

之前我是用家里的玩客云绝育之后不再写盘当下载机用的,但是限制很多

我发现了aria2 这个下载器非常适合我,而有个大佬又在原来的基础上进行了大量的配置等优化

发布了aria2-pro的项目,而且提供了docker部署

项目说明

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

    • 多平台:amd64i386arm64armhf(VPS、群辉、树莓派等常见平台完美支持)
    • 全功能:Async DNSBitTorrentFirefox3 CookieGZipHTTPSMessage DigestMetalinkXML-RPCSFTP
    • 单服务器线程数最大值无上限(已破解线程数限制)
    • 防掉线程优化
    • 内存消耗优化
    • 读写性能优化
    • 最新依赖库,下载更安全、稳定、快速
    • 持续更新最新版本
  • 支持与 RCLONE 联动

    • 自动上传 OneDrive 、Google Drive 等网盘
    • 百度网盘转存到其它网盘
    • 多网盘自由选择
  • 支持新一代互联网协议 IPv6

  • 下载完成自动移动文件到指定目录(文件自动归档/分类)

  • 定时自动更新 BT tracker 列表(无感知、无重启),保持 BT 下载高速率

  • 用户文件权限自动配置功能

  • 配置文件持久化,支持使用 watchtower 更新容器。

  • 极简设计,专注下载,简单易用,少即是多。

项目地址

GitHub: https://github.com/P3TERX/docker-aria2-pro

Docker Hub: https://hub.docker.com/r/p3terx/aria2-pro

也希望多多支持作者提供了这么好的项目 ,给个stars

部署

1.首先安装docker(自行安装)

2.启动容器 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker run -d \
--name aria2-pro \
--restart unless-stopped \
--log-opt max-size=1m \
-e PUID=$UID \
-e PGID=$GID \
-e UMASK_SET=022 \
-e RPC_SECRET=chen \
-e RPC_PORT=6800 \
-p 6800:6800 \
-e LISTEN_PORT=6888 \
-p 6888:6888 \
-p 6888:6888/udp \
-v /data/aria2/config:/config \
-v /data/aria2/downloads:/downloads \
p3terx/aria2-pro
  • --name aria2-pro - 容器名称,可自定义以示区分。

  • --restart unless-stopped - 设置容器重启策略,详情参见 Docker 官方文档

  • --log-driver json-file - 设置日志记录格式为 json 格式。这是 Docker 的默认值,某些特殊情况可能需要设置。

  • --log-opt max-size=1m - 日志大小限制为1MB,防止 Aria2 持续下载产生大量的日志占用磁盘空间。某些 GUI 可能没有相关选项。所以说有什么理由不用 CLI 一把梭?

  • --network host - 使用 host 网络模式。直接使用宿主机网络,免去端口映射导致的部分性能损失,且灵活性更高,可更方便的配置使用 IPv6 网络。host 网络模式仅适用于 Docker 17.06+ ,如果你的 Docker 版本低于此,请先升级。

    ⚠️ ma­cOS 和 Win­dows 上的 Docker 目前暂时无法使用 host 网络模式,依然需要进行端口映射。方法参见后面的  bridge 网络模式章节。

/data/aria2/config:/config  配置目录映射,配置文件持久化。左边为宿主机路径供自定义,不要有中文、不要混用配置文件,首次使用请确保目录为空。

TIPS: 注意确认目录是否存在、权限是否正确。

用于设置一些可能需要自定义的 Aria2 配置选项,方便一键部署。

TIPS: 以下环境变量定义后将直接写入配置文件( aria2.conf),通过变量定义后无法通过配置文件修改,因为每次容器重启会自动修正为环境变量定义的值。你也可以选择忽略它们,直接在容器创建后修改配置文件。

  • -e RPC_SECRET=<TOKEN> - RPC 密钥设置,即 WebUI 连接时需要填写的密码,只建议使用字母和数字。如果没有设置,配置文件中的默认密码为P3TERX
  • -e RPC_PORT=6800 - RPC 端口设置。
  • -e LISTEN_PORT=6888 - BT 监听端口(TCP)、DHT 监听端口(UDP)设置,即 Aria2 配置中listen-portdht-listen-port选项定义的端口。如果没有设置,配置文件中的默认值为6888
  • -e DISK_CACHE=<SIZE> - 磁盘缓存设置,默认值64M。建议在有足够的内存空闲情况下设置为适当增加大小,以减少磁盘 I/O ,提升读写性能,延长硬盘寿命。比如128M256M等。此项值仅决定上限,实际对内存的占用取决于网速(带宽)和设备性能等其它因素。当下载文件超过这个大小且网速足够快时最多会占用所设置大小的内存,所以不宜过大,设置不当轻则进程终结、重则宕机。
  • -e IPV6_MODE=true - 开启 IPv6 模式。此变量等同于设定配置文件中的选项disable-ipv6=falseenable-dht6=true。可间接提升 BT 下载速率,但需要网络完整支持 IPv6 ,否则会导致部分功能异常,甚至无法下载。

特殊模式环境变量

  • -e SPECIAL_MODE=move - 开启文件自动归档/分类功能,即在文件下载完成后把文件移动到指定目录。默认移动到下载目录下的completed子目录。有关详情在后面的进阶玩法章节。
  • -e SPECIAL_MODE=rclone - 开启 RCLONE 联动功能。首次启动容器会在容器内自动安装 RCLONE,且每次重启会自动更新。有关详情在后面的进阶玩法章节。

其它环境变量

  • -e UPDATE_TRACKERS=false - 禁用自动更新 BT tracker 。PT 下载和想手动填写设置 BT tracker 需求必须禁用。
  • -e CUSTOM_TRACKER_URL=<URL>:自定义 BT tracker 列表获取链接,多个链接可以用半角逗号(,)进行分隔。如果没有指定则默认从https://trackerslist.com/all_aria2.txt进行获取。
  • -e UMASK_SET=022 - umask 设置,默认值022。决定你下载下来的文件的权限,对权限不敏感或不理解直接填写000
  • -e TZ=<TIME_ZONE> - 时区设置,默认时区为Asia/Shanghai,若无特殊需求无需自定义。

bridge 网络模式

TIPS: ma­cOS 和 Win­dows 必须要使用 bridge 网络模式。

点击查看

bridge 网络模式下需要把容器内部的端口映射到宿主机,它是 Docker 默认的网络模式,所以很多 Docker 镜像的默认使用说明都包含端口映射的参数,也包括在 2020 年 3 月 28 日之前的本项目。bridge 网络模式主要是用于网络隔离,对于一般用户几乎无用,而且多了一层 NAT ,会有一定的网络性能损失。如果要使用 IPv6 网络还需要进行一些列复杂的设置。对于全新部署且没有特殊需求不会用到下面这些参数。

  • -p 6800:6800 - RPC 通讯端口映射。
  • -p 6888:6888 - BT 监听端口(TCP)映射,即 Aria2 配置中listen-port选项定义的端口。
  • -p 6888:6888/udp - DHT 监听端口(UDP)映射,即 Aria2 配置中dht-listen-port选项定义的端口。

bridge 网络模式启动命令示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker run -d \
--name aria2-pro \
--restart unless-stopped \
--log-opt max-size=1m \
-e PUID=$UID \
-e PGID=$GID \
-e UMASK_SET=022 \
-e RPC_SECRET=chen \
-e RPC_PORT=6800 \
-p 6800:6800 \
-e LISTEN_PORT=6888 \
-p 6888:6888 \
-p 6888:6888/udp \
-v /data/aria2/config:/config \
-v /data/aria2/downloads:/downloads \
p3terx/aria2-pro

TIPS: bridge 网络模式下如果需要自定义端口,建议映射到宿主机相同的端口,避免混淆和功能异常。

注意事项

  • 作者不会对使用此项目造成的损失承担任何责任,使用前请务必详细阅读整个文档再考虑是否使用。
  • 容器启动命令有关路径与端口参数中:(冒号)右边的值为容器内部的固定值(常识),不要去修改,否则可能导致无法正常工作。
  • Aria2 配置文件中某些没必要修改的选项参数和已通过环境变量设定的选项参数默认情况下修改无效,重启后会自动修复为正确的值。(为了防止错误修改后导致容器工作异常所做的自我修复功能,比如可以防止把容器内的路径改成容器外的路径之类的迷惑行为)
  • 由于 Aria2 暂时没有 UPnP 功能,所以必须配置防火墙开放监听端口,内网设备在路由器设置端口转发到相同端口,这对 BT 下载尤为重要,否则 Aria2 将无法与外界进行数据交换,影响下载率和速度。方法可参考内网端口转发设置章节。有关原理参见《Aria2 无法下载磁力链接、BT种子和速度慢的解决方案》。
  • 某些 NAS 系统比如 OpenMediaVault 由于挂载盘默认使用了noexec特征,如果配置文件目录映射到了挂载盘下可能会导致附加功能脚本没有执行权限,解决方法可参考《OpenMediaVault 使用中遇到的问题和解决方案 #1 - permission denied》。
  • 在中国大陆地区使用可能需要处理网络问题。已做针对性优化,但国情都懂的。

aria2-pro 解除了单服务器线程最大数量限制

Aria2 官方对单服务器线程数进行限制必然是有他们自己的考虑,但我个人认为自由软件就是要自由,所以解除了这个限制,让所有人可以自由选择。不过无脑的增加线程数并不会让下载速度飞起来,有时会起到反作用,甚至导致无限重启。合理的设置才是正道。

此外 Aria2 Pro 还有特殊的防掉线程优化以及增强配置选项,这是其他项目所不具备的,有关详情配置文件中有注释说明。

部署WebUI

1
2
3
4
5
6
docker run -d \
--name ariang \
--log-opt max-size=1m \
--restart unless-stopped \
-p 6880:6880 \
p3terx/ariang

访问 6880端口

在AriaNg 设置中 点最上方的RPC 设置Aria2 RPC密钥

在上面给出的启动aria2的镜像代码中我设置的 密钥token是chen

1
-e RPC_SECRET=chen

进阶玩法

Aria2 Pro 具有非常多的隐藏功能与玩法等待你去发觉,比如通过创建多个容器,你甚至可以在同一设备上同时进行 BT 下载、PT 下载、自动上传 OneDrive 、自动上传 Google Drive 等功能,但不仅限于这些。想象力没有上限,需要自己思考。授人以鱼不如授人以渔,所以只写大概思路与示例。

​​

重启

Aria2 Pro 具有自我修复机制,遇到问题首先重启。如果你修改过配置文件和附加功能脚本,先删除后重启。

1
docker restart aria2-pro

重装

1
2
3
4
5
docker rm -f aria2-pro
docker rmi p3terx/aria2-pro
rm -rf ~/aria2-config
docker pull p3terx/aria2-pro
docker run <...>

更新

也许你的问题在最新的版本中已经得到解决,多多关注项目页面动态。一些重要更新会在 Aria2 Channel 推送。

以下是使用 Watchtower 一键更新 Aria2 Pro 镜像与容器的命令示例:

1
2
3
4
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -cR \
aria2-pro

查看日志

查看日志才能更好的找到问题的根本,即使你看不懂,也要学会如何查看。

  • 查看实时日志
1
docker logs -f --tail 30 aria2-pro
  • 导出日志
1
docker logs aria2-pro > ~/aria2-pro.log

有些代码细节和WebUI作者博客文章中都没有写

我们根据Github作者提供的文档稍微整合了一下

文章参考:

Aria2 Pro - 更好用的 Aria2 Docker 容器镜像 - P3TERX ZONE

GitHub - P3TERX/Aria2-Pro-Docker: Aria2 Pro | A perfect Aria2 Docker image | 更好用的 Aria2 Docker 容器镜像