记录 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

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

记录 docker 部署 alist, aria2, AiraNg 网盘离线下载最佳实践”上有 4 条评论;

    1. 的确可以不使用 nginx 的,这里主要是在我个人的使用场景里因为这台家庭服务器上所有服务都走 nginx 反代,所以就顺便把这些也一起配了,方便证书部署,端口映射外网访问,限流啥的。

      1. 有必要一定要添加服务器到cloudfare的ssl证书吗,还是只要cloudfare到用户有ssl就行了

        1. 我这篇文章没有提到 Cloudflare 呢,如果你说的是 CloudflareCDN 服务,源服务器证书可以直接在 Cloudflare 上创建,免费而且简单建议开启使用,边缘证书应该是必须的,Cloudflare 管理和自动续订不需要操作。

发表评论

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

Scroll to top