我已经创建了一个简单的网站使用炊具-django(使用最新的主人克隆今天)。运行停靠-组合设置在本地工作。现在我想把这个网站部署到数字海洋上。为此,我运行以下命令:
$ docker-machine create -d digitalocean --digitalocean-access-token=secret instancename
$ eval "$(docker-machine env instancename)"
$ sudo docker-compose -f production.yml build
$ sudo docker-compose -f production.yml up
在炊具-django 文档中,我读到
如果没有在项目中使用域名集的子域,请记住在部署网站之前将暂存/生产IP地址放在
DJANGO_ALLOWED_HOSTS环境变量(请参见设置)中。如果不这样做,您将无法通过HTTP协议访问您的网站。
因此,在文件.envs/.production/.django中,我用DJANGO_ALLOWED_HOSTS更改了行
DJANGO_ALLOWED_HOSTS=.example.com (而不是example.com,而是使用我的实际域)
至
DJANGO_ALLOWED_HOSTS=XXX.XXX.XXX.XX (XXX.XX是我的数字水滴的IP;我也尝试了DJANGO_ALLOWED_HOSTS=.example.com和DJANGO_ALLOWED_HOSTS=.example.com,XXX.XXX.XXX.XX,结果相同)
此外,我登录到我注册域名的地方,并确保将A-记录指向我的数字海洋液滴的IP。
使用此设置,部署将无法工作。我收到以下错误消息:
traefik_1 time="2019-03-29T21:32:20Z“level=error msg=”无法获得因规则\“”Host:example.com\“检测到的ACME证书\"example.com\”:无法为域生成证书example.com: acme: Error ->一个或多个域有一个或多个problem:\nexample.com顶点:错误: 400 :urn:ietf:params: acme:错误:连接:获取http://example.com/.well-known/acme-challenge/example-key-here:连接被拒绝,url:\n“
不幸的是,我未能找到解决这个问题的办法。任何帮助都是非常感谢的!
更新
当我按照注释中的建议在服务器上运行netstat -antp时,会得到以下输出(用占位符替换I):
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1590/sshd
tcp 0 0 XXX.XXX.XXX.XX:22 YYY.YY.Y.YYY:48923 SYN_RECV -
tcp 0 332 XXX.XXX.XXX.XX:22 ZZ.ZZZ.ZZ.ZZZ:49726 ESTABLISHED 16959/0
tcp 0 1 XXX.XXX.XXX.XX:22 YYY.YY.Y.YYY:17195 FIN_WAIT1 -
tcp 0 0 XXX.XXX.XXX.XX:22 YYY.YY.Y.YYY:57909 ESTABLISHED 16958/sshd: [accept
tcp6 0 0 :::2376 :::* LISTEN 5120/dockerd
tcp6 0 0 :::22 :::* LISTEN 1590/sshd当我以前运行$ sudo docker-compose -f production.yml up时,netstat -antp返回以下内容:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1590/sshd
tcp 0 332 XXX.XXX.XXX.XX:22 ZZ.ZZZ.ZZ.ZZZ:49726 ESTABLISHED 16959/0
tcp 0 0 XXX.XXX.XXX.XX:22 AA.AAA.AAA.A:50098 ESTABLISHED 17046/sshd: [accept
tcp 0 0 XXX.XXX.XXX.XX:22 YYY.YY.Y.YYY:55652 SYN_RECV -
tcp 0 0 XXX.XXX.XXX.XX:22 YYY.YY.Y.YYY:16750 SYN_RECV -
tcp 0 0 XXX.XXX.XXX.XX:22 YYY.YY.Y.YYY:31541 SYN_RECV -
tcp 0 1 XXX.XXX.XXX.XX:22 YYY.YY.Y.YYY:57909 FIN_WAIT1 -
tcp6 0 0 :::2376 :::* LISTEN 5120/dockerd
tcp6 0 0 :::22 :::* LISTEN 1590/sshd 发布于 2019-03-30 16:25:05
在我的经验中,水滴是根据需要配置的-django,端口是正确打开的,所以除非您关闭它们,否则您不应该做任何事情。
通常,当发生此错误时,这是由于DNS配置问题造成的。基本上,让我们使用域example.com加密无法到达您的服务器。不幸的是,您并没有给我们您使用的实际域,所以我将尝试猜测。
你说你已经配置了一个A记录来指向你的液滴,这就是你应该做的。但是,这个配置需要在大多数名称服务器上传播,这可能需要时间。它可能是为您传播的,但是如果“让我们加密”使用的名称服务器不是,那么您的TLS证书将失败。
您可以使用在线工具检查它的传播情况,该工具同时检查多个名称服务器,比如https://dnschecker.org/。
在您的机器上,您可以使用dig (对于感兴趣的人,我建议使用这段视频):
# Using your default name server
dig example.com
# Using 1.1.1.1 as name server
dig @1.1.1.1 example.com希望这能有所帮助。
https://stackoverflow.com/questions/55426084
复制相似问题