Приложение Django, запущенное в EBS (сервис Elastic Beanstalk) с использованием Traefik и ошибки Docker: 502 Bad Gateway

#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. работает ли оно локально?