前几天想整个 Aria2,发现大部分镜像是需要暴漏 Aria2 RPC,或者是包含额外的文件浏览功能,又或者自带的 AriaNg 不能自动连接 Aria2 的。于是就研究了一下,自己整了一个。欢迎大家提出意见。
这个镜像有以下特点:
EXTERNAL_PORT
。Docker Hub https://hub.docker.com/r/sanjusss/aria2-ariang-docker
Github https://github.com/sanjusss/aria2-ariang-docker
docker run -d --name aria2 -p 80:80 -v ./data:/data sanjusss/aria2-ariang-docker
访问服务器 IP 即可进入 AriaNg 界面,默认用户密码均为 admin。
docker run -d --name aria2 \
-p 5003:80 \
-v /home/data:/data \
-v /home/aria2:/conf \
-e PUID=1000 \
-e PGID=1000 \
-e EXTERNAL_PORT=5003 \
-e USER_NAME=user \
-e PASSWORD=123456 \
sanjusss/aria2-ariang-docker
docker-compose.yml 文件
version: '3'
services:
aria2:
image: sanjusss/aria2-ariang-docker
container_name: aria2
environment:
PUID: 1000
PGID: 1000
EXTERNAL_PORT: 5003
USER_NAME: user
PASSWORD: 123456
volumes:
- /home/aria2:/conf
- /home/data:/data
ports:
- 5003:80
可以直接参考 Github 上,这边表格发出来就乱了。
1
pljhonglu 2019-12-26 11:18:39 +08:00 1
关注一下。Aria2 RPC 协议改成 ws 照样可以被外部访问,而且还是无密码的
|
3
Buges 2019-12-26 11:25:45 +08:00 via Android 2
为啥非要整到一个镜像里,按照 docker 最佳实践,一个镜像跑 aria2 一个跑 web 双方在一个网络里通信不好吗?
可以按需配置,暴露端口,远程调用等等。 |
5
zyxfsky 2019-12-26 11:35:40 +08:00
我也觉得应该分两个容器,compose 整合到一起就行,一个容器里起了 aria2 和 nginx 进程,然后又自己搞个健康检查,为啥不分开呢
|
6
binux 2019-12-26 11:36:21 +08:00
Aria2 RPC 不是还是被 nginx 暴露了,你这是掩耳盗铃?
|
8
Buges 2019-12-26 11:40:09 +08:00
@sanjusss #4 你说的这个需求不应该打包一个镜像,只需要用独立的镜像配置好一个 docker-compose.yaml 文件就能满足并方便同样需求的人。
|
9
binux 2019-12-26 11:56:25 +08:00
@sanjusss #7 https://binux.github.io/yaaw/demo/#path=ws://admin:admin@localhost/jsonrpc
curl -d '{"jsonrpc":"2.0","method":"aria2.getGlobalOption","id":1,"params":[]}' http://admin:admin@localhost/jsonrpc 你压根就不懂 HTTP 协议。 |
11
sanjusss OP |
12
binux 2019-12-26 12:59:54 +08:00
@sanjusss #11 我都写了 curl 命令你都看不懂?
这根本不是用不用 websocket 的问题,HTTP 在这里不行是因为你错误给 OPTIONS 请求配置了 basic authentication,导致“纯前端” 用 HTTP POST 访问受限。 如果不是 “纯前端”,直接请求 RPC 接口,一点问题都没有。这不就是掩耳盗铃吗? 另外一种 “纯前端” 能访问的方法是 HTTP GET (JSONP),但是现在没有人写 aria2 纯前端客户端的时候用 Aria2 RPC 的 GET 方法了(存在安全性问题),所以没办法展示给你看。 |
13
binux 2019-12-26 13:09:39 +08:00
@sanjusss #11 来来来,为了让你死得更难看一点,我给你找了一个用 HTTP GET 方式的客户端
https://rawcdn.githack.com/ziahamza/webui-aria2/c11c931f47c98daa97531712ba0064ef100565c6/index.html 设置地址 http://localhost/json 用户名 admin 密码 admin 就可以访问了。 |
14
sanjusss OP @binux #12
我使用 get 方法调用 rpc, curl http://192.168.1.3/jsonrpc?jsonrpc=2.0&method=aria2.getGlobalStat&id=QXJpYU5nXzE1NzczMzY3NjFfMC4wNDIyMzI4NzU3MTk3NzExOQ== <html> <head><title>401 Authorization Required</title></head> <body> <center><h1>401 Authorization Required</h1></center> <hr><center>nginx</center> </body> </html> 请指教在不使用用户名密码情况下调用方法。 |
16
binux 2019-12-26 13:20:03 +08:00
@sanjusss #15
「大部分镜像是需要暴漏 Aria2 RPC 」? 你也要暴露。 「 Aria2 RPC 不能被外部调用」? 我已经给你证实可以被外部访问了。 「确保了 Aria2 RPC 的安全性」? 你这和 aria2 自带的 --rpc-user 有什么区别,而且 rpc-user 已经是不推荐的认证方式了。 |
17
7654 2019-12-26 13:46:08 +08:00
{
"language": "zh_Hans", "title": "${downspeed}, ${upspeed} - ${title}", "titleRefreshInterval": 5000, "browserNotification": true, "rpcAlias": "", "rpcHost": "xxxxx.com", "rpcPort": 8080, "rpcInterface": "jsonrpc", "protocol": "wss", "httpMethod": "POST", "secret": "XXXXXXXXXXXX==" } 这是我自己的 AriaNG aria2 使用 LE 证书,wss+secret |
18
sanjusss OP @binux #16
现在你再用最新的镜像试试吧。 我加了个最简单的认证,直接阻止了未过访问首页的调用。当然这个基于 cookie 的验证太简单了,后面我再改就行了。 https://i.loli.net/2019/12/26/2fCAcJzEXLP1yN8.jpg |
19
binux 2019-12-26 14:54:56 +08:00
@sanjusss #18 然而 cookie 并不能 CSRF,你作为用户访问过一次主页后,cookie 和 basic auth 已经存在浏览器中了,我用恶意脚本向你 aria2 RPC GET 请求是畅通无阻的。
我建议你别继续下去了,缺少知识情况下,你包括这条路就是错。“对 AriaNg 进行密码验证” 压根就没有意义。 |
20
sanjusss OP @binux #19
搞了半天,原来你是“对 AriaNg 进行密码验证”有意见啊!我的重点又不是加密,而是访问 AriaNg 时无需手动更改设置。 登录即可用,这才是我要搞的。 对于你的其他观点,不能苟同。 |
21
binux 2019-12-26 15:43:03 +08:00 via Android
@sanjusss #20 问题是你是在以降低 aria2 安全性的方式做的。
保存一个带 RPC 地址的书签就这么难吗?实在不行你把默认地址硬编码到 AriaNg 也比你画蛇添足反代 aria2 好啊。 |
22
pljhonglu 2019-12-26 17:16:04 +08:00
|
25
sanjusss OP @pljhonglu #24 已经推送,每次启动 /重启容器时,都会随机化 rpc 的路径和密钥,可能需要清空浏览器缓存才能正常显示。
|
26
Maskeney 2019-12-26 19:10:25 +08:00
恭喜你重复造了一个没什么卵用的轮子
|
27
deorth 2019-12-26 19:35:56 +08:00
好奇你怎么实现自动填写 rpc-sercet 的。
|
28
justin2018 2019-12-27 09:40:21 +08:00
可以完美配合 115 下载助手么 😁
|
29
emtry 2020-01-01 20:53:15 +08:00
issue:内网穿透后 RPC 连不上
|
30
emtry 2020-01-01 20:57:22 +08:00
需求:aria-ng rpc 端口可自定义
|