Пример Django-приложения для деплоя можно найти на Гитхабе. Также у нас есть туториал с практическим примером развертывания Django-приложения в Apps.
При сборке приложения используется следующая среда:
По умолчанию во время сборки будут выполнены следующие команды:
apt-get install -y python3 python3-pip gunicorn python3-psycopg2 libpq-dev python-dev default-mysql-client python3-dev default-libmysqlclient-dev python3-mysqldb --fix-missing pip3 install psycopg2 django ln /usr/bin/python3 /usr/bin/python -sf ln /usr/bin/pip3 /usr/bin/pip -sf
Если в проекте присутствует файл requirements.txt
, дополнительно будет выполнено:
pip3 install --upgrade -r requirements.txt
Для запуска по умолчанию используется команда:
python3 manage.py runserver 0.0.0.0:8000
Убедитесь, что файл manage.py
находится в корне проекта и используется как точка входа в приложение.
Также вы можете задать переменные. Например, можно задать хосты, с которых Django может получать запросы. Для этого укажите ключ DJANGO_ALLOWED_HOSTS
, а в значении задайте IP-адреса или хостнеймы. Можно указать несколько хостов через запятую, без пробелов. По умолчанию эта переменная принимает значение 127.0.0.1,localhost
.
Для Django-приложений необходимо обязательно указать в настройках DEBUG=True
, иначе статика не будет раздаваться.
Подробнее о настройках можно почитать в документации Django.
Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Вы сможете определить, в какой момент что-то пошло не так.
Зачастую проблемы связаны с командой запуска. Проверьте, что всё в вашей среде разработки работает с gunicorn. Убедитесь, что все модули, необходимые для запуска приложения, присутствуют в файле requirements.txt
.
Проблема возникает в случае, если в файле settings.py
не задано имя хоста.
Данная настройка является мерой безопасности для предотвращения атак с подменой HTTP-заголовка Host (HTTP Host header attacks).
Для устранения проблемы нужно внести изменения в файл settings.py
, указав в директиве ALLOWED_HOSTS
используемый вами домен, например:
ALLOWED_HOSTS = ["your.domain.com"]
Вы также можете разрешить все домены, если не хотите использовать эту меру безопасности:
ALLOWED_HOSTS = ["*"]