我使用cookiecutter-django(使用今天克隆的最新母版)创建了一个简单的网站。在本地运行docker-compose安装程序有效。现在,我想在数字海洋上部署该站点。为此,我运行以下命令:
$ 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
在cookiecutter-django documentation中,我阅读
如果您未使用项目中设置的域名的子域,则在部署网站之前,请记住将暂存/生产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.XXX.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 \“无法检测到\ example.com \域的ACME证书:无法生成域[example.com]的证书:acme:错误->一个或多个域出现问题:\ n [example.com] acme:错误:400 :: urn:ietf:params:acme:error:connection: :获取http://example.com/.well-known/acme-challenge/example-key-here:连接被拒绝,网址:\ n“
很遗憾,我无法找到此问题的解决方案。任何帮助将不胜感激!
当我按照注释中的建议在服务器上运行netstat -antp
时,我得到以下输出(用占位符代替IP):
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
答案 0 :(得分:1)
根据我的经验,Droplet由cookiecutter-django根据需要进行配置,端口已正确打开,因此,除非您将其关闭,否则您无需执行任何操作。
通常,当发生此错误时,是由于DNS配置问题所致。基本上,“让我们加密”无法使用域example.com
访问您的服务器。不幸的是,您没有给我们您所使用的实际域名,所以我将尽力猜测。
您说您已经配置了A记录以指向液滴,这是您应该执行的操作。但是,此配置需要在大多数名称服务器上传播,这可能需要一些时间。它可能会为您传播,但是如果不使用Let's Encrypt使用的名称服务器,则您的TLS证书将失败。
您可以使用在线工具检查其传播情况,该工具可以一次检查多个名称服务器,例如https://dnschecker.org/。
您可以在计算机上使用dig
进行操作(对于有兴趣的人,我建议this video):
# Using your default name server
dig example.com
# Using 1.1.1.1 as name server
dig @1.1.1.1 example.com
希望有帮助。