#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 . Вот как у меня это получается.