部署Aria2 部署搭建
MeteorCat有时候个人服务器需要用到 BT 离线下载功能, 这种时候就需要用到 aria2 来搭建服务.
以下服务搭建基于 debian 系的发行版, redhat 其实流程也差不多
这里直接通过命令行安装配置就行:
1 2 3 4 5
| # 安装配置软件 sudo apt install aria2
# 查看软件版本, 我这边目前版本是 1.37.0 aria2c --version
|
确认目前完版本之后就是就是准备为服务配置系统相关设置.
系统管理
这里需要创建新的 Linux 账号来托管下载权限, 并且设置主要配置文件夹:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # 构建名为 aria2 的系统托管用户 # -r: 系统账号 # -s: 不允许 shell 交互 sudo useradd -r -s /sbin/nologin aria2
# 默认会创建 aria2 组, 但是如果安装 nginx 需要暴露访问的话建议加入 www-data 组 sudo usermod -aG www-data aria2
# 确认用户分配的信息 id aria2
# 创建系统配置目录和文件和赋予权限 sudo mkdir /etc/aria2 sudo touch /etc/aria2/aria2.env sudo touch /etc/aria2/aria2.conf sudo chown -R aria2:aria2 /etc/aria2
|
这样就可以配置 aria2 最小权限运行的系统账号, 符合安全部署服务的规则.
服务构建
这里直接编写系统单元服务, 将 aria2 服务注册到 linux 后台自动运行管理:
1 2
| # 创建系统单元文件 sudo vim /etc/systemd/system/aria2.service
|
写入系统服务配置( /etc/systemd/system/aria2.service ):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| [Unit] Description=Aria2 Download Service Documentation=https://aria2.github.io After=network.target local-fs.target
[Service] Type=simple User=aria2 Group=aria2 EnvironmentFile=/etc/aria2/aria2.env ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf Restart=on-failure RestartSec=5 PrivateTmp=true
LimitNOFILE=655350
[Install] WantedBy=multi-user.target
|
完成之后就更新下系统服务, 不过暂时先不要启动服务:
1
| sudo systemctl daemon-reload
|
之后就是准备 Aria2 的相关配置编写流程.
Aria 配置
现在就是关键的 aria2 配置, 这里按照官网来追加修改部分配置:
1 2
| # 以 aria2 权限创建对应配置文件 sudo -u aria2 vim /etc/aria2/aria2.conf
|
内部配置内容如下, 可以酌情按照自身配置来修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275
|
dir = /data/downloads
disk-cache=32M
continue=true
always-resume=false
input-file=/data/downloads/aria2.session save-session=/data/downloads/aria2.session
save-session-interval=30
remote-time=false
max-concurrent-downloads=5
max-connection-per-server=1
max-overall-download-limit=0
max-overall-upload-limit=500K
max-upload-limit=0
split=2
min-split-size=20M
log-level=info
disable-ipv6=true
enable-mmap=true
event-poll=epoll
file-allocation=trunc
content-disposition-default-utf8=true
no-netrc=true
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=true
rpc-listen-port=6800
rpc-secret=meteorocat
bt-external-ip=123.123.123.123
listen-port=16881-16885
follow-torrent=true
enable-peer-exchange=true
bt-enable-lpd=true
dht-entry-point=dht.transmissionbt.com:6881
dht-listen-port=16881-16885
dht-file-path=/data/dht.dat
enable-dht6=false
peer-agent=Deluge 1.3.15 peer-id-prefix=-DE13F0-
force-save=true
bt-seed-unverified=false
bt-save-metadata=true
bt-load-saved-metadata=true
bt-max-peers=60
seed-time=120
seed-ratio=1.0
bt-detach-seed-only=true
bt-remove-unselected-file=true
bt-force-encryption=true bt-require-crypto=true bt-min-crypto-level=arc4
bt-tracker=
|
在使用这么久之后感觉 Aria2 官方很多配置保持默认确实能够到达最大效率, 只有极少数极端情况需要处理.
后续创建额外的系统目录和文件, 还有相关的目录和文件授权机制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 生成会话文件 sudo touch /data/downloads/aria2.session sudo chown aria2:www-data /data/downloads/aria2.session sudo chmod 664 /data/downloads/aria2.session
# 生成 DHT 节点文件 sudo touch /data/dht.dat sudo chown aria2:www-data /data/dht.dat sudo chmod 664 /data/dht.dat
# 另外还需要注意下载目录的权限 # 确保 aria2 用户可读写, www-data 组可访问(Nginx 共享用) sudo chown -R aria2:www-data /data/downloads sudo chmod -R 775 /data/downloads
# 为下载目录设置 SGID (新下载的文件自动继承 www-data 组权限,Nginx 无需重复授权) sudo chmod g+s /data/downloads
|
完成之后就可以开启服务确认是否运行:
1 2 3
| sudo systemctl start aria2.service # 启动服务 sudo systemctl status aria2.service # 查看服务 sudo systemctl enable aria2.service # 开机启动
|
确认启动状态为 active 就代表启动成功, 对于公网做种的用户其实比较需要的关心的就以下选项:
bt-external-ip: 声明外部 DHT/BT 的资源后续地址
listen-port: BT 监听端口 - TCP 协议
dht-listen-port: DHT 监听端口 - UDP 协议
注意: 如果真的开启公网做种一定要确认云服务商打击BT力度怎么样, 有的云服务商发现做种行为会封禁账号和服务器!
Aria2Web配置
后台服务目前已经启动完成, 现在需要UI界面来动态添加下载任务处理, 这里采用 AriaNG
仅仅是作为 Web 页面, 可以直接命令行手动下载即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 进入临时目录并下载最新版本 cd /tmp && wget -O AriaNg.zip https://github.com/mayswind/AriaNg-DailyBuild/archive/master.zip
# 创建目录解压到目录 sudo mkdir /data/aria2ng cd /data/aria2ng sudo unzip /tmp/AriaNg.zip # 注意内部其实套一层 AriaNg-DailyBuild-master 目录 sudo cp -rf /data/aria2ng/AriaNg-DailyBuild-master/* . sudo rm -rf /data/aria2ng/AriaNg-DailyBuild-master sudo chown -R aria2:www-data /data/aria2ng sudo chmod -R 775 /data/aria2ng
# 创建 Nginx 服务文件 sudo touch /etc/nginx/conf.d/aria2ng.conf
|
Aria2NG 的 Nginx 配置文件如下( /etc/nginx/conf.d/aria2ng.conf ), 先处理简单点:
1 2 3 4 5 6 7
| server { listen 80; # 如果冲突换个端口 server_name _; root /data/aria2ng; charset utf-8; index index.html; }
|
重启 Nginx 访问目标地址确认是否正确, 进入页面会提示 认证失败! 错误, 需要按照以下流程配置请求入口:
- 点击页面下的
系统设置 - AriaNG 设置
- 切换页面的
RPC 页面, 这里就是设置我们刚刚 RPC 信息的地方
Aria2 RPC 别名: 就是展示名而已, 随便其他都行
Aria2 RPC 地址: 这里就是我们开放的监听地址和端口(rpc-listen-port)
Aria2 RPC 协议: 如果是内网可以简单 http, 对于下载进度页面采用轮训 , 而 websocket 就是长链接
Aria2 RPC 请求方法: 建议采用 POST 即可
Aria2 RPC 请求头: 附加一些特殊的请求头信息, 用的请求会设置中转验证头信息
Aria2 RPC 密钥: 这里就是服务端配置的 rpc-secret 信息, 注意一定要设置复杂且不要用常用密码
- 修改的时候弹出需要重新加载, 点击
重新加载 之后会刷新页面, 如果没问题会在页面 Aria2 状态 显示 已连接
这里可以去测试找个 Ubuntu镜像种子 测试下载,
下载种子文件之后在 AriaNG 页面的 新建 - 文件夹图表点击 - 打开种子文件 提交 Ubuntu 种子文件即可.
在这个过程可以暂停之后查看 /data/downloads/aria2.session 是否会将资源进度序列化保存, 出现 ‘未能将会话序列化’ 就代表异常
如果能看到 aria2.session 已经生成记录任务并且资源文件下载完成, 那么就代表整体配置已经成功.
如果有个 Cloudflare 域名, 可以通过内部 Pages 功能做静态页面部署, Cloudflare 可以限额托管静态页面;
这部分功能托管在 Cloudflare 就不用自己的服务器上面部署 Web 功能, 这样效率更高点而且也不怕服务器宕机.
最好不要把 Aria2 和 AriaNG 部署在同个服务器下, 因为挂机下载的时候网络带宽占用很大, 可能会导致 AriaNG 无法访问
目录展示
这一步用于直接 Web 页面展示下载目录文件列表, 这样就电脑|手机就不需要安装额外的应用就可以下载资源:
1 2 3 4 5
| # 这里需要安装 Nginx 扩展的 sudo apt install nginx-extras
# 之后就是扩展配置文件 sudo touch /etc/nginx/conf.d/aria2files.conf
|
/etc/nginx/conf.d/aria2files.conf 文件配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| server { listen 18888 reuseport; # 端口被占用的时候可以换个端口处理 server_name _; charset utf-8; root /data/downloads; location / { # 下载配置 client_max_body_size 4096m; # 一般 4G 大小差不多 client_body_buffer_size 128k; # 缓冲区大小(低内存设备可设为 64k) proxy_buffering off; # 关闭代理缓冲,减少内存占用 # 目录展示 fancyindex on; fancyindex_exact_size off; # 显示人性化文件大小(如 1.2G 而非字节数) fancyindex_time_format "%Y-%m-%d %H:%M:%S"; # 时间格式优化 fancyindex_localtime on; # 使用本地时间(而非 UTC 时间) fancyindex_hide_symlinks on; # 隐藏符号链接(避免暴露上级目录) # 屏蔽掉指定文件 fancyindex_ignore "aria2.session" ".aria2" ".torrent" ".url" ".txt" "_____padding_file_" "rar" "zip" ".html" ".htm" ".link"; # 安全优化:禁止目录遍历(仅允许访问存在的文件/目录) try_files $uri $uri/ =404; } # 禁止访问所有 . 开头的隐藏文件/目录(如 .aria2、.git) location ~* /\. { deny all; return 404; # 用 404 隐藏文件存在性(比 403 更安全,避免泄露信息) } # 禁止访问特定后缀文件(即使知道路径也无法访问) location ~* \.(torrent|aria2|url|txt|rar|zip|html|htm|link)$ { deny all; return 404; } # 禁止访问 aria2.session 文件(单独强化,避免通过路径直接访问) location = /aria2.session { deny all; return 404; } # 禁止访问 padding 填充文件(BT 下载残留) location ~* _____padding_file_ { deny all; return 404; } }
|
重新加载 Nginx 配置之后就能在浏览器看到效果, 这个过程一般不会出什么问题(有也是端口占用的情况).
Tracker源
常见的 BT 下载文件需要手动添加其他服务器源, 这样才能发扬 '我为人人, 人人为我' 的精神;
Tracker 服务器提供对应资源服务发现功能, 让同个资源下载用户进行互相分享.
如果配置 DHT 加入网络其实不用管, 因为本身就是从 DHT 网络就可以加载到所有分享节点, 但大部分情况没有对公网服务器就要手动配置
这里需要配置推荐几个好用的源地址资源:
常用的比较活跃的 Tracker 服务器节点都可以在这里面检索到, 可以直接运行命令来覆盖配置:
1 2 3 4 5
| # Aria2 配置的内容 https://cf.trackerslist.com/best_aria2.txt sudo sed -i "s|^bt-tracker=.*|bt-tracker=$(curl https://cf.trackerslist.com/best_aria2.txt | sed 's/,$//')|" /etc/aria2/aria2.conf
# 如果是空格换行格式的内容 https://cf.trackerslist.com/best.txt sudo sed -i "s|^bt-tracker=.*|bt-tracker=$(curl https://cf.trackerslist.com/best.txt | sort -u | tr '\n' ',' | sed 's/^,//;s/,$//' | sed 's/&/\&/g')|" /etc/aria2/aria2.conf
|
这样就完成搭建完成整体的离线下载服务, 后续就是其他扩展配置的优化项变动.