Контейнеры докеров Django и Nginx с ошибкой AWS ECS

#django #terraform #amazon-ecs

#django #terraform #amazon-ecs

Вопрос:

В настоящее время я создаю проект с использованием Terraform и AWS ECS с двумя контейнерами: Django App и Nginx (для размещения статических файлов). В настоящее время он отлично работает; однако я получаю сообщение об ошибке в журналах Nginx (с использованием журналов CloudWatch), в котором говорится,

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

Я знаю, что это связано с РАЗРЕШЕННЫМИ ХОСТАМИ Django, поскольку DEBUG False в settings.py файле установлено значение my, но я чувствую, что все должно работать так, как должно. Вот что у меня settings.py есть для ALLOWED_HOSTS:

ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '').split()

Отсюда у меня есть файл определения задачи с именем container-def.json для выполнения задания в AWS ECS:

 [
  {
    "name": "django-app",
    "image": "${django_docker_image}",
    "cpu": 10,
    "memory": 256,
    "memoryReservation": 128,
    "links": [],
    "essential": true,
    "portMappings": [
      {
        "hostPort": 0,
        "containerPort": 8000,
        "protocol": "tcp"
      }
    ],
    "command": ["gunicorn", "-w", "3", "-b", ":8000", "project.wsgi:application"],
    "environment": [
      {
        "name": "RDS_DB_NAME",
        "value": "${rds_db_name}"
      },
      {
        "name": "RDS_USERNAME",
        "value": "${rds_username}"
      },
      {
        "name": "RDS_PASSWORD",
        "value": "${rds_password}"
      },
      {
        "name": "RDS_PORT",
        "value": "5432"
      },
      {
        "name": "ALLOWED_HOSTS",
        "value": "${allowed_hosts}"
      }
    ],
    "mountPoints": [
      {
        "containerPath": "/usr/src/app/staticfiles",
        "sourceVolume": "static_volume"
      }
    ],
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group" : "/ecs/frontend-container",
        "awslogs-region": "us-east-1"
      }
    }
  },
  {
    "name": "nginx",
    "image": "${ngnix_docker_image}",
    "essential": true,
    "cpu": 10,
    "memory": 128,
    "links": ["django-app"],
    "portMappings": [
      {
        "hostPort": 0,
        "containerPort": 80,
        "protocol": "tcp"
      }
    ],
    "mountPoints": [
      {
        "containerPath": "/usr/src/app/staticfiles",
        "sourceVolume": "static_volume"
      }
    ],
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "/ecs/nginx",
        "awslogs-region": "us-east-1"
      }
    }
  }
]
 

Мой var.tf файл, в котором он содержится, как таковой:

 ####### Input URL of ALLOWED_HOSTS in Django's settings ############
variable "allowed_hosts" {
  description = "Domain name for allowed hosts"
  default     = ".example.org"
}
 

И, наконец, где я вызываю все эти переменные, находится в моем шаблоне данных для Terraform:

 ### Here lies the container-definition.json file to input what each container's parameters
### must have.
data "template_file" "ecs-containers" {
    template = file("container-definitions/container-def.json")

    vars = {
        django_docker_image = var.django_docker_image
        ngnix_docker_image  = var.ngnix_docker_image
        rds_db_name         = var.rds_db_name
        rds_username        = var.rds_username
        rds_password        = var.rds_password
        allowed_hosts       = var.allowed_hosts
    }
}
 

Я был бы признателен за любые отзывы по этому поводу. Я знаю, что ПОЧТИ добрался до решения проблемы. Спасибо всем.

Комментарии:

1. Похоже, что ваша переменная среды ALLOWED_HOSTS пуста, поэтому в settings.py ваших ALLOWED_HOSTS настройках просто пустой список [] . Что вы установили var.allowed_hosts в TF на самом деле? Он должен быть установлен на домен, на котором вы запускаете приложение Django.

2. Спасибо за ответ. Я понимаю, о чем вы говорите. В настоящее время Terraform разговаривает друг с другом о ALLOWED_HOSTS том, где setting.py не распознает ALLOWED_HOSTS . container-def.json Файл должен вызывать ALLOWED_HOSTS переменную, но не распознает ее. Позвольте мне вернуться и проверить это.

3. После просмотра моего кода я все еще не уверен, почему мой домен не работает, когда ввод as .example.org .

4. Под каким URL вы развертываете? Действительно ли это поддомен example.org ?

5. URL-адрес www.roma-nube.org . Вот как у меня это получается.