一个自由且不限速的下载工具非常重要,这个需求在你下一个重要大文件看着 KB
为单位的下载速度时显得尤为迫切,如果你是看电影或追剧,厌倦平台的各种插播广告更无法接受删减后的阉割内容,那一个趁手的下载工具也很有必要。
如果你有以上情况,那么 aria2
是一个很好的解决方案,而我今天带来的是一个服务器版本,具体逻辑是服务器上部署好 aria2
服务端,然后使用 web
客户端 ariang
在浏览器上管理下载任务,实现随时随地的下载。
使用 docker-compose
部署 alist
+ aria2
+ AriaNg
经过一番研究,这里提供一个完整的 docker-compose.yml
文件,一键部署就行。
文件 docker-compose.yml
内容:
version: "3.8"
services:
alist:
image: xhofe/alist:latest
container_name: alist
ports:
- 5244:5244
environment:
- PUID=0
- PGID=0
- UMASK=022
restart: always
env_file:
- .env
volumes:
- ${ALIST_ARIA2_DOCKER}/alist/data:/opt/alist/data
- ${ALIST_ARIA2_STORAGE}/aria2/temp/aria2:/opt/alist/data/temp/aria2
- ${ALIST_ARIA2_STORAGE}/aria2/temp/downloads:/downloads
- ${ALIST_ARIA2_STORAGE}:/nas
depends_on:
aria2-pro:
condition: "service_healthy"
aria2-pro:
container_name: aria2-pro
image: p3terx/aria2-pro
environment:
- PUID=0
- PGID=0
- UMASK_SET=022
- RPC_SECRET=${ARIA2_RPC_SECRET}
- RPC_PORT=6800
- LISTEN_PORT=6888
- DISK_CACHE=64M
- IPV6_MODE=false
- UPDATE_TRACKERS=true
- TZ=Asia/Shanghai
- SPECIAL_MODE=move
volumes:
- ${ALIST_ARIA2_DOCKER}/aria2/config:/config
- ${ALIST_ARIA2_STORAGE}/aria2/temp/aria2:/opt/alist/data/temp/aria2
- ${ALIST_ARIA2_STORAGE}/aria2/temp/downloads:/downloads
- ${ALIST_ARIA2_STORAGE}/downloads:/completed
ports:
- 6800:6800
- 6888:6888
- 6888:6888/udp
restart: unless-stopped
env_file:
- .env
logging:
driver: json-file
options:
max-size: 1m
healthcheck:
test:
[
"CMD-SHELL",
"curl -s -f -X POST -H 'Content-Type: application/json' \
-d '{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"aria2.getVersion\",\"params\":[\"token:'$ARIA2_RPC_SECRET'\"]}' \
http://localhost:6800/jsonrpc || exit 1"
]
interval: 30s
timeout: 10s
retries: 3
ariang:
container_name: ariang
image: p3terx/ariang
command: --port 6880 --ipv6
ports:
- 6880:6880
restart: unless-stopped
env_file:
- .env
logging:
driver: json-file
options:
max-size: 1m
.env
环境变量
目录映射和 aria2
密钥需要在环境变量中配置,ALIST_ARIA2_DOCKER
和 ALIST_ARIA2_STORAGE
是主机上的目录,ARIA2_RPC_SECRET
是连接 aria2
服务需要的密钥。
ALIST_ARIA2_DOCKER=/docker-app/alist-aria2
ALIST_ARIA2_STORAGE=/data/alist-nas
ARIA2_RPC_SECRET=Aria2密钥
使用说明
- 写这篇文章时间是
2024-11-22
,上面三个都是使用latest
镜像,对应的镜像版本和服务版本:xhofe/alist:v3.39.4 alist:v3.39.4 p3terx/aria2-pro:202209060423 aria2:1.36.0 p3terx/ariang:latest ariang:v1.2.3
后续
latest
镜像随着服务版本号的升级配置可能有差别,请注意参考官方文档。 -
按照上面这样部署的
alist
和aria2
可以正常使用alist
网盘上的离线下载了,在alist
管理 => 设置 => 其他,配置Aria2
。Aria2 地址:http://aria2-pro:6800/jsonrpc Aria2 密钥: 上面的Aria2密钥
在前台的右下角小齿轮中也按照同样配置即可。
-
为
aria2
添加了健康检查healthcheck
,同时在alist
的启动依赖于aria2
的健康状态,保证在alist
启动时aria2
已经启动好了。 -
为
aria
启动添加了- SPECIAL_MODE=move
参数,在任务下载完成后移动到指定目录。也就是开启了文件自动归档/分类,如果不需要可以去掉,具体使用方法文档参考:docker-aria2-pro 进阶玩法配置完自动归档,在下载完成后,会出现类似这样的输出:
11/21 13:15:57 [NOTICE] Download complete: /downloads/教父-1972_蓝光国英双语双字.mp4 11/21 13:15:57 [NOTICE] Your share ratio was 0.0, uploaded/downloaded=9.2MiB/3.0GiB 11/21 13:15:57 [INFO] .aria2 file does not exist. 11/21 13:15:57 [INFO] Deleting .torrent file ... removed '/downloads/e0a1a63dfc981ab3b4879592a14ddf450bb70c4f.torrent' 11/21 13:15:57 [INFO] Deleting empty directory ... 11/21 13:15:57 [INFO] Start move files ... -------------------------- [Task Infomation] -------------------------- Task GID: 9a9cfb25a85c898b Number of Files: 1 First File Path: /downloads/教父-1972_蓝光国英双语双字.mp4 Task File Name: 教父-1972_蓝光国英双语双字.mp4 Task Path: /downloads/教父-1972_蓝光国英双语双字.mp4 Aria2 Download Directory: /downloads Custom Download Directory: /downloads Source Path: /downloads/教父-1972_蓝光国英双语双字.mp4 Destination Path: /completed .aria2 File Path: null -------------------------- [Task Infomation] -------------------------- '/downloads/教父-1972_蓝光国英双语双字.mp4' -> '/completed/教父-1972_蓝光国英双语双字.mp4' 11/21 13:16:03 [INFO] Move done: /downloads/教父-1972_蓝光国英双语双字.mp4 -> /completed 11/21 13:16:03 [INFO] Deleting empty directory ...
也就是下载完成后,从容器内的
/downloads
自动移动到/completed
了。
外网访问
因为是部署在内网的,要在外网时随时随地使用离线下载,所以需要为 aria2
和 AriaNg
配置 nginx
代理并加上 SSL
证书。
这里假设外网访问域名是 nas.test.com
,在 /etc/nginx/conf.d/nas.test.com.ssl.conf
中指定证书路径。
如此配置的前提是的 nas.test.com
已经通过 DDNS
解析到了路由器,假设内网机器 IP
是 192.168.0.10
,路由器地址 192.168.0.1
,配置好路由器的端口映射:
# alist
192.168.0.1:9092 => 192.168.0.10:9092
# AiraNg
192.168.0.1:9095 => 192.168.0.10:9095
# aria2
192.168.0.1:9096 => 192.168.0.10:9096
# bt下载需要
192.168.0.1:6888 => 192.168.0.10:6888
以下是 nginx
相关配置:
upstream alist {
server host.docker.internal:5244;
}
upstream ariang {
server host.docker.internal:6880;
}
upstream ariarpc {
server host.docker.internal:6800;
}
server {
listen 9092 ssl;
listen [::]:9092 ssl;
server_name nas.test.com;
access_log /var/log/nginx/alist.access.log;
error_log /var/log/nginx/alist.error.log;
include /etc/nginx/conf.d/nas.test.com.ssl.conf;
location / {
proxy_pass http://alist;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
client_max_body_size 20000m;
}
}
server {
listen 9095 ssl;
listen [::]:9095 ssl;
server_name nas.test.com;
include /etc/nginx/conf.d/nas.test.com.ssl.conf;
location / {
proxy_pass http://ariang/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
client_max_body_size 20m;
}
}
server {
listen 9096 ssl;
listen [::]:9096 ssl;
server_name nas.test.com;
include /etc/nginx/conf.d/nas.test.com.ssl.conf;
location /jsonrpc {
proxy_pass http://ariarpc/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";
}
}
因为这里的 nginx
也是部署在 docker
中的,配置内的 host.docker.internal
是 docker
网关的地址。可以参考:docker和docker compose中使用host.docker.internal访问其他服务,如果是本地部署替换为 127.0.0.1
。
如此这般配置完之后,在外网任何地方就可以通过网址 https://nas.test.com:9095
访问 AriaNg
来添加下载任务进行离线下载了。
而外网连接 aria2 RPC
服务地址就是 https://nas.test.com:9096/jsonrpc
,支持 https
和 wss
服务,我这里使用的是 wss
。
因为需要外网访问 aria2 RPC
,记得需要将 ${ALIST_ARIA2_DOCKER}/aria2/config/aria2.conf
开启以下配置:
# 启用 JSON-RPC/XML-RPC 服务器, 默认:false
enable-rpc=true
# 接受所有远程请求, 默认:false
rpc-allow-origin-all=true
# 允许外部访问, 默认:false
rpc-listen-all=true
修改完配置记得重启 aria2
服务。
另外这次顺便一起部署的 alist
可以通过 https://nas.test.com:9092
来访问,将归档目录挂载到 alist
后你就拥有一个 webdav
随时随地观看你下载好的视频了,如果你的服务器网络不够,可以考虑使用 alist
的离线下载功能把下载内容自动上传已挂载的网盘中,然后用网盘的 app
观看即可。
标题:记录 docker 部署 alist, aria2, AiraNg 网盘离线下载最佳实践
原文链接:https://beltxman.com/4435.html
若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。
nginx的意义是啥,直接用alist调用下载不就行了吗
的确可以不使用
nginx
的,这里主要是在我个人的使用场景里因为这台家庭服务器上所有服务都走nginx
反代,所以就顺便把这些也一起配了,方便证书部署,端口映射外网访问,限流啥的。有必要一定要添加服务器到cloudfare的ssl证书吗,还是只要cloudfare到用户有ssl就行了
我这篇文章没有提到
Cloudflare
呢,如果你说的是Cloudflare
的CDN
服务,源服务器证书可以直接在Cloudflare
上创建,免费而且简单建议开启使用,边缘证书应该是必须的,Cloudflare
管理和自动续订不需要操作。