一个自由且不限速的下载工具非常重要,这个需求在你下一个重要大文件看着 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
若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。