wahyd4 / aria2-ariang-x-docker-compose

Docker compose files for Aria2+ AriaNg+ filerun/ Nextcloud/ h5ai + Plex. 图形化BT,磁力,离线下载,文件管理,播放,投屏
1.79k stars 281 forks source link

HTTPS 端口问题 #19

Closed zhangnew closed 6 years ago

zhangnew commented 6 years ago
environment:
    - DOMAIN=demo.toozhao.com #这里输入你想要绑定的域名, 必须首先在域名管理处添加 A 记录。当我们仅仅通过 ip 访问时则应该改为: :80, 这表示绑定所有可以使用的 ip
    - SSL=true #当值为 true 时,系统会自动启用 HTTPS
    - RPC_SECRET=Hello #这个属性是 配置AriaNg 连接 Aria2 时需要,你可以输入你想要设置的密码。一旦设置了 HTTPS, Aria2 也只能使用 HTTPS。这时就必须使用该设置。

请问在域名后面是否需要指定 443 端口,比如:

- DOMAIN=demo.toozhao.com:443

该如何访问这个 HTTPS 协议,docker 是否在同时监听 80 端口和 443 端口,是否会自动从 80 端口跳转到 443 的 HTTPS 协议? 谢谢!

wahyd4 commented 6 years ago

绑定域名的时候不需要带端口。他会默认绑定80和443 两个端口。 关于 docker 是否监听这两个端口,是需要 ports 属性下面有这两个端口才行。 HTTPS 是同时支持 aria2 和 nextcloud 的。因为他们都是通过一个域名访问,不存在只支持一个程序的说法。 nextcloud 是 https://example.com ; aria2是 https://example.com/aria2/

zhangnew commented 6 years ago

感谢回复,在家里部署的,因为要外网访问,所以我在路由器做了端口映射:

内网 外网
80 8080
443 4433
6800 6800

docker-compose.yml 配置如下端口:

  aria2:
    image: wahyd4/aria2-ariang:caddy-nextcloud
    ports:
      - "80:80"
      - "6800:6800"
      - "443:443"

这样的话,我从外网访问 http://example.com:8080 https://example.com:4433 都应该是正确的对不对?

然后我打印 docker 日志发现:

Run aria2c and ariaNG
true
using basic auth config file
Start aria2 with secure config
Activating privacy features...
Your sites will be served over HTTPS automatically using Let's Encrypt.
By continuing, you agree to the Let's Encrypt Subscriber Agreement at:
  https://acme-v01.api.letsencrypt.org/terms
Please enter your email address so you can recover your account if needed.
You can leave it blank, but you'll lose the ability to recover your account.
2017/09/25 03:21:08 [example.com] failed to get certificate: acme: Error 400 - urn:acme:error:connection - Fetching http://example.com/.well-known/acme-challenge/PmfgjmFSdvvyf5avCQK36cqdkFqw5Fdi-jxHZ7X-xaE: Timeout
Error Detail:
        Validation for example.com:80
        Resolved to:
                13.113.12.8
        Used: 13.113.12.8

貌似是它在自己创建 SSL 证书?由于我在路由器使用了端口转发,必然是无法访问80端口的。

但是,我已经使用下面的配置指定了证书位置,为什么它还要自己创建证书?难道是权限问题吗?

volumes:
  - /my/cert:/root/conf/key #存放你自己的 certificate 和 key 的目录, 将 some_folder 修改为你自己的目录。
wahyd4 commented 6 years ago

几点错误:

  1. example.com 是需要改成你自己的域名
  2. 要使用域名访问是要修改 域名的解析地址的,所以内网是不可能用域名 + HTTPS 访问的

你这种情况只能使用 ip 加上映射的端口来访问。。

zhangnew commented 6 years ago

您可能误会了:

现在的问题是 docker 里面(貌似)没有使用我提供的 SSL 证书,而是在试图自己创建 Let's Encrypt 的证书。

wahyd4 commented 6 years ago

那你可以进到 aria2 docker 容器里面,看看/root/conf/key 目录下有没有相应的 ssl key

wahyd4 commented 6 years ago

@zhangnew 目前 docker 里面配置的 ssl key 是给 aria2 使用的哦。不是给 Caddy 使用的。目前不支持给 Caddy 设置 ssl key。你可以执行到容器中进行修改Caddyfile

zhangnew commented 6 years ago

感谢回复。

我看到启动脚本是这样的:

/usr/bin/aria2c --conf-path="/root/conf/aria2.conf" -D  \
--enable-rpc --rpc-listen-all  \
--rpc-certificate=/root/conf/key/aria2.crt \
--rpc-private-key=/root/conf/key/aria2.key \
--rpc-secret="$RPC_SECRET" --rpc-secure \
&& caddy -quic --conf ${CADDY_FILE}

我理解现在的情况是:aria2 在 6800 端口启动 HTTPS 的 RPC,而 nextcloud 是使用过 Caddy 来启动的,目前并没有添加 HTTPS 支持,对吧?

Caddy 会自动申请 Let's Encrypt 的证书,所以你这里并不关心这个,就可以实现 HTTPS。

我的问题就是使用了端口转发,导致 Caddy 无法正常申请证书。

现在解决了,手动指定 Caddy 使用自定义证书。

https://github.com/zhangnew/aria2-ariang-docker/blob/nextcloud/caddy/SecureCaddyfile

zhangnew commented 6 years ago

多说一句,我觉得既然有全站 HTTPS 的需求,首先要手动设置 Aria2 的 SSL 证书,既然已经有了证书,也就没有必要使用 Caddy 自动申请的证书。

建议把配置文件改成相同证书,不管是谁用谁的。

wahyd4 commented 6 years ago

我的初衷是这样,尽量使用真实受信任的证书,所以最初没有考虑让 Caddy 自定义证书。看来证书这块还得多考虑下。

zhangnew commented 6 years ago

能让 Aria2 使用 Caddy 的证书最好啦。除了我这种端口转发的,大部分应该都没问题。

wahyd4 commented 6 years ago

现在问题是不知道 Caddy 获取的 Let's Encrypt 证书在哪个目录。

zhangnew commented 6 years ago

https://caddyserver.com/docs/automatic-https

The .caddy folder

Caddy will create a folder in your home directory called .caddy. It uses this to store and manage cryptographic assets required to serve your site privately over HTTPS. Your sites' certificates and private keys are stored here. Take care to back up and protect this folder. If there is no home folder, the .caddy folder is created in the current working directory unless $CADDYPATH is set. The home folder is learned from the environment ($HOME or %HOMEPATH%).

我在镜像里面看到了这个目录,但是我这里是没有成功申请证书的。/root/.caddy