Synology666.png
Synology666.png

说明:上篇文章喵斯基部落发布一篇《群晖DSM6搭建NextCloud15私有网盘》文章,顺着文章继续讲下去,让NextCloud增加离线下载功能,这里我们用的是Aria2。

Aria2介绍

Aria2是一款基于命令行的超轻量级全平台多协议下载工具,支持诸如HTTP/FTP/BT/磁力等下载协议,唯独不支持电驴(在此缅怀一下当年的VeryCD )。Aria2本身是不带操作界面的,所以叫做命令行工具,但为了方便使用,很多大神自制了UI界面,常见的有Aria2WebUI、AriaNg等。这两种界面都是基于网页的,所以只要能连接到Aria2的服务器,无论在什么地方都可以轻松的进行下载管理,实现远程下载。

Aria2-1.jpeg
Aria2-1.jpeg

废话不多说,下面主要说说如何使用群晖DSM的Docker套件安装Aria2。

安装Aria2

首先在套件中心中安装Docker,安装好之后打开。

Aria2-2.jpeg
Aria2-2.jpeg

点击左侧的 注册表,使用关键字查找Aria2,可以看到有很多不同版本。这里我选的是第一个xujinkai/aria2-with-webui,从下面的注释可以看出来。这个镜像包含了Aria2和webui,这样使用的时候有图形界面会比较方便。选好之后右键 下载此映像

aria2-3.jpeg
aria2-3.jpeg

点击左侧的映像,看到此镜像正在下载。Docker的镜像下载服务器对国内网络的支持不是很好,有时候下载很慢,请耐心等待。好在这个镜像大小只有24M。

aria2-4.jpeg
aria2-4.jpeg

映像xujinkai/aria2-with-webui下载完成后,双击映像,开始创建容器。第一页的容器名称可以任意填写,高级权限没有必要选,资源限制可以根据自己的实际情况来,我这边没有做限制。下面点击高级设置

Aria2-5.jpeg
Aria2-5.jpeg

接着点击标签,需要在此标签页添加两个文件夹。

  • 添加一个文件夹作为默认下载文件夹(可以选择NextCloud的files文件夹),在对应的装载路径中填入/data
  • 选择一个文件夹作为Aria2的配置文件储存位置,然后在装载路径中填入/conf

注意:装载路径所填信息必须一致,否则程序无法识别会导致程序无法正常开启。

aria2-7.jpeg
aria2-7.jpeg

网络标签页保持默认不用修改,端口设置页建议将本地端口从自动改成固定的端口号,这个是任意填写的(也可以按照我设置进行),需要记住稍后有用。

Aria2-8.jpeg
Aria2-8.jpeg

环境标签页中点击+号添加一个,可变填入rpc-secret,值中任意填写一个验证码,这个在连接Aria2时需要用到。到这里高级设置就完成了,点击应用后回到上一级页面之后点击下一步。

Aria2-9.jpeg
Aria2-9.jpeg

这一页会把你的设置全部展示出来,检查没有问题就可以点应用了,默认向导完成后运行此容器。

Aria2-10.jpeg
Aria2-10.jpeg

现在Aria2下载器已经在运行了。

使用Aria2

在浏览器中输入群晖的IP和刚才设置的端口号,进入Aria2的WebUI界面,我的地址是192.168.2.110:6880。点击设置,选择连接设置。在密码令牌处填写刚才设置的认证口令,这时RPC认证通过,会提示连接成功,左侧的设置窗口也会把相关配置显示出来。

局域网地址+端口,例如192.168.2.110:6880不支持外网访问,无法做到远程下载。请在群晖控制面板做好端口映射后,根据喵斯基部落之前发布的两篇文章《LanProxy 使用教程 : 一款拥有WebUI的内网穿透工具》《Nginx反向代理》

Aria2-11.jpeg
Aria2-11.jpeg

点击添加,可以通过连接、种子和磁力链三种方式创建下载。

Aria2-12.jpeg
Aria2-12.jpeg

NextCloud全盘扫描

如果使用Aira2下载的文件无法在nextcloud中显示,请以root账号登陆ssh,并在nextcloud目录中执行下面命令:

#定位到nextcloud根目录
cd /volume1/web/nextcloud
#如果php7.x已加入到环境变量,请运行下面的文件扫描命令
sudo -u http php occ files:scan --all --quiet

