#django #docker #amazon-elastic-beanstalk #traefik #cookiecutter-django
#django #docker #amazon-elastic-beanstalk #traefik #cookiecutter-django
Вопрос:
Я практикуюсь в развертывании многоконтейнерного приложения с использованием Django Cookiecutter (https://github.com/pydanny/cookiecutter-django ) с TravisCI, Docker, а также с использованием Traefik в качестве маршрутизатора. Я уже успешно развернул свое приложение в приложении EBS (сервис Elastic Beanstalk Service) в AWS с зеленой проверкой работоспособности. Единственная проблема, с которой я в настоящее время сталкиваюсь, заключается в том, что при попытке получить доступ к назначенному мной имени хоста или домену я получаю 502 bad gateway
ошибку. Я подозреваю, что либо в моем traefik.yml
файле, либо в моих сопоставлениях портов в Dockerrunaws.json
файле неправильная конфигурация. Пожалуйста, помогите мне найти ошибку.
Вот конфигурации:
Пожалуйста, обратите внимание, что «myhostname.com «относится к моему фактическому имени хоста dns, а «myusername» относится к моему фактическому имени пользователя docker hub.
Кроме того, я использовал Route 53 для сопоставления моего имени хоста с записью имени A моему экземпляру ELB.
traefik.yml:
log:
level: INFO
entryPoints:
web:
# http
address: ":80"
flower:
address: ":5555"
http:
routers:
web-router:
rule: "Host(`myhostname.com`)"
entryPoints:
- web
middlewares:
- csrf
service: django
flower-router:
rule: "Host(`myhostname.com`)"
entryPoints:
- flower
service: flower
middlewares:
csrf:
# https://docs.traefik.io/master/middlewares/headers/#hostsproxyheaders
# https://docs.djangoproject.com/en/dev/ref/csrf/#ajax
headers:
hostsProxyHeaders: ["X-CSRFToken"]
services:
django:
loadBalancer:
servers:
- url: http://django:5000
flower:
loadBalancer:
servers:
- url: http://flower:5555
providers:
# https://docs.traefik.io/master/providers/file/
file:
filename: /etc/traefik/traefik.yml
watch: true
docker-compose.yml:
version: "3"
volumes:
production_traefik: {}
services:
django: amp;django
build:
context: .
dockerfile: ./compose/production/django/Dockerfile
image: vincegnzls/test-django
command: /start
traefik:
build:
context: .
dockerfile: ./compose/production/traefik/Dockerfile
image: vincegnzls/test-traefik
depends_on:
- django
volumes:
- production_traefik:/etc/traefik/acme
ports:
- "0.0.0.0:80:80"
- "0.0.0.0:443:443"
- "0.0.0.0:5555:5555"
celerybeat:
<<: *django
image: vincegnzls/test-celerybeat
command: /start-celerybeat
flower:
<<: *django
image: vincegnzls/test-flower
command: /start-flower
Dockerrun.aws.json
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"command": [
"/start"
],
"image": "myusername/test-1",
"name": "django",
"memory": 256
},
{
"essential": true,
"image": "myusername/test-2",
"name": "traefik",
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
},
{
"containerPort": 443,
"hostPort": 443
},
{
"containerPort": 5555,
"hostPort": 5555
}
],
"memory": 128
},
{
"command": [
"/start-celerybeat"
],
"image": "myusername/test-3",
"name": "celerybeat",
"memory": 128
},
{
"command": [
"/start-flower"
],
"image": "myusername/test-4",
"name": "flower",
"memory": 128
}
]
}
Traefik Dockerfile
FROM traefik:v2.0
RUN mkdir -p /etc/traefik/acme
RUN touch /etc/traefik/acme/acme.json
RUN chmod 600 /etc/traefik/acme/acme.json
COPY ./compose/production/traefik/traefik.yml /etc/traefik
Соответствующие настройки Django:
ALLOWED_HOSTS=.myhostname.com
DJANGO_SECURE_SSL_REDIRECT=False
Остальные настройки моей среды Django уже находятся в свойствах среды моего ELB.
Комментарии:
1. работает ли оно локально?