Как исправить ошибку «Отказ в соединении» при вызове сертификата ACME с помощью cookiecutter-django - PullRequest
1 голос
/ 30 марта 2019

Я создал простой веб-сайт, используя 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 Документация Я прочитал

Если вы не используете поддомен доменного имени, заданного в проекте, не забудьте указать свой промежуточный / рабочий 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-Record указывает IP-адрес моей цифровой океанической капли.

С этой настройкой развертывание не работает. Я получаю следующее сообщение об ошибке:

traefik_1 | time = "2019-03-29T21: 32: 20Z" level = error msg = "Не удалось получить сертификат ACME для доменов \" example.com \ ", обнаруженный благодаря правилу \" Host: example.com \ ": невозможно создать сертификат для доменов [example.com]: acme: Error -> У одного или нескольких доменов возникла проблема: \ n [example.com] acme: error: 400 :: urn: ietf: params: acme: error: connection: : Извлечение http://example.com/.well-known/acme-challenge/example-key-here: Соединение отклонено, URL: \ 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  

1 Ответ

1 голос
/ 30 марта 2019

По моему опыту, Droplets настроены так, как это необходимо cookiecutter-django, порты открыты правильно, поэтому, если вы не закрыли их, вам не нужно ничего делать.

Обычно, когда возникает эта ошибкаслучается, это связано с проблемой конфигурации DNS.По сути, Let's Encrypt не смог связаться с вашим сервером, используя домен example.com.К сожалению, вы не даете нам фактический домен, который использовали, поэтому я попытаюсь угадать.

Вы сказали, что настроили запись A для указания на свою каплю, что вам и следуетделать.Однако эту конфигурацию необходимо распространять на большинстве серверов имен, что может занять некоторое время.Он может быть распространен для вас, но если сервер имен, используемый Let's Encrypt, не будет работать, ваш сертификат 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

Надеюсьэто помогает.

...