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