Это немного сложно, потому что вам нужно динамически объявить свой ALLOWED_HOSTS с EB. Эта статья содержит некоторую полезную информацию в Gotcha # 3 о том, как этого достичь
Я бы создал отдельный файл настроек под названием что-то вроде settings_production.py
, тогда вы могли бы поместить туда следующий код:
MySite / settings_production.py
from mysite.settings import *
def is_ec2_linux():
"""Detect if we are running on an EC2 Linux Instance
See http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html
"""
if os.path.isfile("/sys/hypervisor/uuid"):
with open("/sys/hypervisor/uuid") as f:
uuid = f.read()
return uuid.startswith("ec2")
return False
def get_linux_ec2_private_ip():
"""Get the private IP Address of the machine if running on an EC2 linux server"""
from urllib.request import urlopen
if not is_ec2_linux():
return None
try:
response = urlopen('http://169.254.169.254/latest/meta-data/local-ipv4')
return response.read().decode("utf-8")
except:
return None
finally:
if response:
response.close()
# ElasticBeanstalk healthcheck sends requests with host header = internal ip
# So we detect if we are in elastic beanstalk,
# and add the instances private ip address
private_ip = get_linux_ec2_private_ip()
if private_ip:
ALLOWED_HOSTS += [private_ip, 'your-django-env.elasticbeanstalk.com']
# Other production overrides
DEBUG = False
Теперь вы задали для переменной env переменной «DJANGO_SETTINGS_MODULE» значение mysite.production_settings
(т.е. в вашей среде EB).
UPDATE:
Я решил взять это для пробного запуска, и мне удалось его запустить и запустить. Я обнаружил несколько вещей, хотя. Приведенный выше код добавляет внутренний IP-адрес каждого экземпляра к ALLOWED_HOSTS
. Это сделано исключительно для проверки работоспособности, чтобы консоль AWS могла пропинговать экземпляры внутри системы и получать ответ 200OK. Я оставляю вышеупомянутое решение, поскольку оно все еще полезно для этой цели. Это не решит вашу конкретную ошибку, хотя. Для обслуживания вам просто нужно добавить свой адрес электронной почты, вот и все. Вы можете найти его в консоли AWS (выделено красным ниже) или в cli, набрав eb status
и проверив свойство CNAME
.
CONFIG:
Вот мои основные конфигурационные файлы, которые я вручную создал в своем источнике:
.ebextensions / django.config
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: mysite/wsgi.py
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: mysite.settings_production
.ebextensions / дб-migrate.config
container_commands:
01_migrate:
command: "django-admin.py migrate"
leader_only: true
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: mysite.settings_production