Featured image of post 搭建一个 BT 离线下载服务器

搭建一个 BT 离线下载服务器

但愿不要被版权投诉(

自从买了一些廉价 VPS 以后,手上就闲置了一台 Azure 的学生机,除了用来跑个 Trojan 暂时没有其他的用途。正好最近想要下一些 BT 资源,而国内的 BT 环境懂的都懂,遂决定用这台接近闲置的机器离线下载 BT。

首先声明,所有 BT 下载行为需要自行承担被版权投诉的风险。

安装 Aria2

对于这些不是「基础设施」的软件,我更喜欢直接拉取一个 Docker 容器的方案。我采用了P3TERX/Aria2-Pro-Docker1,这套已经修改好的 Docker 容器。Docker 容器部署起来如出一辙:首先编辑docker-compose.ymldocker compose up把所有容器都跑起来,最后反代暴露的端口即可。

我的docker-compose.yml如下2

 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
services:

  Aria2-Pro:
    container_name: aria2-pro
    image: p3terx/aria2-pro
    environment:
      - PUID=65534
      - PGID=65534
      - UMASK_SET=022
      - RPC_SECRET=replace-me   # 记得修改这一行
      - RPC_PORT=6800
      - LISTEN_PORT=6888
      - DISK_CACHE=64M
      - IPV6_MODE=false
      - UPDATE_TRACKERS=true
      - CUSTOM_TRACKER_URL=
      - TZ=Asia/Shanghai
    volumes:
      - ./aria2-config:/config
      - ./aria2-downloads:/downloads
    network_mode: bridge  # 如果你需要用到 IPV6 网络,也可以使用 host 模式
    ports:
      - 6800:6800
      - 6888:6888
      - 6888:6888/udp
    restart: unless-stopped
    # 防止日志塞满硬盘
    logging:
      driver: json-file
      options:
        max-size: 1m

# 也可以使用其他面板
  AriaNg:
    container_name: ariang
    image: p3terx/ariang
    command: --port 6880 --ipv6
    network_mode: bridge
    ports:
      - 6880:6880
    restart: unless-stopped
    logging:
      driver: json-file
      options:
        max-size: 1m

用 Caddy 反向代理

之前的反向代理,我都是用的基于 Nginx 的方案,而在这段时间里关于 Caddy 的好评不绝于耳,这次的我便换用了 Caddy,当然,主要也是想尝试一些新东西、新技术。

Caddy 的使用真的非常简单,即使对新人也极其友好,例如,常用的反向代理本机某个端口,只需三行 Caddyfile 即可搞定。

1
2
3
domain.com {
  reverse_proxy :1234
}

安装 Caddy 请参考官方文档,例如,我的服务器使用 Debian,则使用以下命令安装:

1
2
3
4
5
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

安装完成后记得开放防火墙和从服务商策略组的 80 和 443 端口。

在域名服务商处将要绑定的域名指向服务器,就可以开始写 Caddyfile 了。我们需要反向代理三个端口,分别用作不同的用途。我的 Caddyfile 如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Aria-NG 面板
download.l3zc.com {
  reverse_proxy :6880
}

# Aria2 API
arapi.l3zc.com {
  reverse_proxy :6800
}

# Alist
downloaded.l3zc.com {
  reverse_proxy :5244
}

看到如此简洁的配置文件,不由得感叹,相比于 Nginx,Caddy 用起来真是令人心情舒畅。写入配置完成后,重新启动 Caddy3,就可以开始欣赏 Caddy 自动帮你申请 SSL 证书配置好 HTTPS 的绝赞过程。至此,反向代理的部分也就完成了。

配置 Aria-NG

Aria-NG 只是一个前端面板,可以和任何 Aria2 后端通信,为此,我们需要给 Aria-NG 提供配置信息。进入刚刚反代好的 Aria-NG 面板,转到 AriaNG 设置,填入配置信息。

在 AriaNG 面板内填入配置信息

其中,RPC 地址是刚刚反代好的 RPC 地址,协议选择 HTTPS,请求方法选择 POST,RPC 密钥是在docker-compose.ymlreplace-me处你所替换的值。

若「Aria2 状态」旁出现「已连接」,说明配置正确。

用 Alist 映射下载目录

我们通过 Alist 映射下载目录,以更方便的查看、管理和下载服务器上已经下载好的文件。Alist 同样也通过 Docker 部署,由于 Alist 本身在容器内运行们,无法访问容器外的文件,部署时需要将 Aria2 的下载目录提前 Bind 到 Alist 的容器下。

我的docker-compose.yml如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
services:
    alist:
        image: 'xhofe/alist:latest'
        container_name: alist
        volumes:
            - '/etc/alist:/opt/alist/data'
            - '/home/azureuser/aria2/aria2-downloads:/aria2-downloads'  #这里需要视情况绑定你自己的目录
        ports:
            - '5244:5244'
        environment:
            - PUID=0
            - PGID=0
            - UMASK=022
        restart: unless-stopped

第一次启动 Alist 时,Alist 会随机生成admin用户的密码,所以,第一次启动这套编排时,最好不要带-d参数,而是直接docker compose up,并把容器启动后的输出妥善保存。如果不小心没有保存管理员密码,可以用这个命令重新随机生成一个:

1
docker exec -it alist ./alist admin random

成功登录 Alist 之后就可以开始挂载目录了。

挂载 Aria2 的下载目录

驱动选择本机存储,挂载路径需要注意,按照我的编排,我将容器外的/home/azureuser/aria2/aria2-downloads目录挂载到了容器内的/aria2-downloads,所以挂载路径应该是/aria2-downloads

完成

现在所有的服务都已经部署上线了,打开 AriaNG 可以添加下载任务,下载好的文件可以打开 Alist 看到,下载,以及在线观看。

搭建这套服务之前,请仔细查看 VPS 提供商的服务条款,确保 BT 下载行为不会违规。以及,除了卢森堡等少数国家/地区,下载被 DMCA 保护的资源可能会遭到投诉,这些风险都需要你自行承担。

反正我这 Azure 的学生机也是白嫖的,被投诉回收了我也无所谓,不管怎样,现在可以心无旁骛的享受找资源的快乐了。


  1. 当然也可以试一试SuperNG6/docker-aria2 ↩︎

  2. 参考原作者的docker-compose.yml ↩︎

  3. caddy stopcaddy start,参考Caddy文档 ↩︎