记录 docker 部署 alist, aria2, AiraNg 网盘离线下载最佳实践

一个自由且不限速的下载工具非常重要,这个需求在你下一个重要大文件看着 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_DOCKERALIST_ARIA2_STORAGE 是主机上的目录,ARIA2_RPC_SECRET 是连接 aria2 服务需要的密钥。

ALIST_ARIA2_DOCKER=/docker-app/alist-aria2
ALIST_ARIA2_STORAGE=/data/alist-nas
ARIA2_RPC_SECRET=Aria2密钥

使用说明

  1. 写这篇文章时间是 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 镜像随着服务版本号的升级配置可能有差别,请注意参考官方文档。

  2. 按照上面这样部署的 alistaria2 可以正常使用 alist 网盘上的离线下载了,在 alist 管理 => 设置 => 其他,配置 Aria2

    Aria2 地址:http://aria2-pro:6800/jsonrpc
    Aria2 密钥: 上面的Aria2密钥
    

    在前台的右小角小齿轮中也按照同样配置即可。

  3. aria2 添加了健康检查 healthcheck,同时在 alist 的启动依赖于 aria2 的健康状态,保证在 alist 启动时 aria2 已经启动好了。

  4. 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 了。

外网访问

因为是部署在内网的,要在外网时随时随地使用离线下载,所以需要为 aria2AriaNg 配置 nginx 代理并加上 SSL 证书。

这里假设外网访问域名是 nas.test.com,在 /etc/nginx/conf.d/nas.test.com.ssl.conf 中指定证书路径。

如此配置的前提是的 nas.test.com 已经通过 DDNS 解析到了路由器,假设内网机器 IP192.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.internaldocker 网关的地址。可以参考:docker和docker compose中使用host.docker.internal访问其他服务,如果是本地部署替换为 127.0.0.1

如此这般配置完之后,在外网任何地方就可以通过网址 https://nas.test.com:9095 访问 AriaNg 来添加下载任务进行离线下载了。

而外网连接 aria2 RPC 服务地址就是 https://nas.test.com:9096/jsonrpc ,支持 httpswss 服务,我这里使用的是 wss

image-20241121133615674

因为需要外网访问 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

若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。

发表评论

您的电子邮箱地址不会被公开。

Scroll to top