# Docker Aria2的最佳實踐
Docker Hub:[https://hub.docker.com/r/superng6/aria2](https://hub.docker.com/r/superng6/aria2)
GitHub:[https://www.github.com/SuperNG6/docker-aria2](https://www.github.com/SuperNG6/docker-aria2)
博客:[https://sleele.com/2019/09/27/docker-aria2的最佳實踐/](https://sleele.com/2019/09/27/docker-aria2%E7%9A%84%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/)
> 在茫茫多的docker aria2鏡像中,一直找不到符合我需求的鏡像
# 之所以構建這個鏡像的原因
**當前的鏡像或多或少都有以下幾點不符合的我的需求**
* 沒有配置UID和GID
> 這關系到你下載的文件的權限問題,默認是root權限,很難管理
* 端口不全
> 絕大多數的aria2 images 都只開放了6800端口 下載速度息息相關的BT下載DTH監聽端口、BT下載監聽端口,需要expose出來 支持修改`DHT網絡監聽端口`和`BT監聽端口`,部分網絡6881端口已被封禁,建議修改
* 沒有自動刪除.aria2文件的自動執行腳本
> aria2建立下載任務后會自動生成.aria2文件,aria2自身提供了api可以觸發執行腳本
* 沒有回收站
> 不小心刪除文件后無法找回,現在有了回收站,再也不用擔心誤刪了
* 沒有任務轉移功能
> NAS下載,建議使用SSD盤,減少硬盤噪音,下載完成后自動保留目錄結構轉移到HDD硬盤中
* 不能保存在保存磁力鏈接為種子文件時更名
> aria2雖然可以保存磁力鏈接為種子,但是種子名為隨機字符串,本鏡像可以將種子命名為正確名稱
* 無法檢測是否下載過的任務
> aria2只能夠在持續運行期間檢查是否為重復任務,重啟后再建立相同任務則會覆蓋,本鏡像支持持久化檢查重復任務 支持檢測到重復任務自動刪除新創立的重復任務
* 不能夠暫停任務后結束/移動文件
> BT任務有個特點,就說很容易卡在一個進度就不動了,如果主要文件已下載完成可以執行其他操作就好了 本鏡像支持暫停任務后清理垃圾文件,并移動到已完成目錄,并結束該任務
# 本鏡像的一些優點
* 全平臺架構`x86-64`、`arm64`、`armhf`,統一latest tag
* 做了usermapping,使用你自己的賬戶權限來運行,這點對于群輝來說尤其重要
* 純aria2,沒有包含多于的服務
* 超小鏡像體積 10.77 MB
* 可以自定義任意二級目錄
* 開放了BT下載DTH監聽端口、BT下載監聽端口(TCP/UDP 6881),加快下載速度
* 默認開啟DHT并且創建了DHT文件,加速下載
* 包含了下載完成后自動刪除.aria2文件腳本
* 包含了執行刪除正在下載任務事時自動執行刪除文件(刪除已完成的任務不會刪除文件,請放心)和aria2文件的腳本
* 內置最優的aria2配置文件(修改自[P3TERX/aria2.conf](https://github.com/P3TERX/aria2.conf),感謝)
* 內置400多條最新trackers(來自[XIU2 / TrackersListCollection](https://github.com/XIU2/TrackersListCollection),感謝)
* 每天自動更新trackers,不需要重啟aria2即可生效(來自[P3TERX/aria2.conf](https://github.com/P3TERX/aria2.conf),感謝)
* 默認上海時區 Asia/Shanghai
* 直接設置token,不需要在配置文件里修改
* 最新靜態編譯版的aria2c1.3.5(來自[P3TERX/aria2-builder](https://github.com/P3TERX/aria2-builder),感謝)
* 解除aria2c下載線程限制
* 支持自動更新tracker,每次啟動容器時會自動更新tracker
* 手動設置磁盤緩存`CACHE`,默認參數`128M`
* 可選則開啟回收站,刪除文件后移動至回收站,防止丟失文件
* 可選下載任務完成后,保留目錄結構移動文件
* 相對來說最完善的任務處理腳本
* 更多可手動調節參數,大量選項不需要修改conf文件
* 全平臺鏡像統一tag
# Architecture
### 全平臺鏡像統一Tag
#### latest (default none webui)
docker pull superng6/aria2:latest
| Architecture | Tag |
| --- | --- |
| x86-64 | latest |
| arm64 | latest |
| armhf | latest |
#### webui-latest (default aria2 with webui ariang)
docker pull superng6/aria2:webui-latest
| Architecture | Tag |
| --- | --- |
| x86-64 | webui-latest |
| arm64 | webui-latest |
| armhf | webui-latest |
## 往后所有新增功能設置選項均在`/config/setting.conf`
### 額外補充文章
群暉 DS918+擴展 – M.2 NVMe SSD 緩存變儲存空間
[https://sleele.com/2021/09/04/synology-nas-m2nvme-ssd-cache-change-to-storage-pool/](https://sleele.com/2021/09/04/synology-nas-m2nvme-ssd-cache-change-to-storage-pool/)
NAS SSD臨時下載盤,Aria2+qbittorrent配置教程
[https://sleele.com/2021/09/04/nas-ssd-aria2-qbittorrent/](https://sleele.com/2021/09/04/nas-ssd-aria2-qbittorrent/)
# Changelogs
## 2021/09/10
~~~
1、增加啟動容器時顯示正在運行的docker-aria2版本提示
2、合并普通版和WEBUI版,增加選項`是否啟用WEBUI` `-e WEBUI=true`,默認啟用,端口8080
~~~
## 2021/09/09
~~~
1、支持修改`BT監聽端口`和`DHT網絡監聽端口`,默認`BTPORT=32516`
2、增強程序健壯性,"/config/setting.conf"的參數誤刪除也會使用默認參數
3、下個版本可能會合并webui版和普通版,二者資源占用上幾乎沒有區別,不想再多維護一個版本了
4、docker-compose 事例說明中加入host模式寫法,推薦使用host模式,性能更好
5、"/config/setting.conf"的`自定義tracker地址`功能,變更至docker環境變量中,| `-e CTU=` |啟動容器時更新自定義trackes地址中的trackes|
~~~
## 2021/08/24
~~~
1、更新 aria2 1.36.0
~~~
## 2021/08/14
~~~
1、添加WEBUI_PORT設置,默認`WEBUI_PORT=8080`
~~~
## 2021/07/28
~~~
1、自定義tracker地址變更至`/config/setting.conf`
現在無需重啟容器也能方便修改自定義tracker了
~~~
Change Log History
# Document
## 在線webui
我在Gitee上構建了基于ariang主線穩定版的在線webui:
僅https[https://sleele.gitee.io/#!/downloading](https://sleele.gitee.io/#!/downloading)
http[http://sleele.gitee.io/ariang/#!/downloading](http://sleele.gitee.io/ariang/#!/downloading)
## 自行構建webui
在docker上部署最新版ariang
[https://sleele.com/2020/06/03/tiny-docker-ariang/](https://sleele.com/2020/06/03/tiny-docker-ariang/)
[https://github.com/SuperNG6/docker-ariang](https://github.com/SuperNG6/docker-ariang)
[https://hub.docker.com/r/superng6/ariang](https://hub.docker.com/r/superng6/ariang)
## 掛載路徑
`/config``/downloads`
## 默認關閉SSL,如需要請手動開啟
之所以默認關閉SSL(建議開啟),是因為如果開啟,又沒有配置證書,會導致aria2啟動失敗,所以如果需要開啟請手動編輯aria2.conf 證書請放在`/config/ssl`目錄下 刪掉24,26,28行的`#`號
## 修改RPC token
填寫你自己的token,越長越好,建議使用生成的UUID
## 關于群暉
群暉用戶請使用你當前的用戶SSH進系統,輸入`id 你的用戶id`獲取到你的UID和GID并輸入進去

### 權限管理設置
對你的`docker配置文件夾的根目錄`進行如圖操作,`你的下載文件夾的根目錄`進行相似操作,去掉`管理`這個權限,只給`寫入`,`讀取`權限
## 環境變量說明
| 參數 | 說明 |
| --- | :-- |
| `--name=aria2` | 容器名設置為aria2 |
| `-v 本地文件夾1:/downloads` | Aria2下載位置 |
| `-v 本地文件夾2:/config` | Aria2配置文件位置 |
| `-e PUID=1026` | Linux用戶UID |
| `-e PGID=100` | Linux用戶GID |
| `-e SECRET=yourtoken` | Aria2 token |
| `-e CACHE=1024M` | Aria2磁盤緩存配置 |
| `-e PORT=6800` | RPC通訊端口 |
| `-e WEBUI=true` | 啟用WEBUI |
| `-e WEBUI_PORT=8080` | WEBUI端口 |
| `-e BTPORT=32516` | DHT和BT監聽端口 |
| `-e UT=true` | 啟動容器時更新trackers |
| `-e CTU=` | 啟動容器時更新自定義trackes地址 |
| `-e RUT=true` | 每天凌晨3點更新trackers |
| `-e SMD=true` | 保存磁力鏈接為種子文件 |
| `-e FA=` | 磁盤預分配模式`none`,`falloc`,`trunc`,`prealloc` |
| `-p 6800:6800` | Aria2 RPC連接端口 |
| `-p 6881:6881` | Aria2 tcp下載端口 |
| `-p 6881:6881/udp` | Aria2 p2p udp下載端口 |
| `--restart unless-stopped` | 自動重啟容器 |
### 自定義tracker地址
CTU="[https://cdn.jsdelivr.net/gh/XIU2/TrackersListCollection@master/best\_aria2.txt](https://cdn.jsdelivr.net/gh/XIU2/TrackersListCollection@master/best_aria2.txt)"
### `/config/setting.conf`配置說明(推薦使用)
推薦使用`setting.conf`進行本鏡像附加功能選項設置
~~~
## docker aria2 功能設置 ##
# 配置文件為本項目的自定義設置選項
# 重置配置文件:刪除本文件后重啟容器
# 所有設置無需重啟容器,即刻生效
# 刪除任務,`delete`為刪除任務后刪除文件,`recycle`為刪除文件至回收站,`rmaria`為只刪除.aria2文件
remove-task=rmaria
# 下載完成后執行操作選項,默認`false`
# `true`,下載完成后保留目錄結構移動
# `dmof`非自定義目錄任務,單文件,不執行移動操作。自定義目錄、單文件,保留目錄結構移動(推薦)
move-task=false
# 文件過濾,任務下載完成后刪除不需要的文件內容,`false`、`true`
# 由于aria2自身限制,無法在下載前取消不需要的文件(只能在任務完成后刪除文件)
content-filter=false
# 下載完成后刪除空文件夾,默認`true`,需要開啟文件過濾功能才能生效
# 開啟內容過濾后,可能會產生空文件夾,開啟`DET`選項后可以刪除當前任務中的空文件夾
delete-empty-dir=true
# 對磁力鏈接生成的種子文件進行操作
# 在開啟`SMD`選項后生效,上傳的種子無法更名、移動、刪除,僅對通過磁力鏈接保存的種子生效
# 默認保留`retain`,可選刪除`delete`,備份種子文件`backup`、重命名種子文件`rename`,重命名種子文件并備份`backup-rename`
# 種子備份位于`/config/backup-torrent`
handle-torrent=backup-rename
# 刪除重復任務,檢測已完成文件夾,如果有該任務文件,則刪除任務,并刪除文件,僅針對文件數量大于1的任務生效
# 默認`true`,可選`false`關閉該功能
remove-repeat-task=true
# 任務暫停后移動文件,部分任務下載至百分之99時無法下載,可以啟動本選項
# 建議僅在需要時開啟該功能,使用完后請記得關閉
# 默認`false`,可選`true`開啟該功能
move-paused-task=false
~~~
### `/config/文件過濾.conf`配置說明
~~~
## 文件過濾設置(全局) ##
# 僅 BT 多文件下載時有效,用于過濾無用文件。
# 可自定義;如需啟用請刪除對應行的注釋 #
# 排除小文件。低于此大小的文件將在下載完成后被刪除。
#min-size=10M
# 保留文件類型。其它文件類型將在下載完成后被刪除。
#include-file=mp4|mkv|rmvb|mov|avi|srt|ass
# 排除文件類型。排除的文件類型將在下載完成后被刪除。
#exclude-file=html|url|lnk|txt|jpg|png
# 按關鍵詞排除。包含以下關鍵字的文件將在下載完成后被刪除。
#keyword-file=廣告1|廣告2|廣告3
# 保留文件(正則表達式)。其它文件類型將在下載完成后被刪除。
#include-file-regex=
# 排除文件(正則表達式)。排除的文件類型將在下載完成后被刪除。
# 示例為排除比特彗星的 padding file
#exclude-file-regex="(.*/)_+(padding)(_*)(file)(.*)(_+)"
~~~
## Linux
輸入`id 你的用戶id`獲取到你的UID和GID,替換命令中的PUID、PGID
**執行命令**
~~~bash
docker run -d \
--name=aria2 \
-e PUID=1026 \
-e PGID=100 \
-e TZ=Asia/Shanghai \
-e SECRET=yourtoken \
-e CACHE=512M \
-e PORT=6800 \
-e BTPORT=32516 \
-e WEBUI=true \
-e WEBUI_PORT=8080 \
-e UT=true \
-e RUT=true \
-e FA=falloc \
-e QUIET=true \
-e SMD=true \
-p 32516:32516 \
-p 32516:32516/udp \
-p 6800:6800 \
-p 8080:8080 \
-v $PWD/config:/config \
-v $PWD/downloads:/downloads \
--restart unless-stopped \
superng6/aria2:webui-latest
~~~
docker-compose
~~~yml
version: "3.1"
services:
aria2:
image: superng6/aria2:webui-latest
container_name: aria2
network_mode: host
environment:
- PUID=1026
- PGID=100
- TZ=Asia/Shanghai
- SECRET=yourtoken
- CACHE=512M
- PORT=6800
- WEBUI=true
- WEBUI_PORT=8080
- BTPORT=32516
- UT=true
- QUIET=true
- SMD=true
volumes:
- $PWD/config:/config
- $PWD/downloads:/downloads
restart: unless-stopped
~~~
# Preview