若在WebStation给nextcloud配置的虚拟主机使用php7.0且又同时安装了php7.2套件的请执行下面命令:

#定位到nextcloud根目录
cd /volume1/web/nextcloud
#如果php7.x未曾加入到环境变量,请运行下面的文件扫描命令
sudo -u http php72 -c /usr/local/etc/php72/php.ini /volume1/web/nextcloud/occ files:scan --all --quiet

觉得每次下载都要执行一次很麻烦,写个脚本配合群晖的任务计划每隔15分钟执行一次就行。如下:

# 在nextcloud根目录创建一个sh脚本
vim /volume1/web/nextcloud/scan_all_files.sh

脚本内容如下:

#!/bin/bash
#如果遇到Aria2下载的文件没有权限修改,可以在此脚本中增加下面两行用于目录赋权。
chown -R http:http <此处填写Aria2用于保存文件的目录路径>
chmod -R 755 <此处填写Aria2用于保存文件的目录路径>

#定位到nextcloud根目录
cd /volume1/web/nextcloud

#指定http用户通过occ命令对全局进行文件扫描
sudo -u http php72 -c /usr/local/etc/php72/php.ini /volume1/web/nextcloud/occ files:scan --all --quiet

修改后,按ESC键输入:wq保存并退出。

依次打开群晖的控制面板->任务计划->新增->计划的任务->用户定义的脚本。具体的设置请参考下方动图:

cron.gif
cron.gif

自动扫描(推荐): 只需要修改 /volume1/web/nextcloud/config/config.php 文件,在文件最后一行);前添加配置: 'filesystem_check_changes' => 1, 选项实现文件夹的自动扫描,实测效果很理想。

添加Tracker服务器

Aira2离线下载完成了,试了试BT种子没有任何速度怎么办?

除了为Aria2增加Tracker服务器外,建议先下载一个热门的BT种子文件,而不是磁力链接。这样可以帮助缓存DHT文件,渐渐地,速度就会起来了。比如试试下载树莓派操作系统的BT种子?前往下载

为 Aria2 添加 Tracker 服务器。

BitTorrent客户端下载一开始就要连接到tracker,从tracker获得其他客户端IP地址后,才能连接到其他客户端下载。在传输过程中,也会一直与tracker通信,上传自己的信息,获取其它客户端的信息。

trackerslist 是一个开源项目,每天更新 Trackers list。Aria2 是支持 RPC 的,类似与 AriaNG 等 WEB UI 都是靠 RPC 和 Aria2 通信的,那么我们也是可以写个脚本用 RPC 来设置 Aria2 ,并且实时生效,无需重启 Aria2。

脚本内容如下:

#!/bin/sh
#more trackers list, see https://github.com/ngosang/trackerslist

tracker_url='https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt'
path='http://10.10.10.5:6800/jsonrpc'
passwd='xxxxxx'

tracker=$(echo -n  $(curl -s -L $tracker_url | sed 'N;s/\n//g') | tr ' ' ',')
[ -n "$tracker" ] && curl $path -d '{"jsonrpc":"2.0","method":"aria2.changeGlobalOption","id":"cron","params":["token:'$passwd'",{"bt-tracker":"'$tracker'"}]}'

注意:添加前,先修改 tracker_urlpathpasswd 三个变量的值。

保存上面的脚本,使用cron定时任务,即可定时自动更新到Aria2.conf文件中。(关于任务计划如何开启可以参考文章:如何在群晖NAS上面使用Crontab任务计划?

扩展:aria2.conf配置详解

以下是aria2.conf配置文件的一些说明,请根据个人情况进行修改。

## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释  ##
 
## 文件保存相关 ##
 
# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=~/downloads
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
file-allocation=none
# 断点续传
continue=true
 
## 下载连接相关 ##
 
# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=1
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=5
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=5
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
#max-overall-upload-limit=0
# 单个任务上传速度限制, 默认:0
#max-upload-limit=0
# 禁用IPv6, 默认:false
disable-ipv6=true
 
## 进度保存相关 ##
 
# 从会话文件中读取下载任务
input-file=/etc/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/etc/aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
#save-session-interval=60
 
## RPC相关设置 ##
 
# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secret=<TOKEN>
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
rpc-user=ruyo
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
rpc-passwd=RUYO.net
 
## BT/PT下载相关 ##
 
# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
#follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
#force-save=false
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true