Spec-Zone.ru › Django 6.0

Контрольный список развертывания

Интернет — враждебная среда. Перед развертыванием проекта Django уделите время проверке настроек, учитывая требования безопасности, производительности и эксплуатации.

Django включает множество функций безопасности. Некоторые из них встроены и всегда включены. Другие являются необязательными, поскольку подходят не всегда или неудобны при разработке. Например, обязательное использование HTTPS может быть неподходящим для некоторых веб-сайтов и непрактичным при локальной разработке.

Оптимизация производительности — еще одна область, где приходится идти на компромиссы ради удобства. Например, кэширование полезно в рабочей среде, но менее полезно при локальной разработке. Потребности в отчетах об ошибках также существенно различаются.

В приведенный ниже контрольный список входят настройки, которые:

  • должны быть настроены правильно, чтобы Django обеспечивал ожидаемый уровень безопасности;
  • должны различаться в разных средах;
  • включают дополнительные функции безопасности;
  • включают оптимизацию производительности;
  • обеспечивают отправку отчетов об ошибках.

Многие из этих настроек являются конфиденциальными и должны храниться в тайне. Если вы публикуете исходный код проекта, обычно для разработки публикуют подходящие настройки, а для рабочей среды используют закрытый модуль настроек.

Выполните manage.py check --deploy

Некоторые из описанных ниже проверок можно автоматизировать с помощью параметра check --deploy. Обязательно выполните его с файлом настроек рабочей среды, как описано в документации к этому параметру.

Откажитесь от manage.py runserver

Команда runserver не предназначена для рабочей среды. Обязательно перейдите на готовый к работе WSGI- или ASGI-сервер. О нескольких распространенных вариантах см. в разделах WSGI-серверы и ASGI-серверы.

Критически важные настройки

SECRET_KEY

Секретный ключ должен быть длинным случайным значением и храниться в тайне.

Убедитесь, что ключ, используемый в рабочей среде, нигде больше не используется, и не добавляйте его в систему контроля версий. Это уменьшает количество способов, которыми злоумышленник может получить ключ.

Вместо того чтобы жестко задавать секретный ключ в модуле настроек, рассмотрите возможность загрузки его из переменной окружения:

import os

SECRET_KEY = os.environ["SECRET_KEY"]

или из файла:

with open("/etc/secret_key.txt") as f:
    SECRET_KEY = f.read().strip()

При смене секретных ключей можно использовать SECRET_KEY_FALLBACKS:

import os

SECRET_KEY = os.environ["CURRENT_SECRET_KEY"]
SECRET_KEY_FALLBACKS = [
    os.environ["OLD_SECRET_KEY"],
]

Своевременно удаляйте старые секретные ключи из SECRET_KEY_FALLBACKS.

DEBUG

Никогда не включайте режим отладки в рабочей среде.

Во время разработки проекта вы, конечно, используете DEBUG = True, поскольку он включает удобные возможности, например подробные трассировки ошибок в браузере.

Однако в рабочей среде это крайне плохая идея, поскольку таким образом раскрывается множество сведений о проекте: фрагменты исходного кода, локальные переменные, настройки, используемые библиотеки и т. д.

Настройки, зависящие от среды

ALLOWED_HOSTS

Когда DEBUG = False отключен, Django не будет работать без подходящего значения для ALLOWED_HOSTS.

Эта настройка необходима для защиты сайта от некоторых атак CSRF. Если вы используете подстановочный знак, необходимо самостоятельно проверять HTTP-заголовок Host или иным способом убедиться, что вы не уязвимы к этому типу атак.

Также следует настроить веб-сервер перед Django так, чтобы он проверял имя хоста. При запросах с некорректными именами хостов он должен возвращать статическую страницу с ошибкой или игнорировать запросы, а не перенаправлять их в Django. Так вы избежите лишних ошибок в журналах Django (или писем, если у вас настроена отправка отчетов об ошибках). Например, в nginx можно настроить сервер по умолчанию, который будет возвращать «444 No Response» для неизвестного имени хоста:

server {
    listen 80 default_server;
    return 444;
}

CACHES

Если вы используете кэш, параметры подключения в среде разработки и рабочей среде могут различаться. По умолчанию Django использует кэширование в локальной памяти для каждого процесса, что может быть нежелательно.

У серверов кэширования часто слабая аутентификация. Убедитесь, что они принимают подключения только от серверов приложений.

DATABASES

Параметры подключения к базе данных, скорее всего, будут различаться в среде разработки и рабочей среде.

Пароли баз данных — крайне конфиденциальная информация. Защищайте их так же, как SECRET_KEY.

Для обеспечения максимальной безопасности убедитесь, что серверы баз данных принимают подключения только от серверов приложений.

Если вы еще не настроили резервное копирование базы данных, сделайте это прямо сейчас!

EMAIL_BACKEND и связанные настройки

Если ваш сайт отправляет электронные письма, эти значения должны быть настроены правильно.

По умолчанию Django отправляет письма с адресов webmaster@localhost и root@localhost. Однако некоторые почтовые провайдеры отклоняют письма с этих адресов. Чтобы использовать другие адреса отправителя, измените настройки DEFAULT_FROM_EMAIL и SERVER_EMAIL.

STATIC_ROOT и STATIC_URL

Статические файлы автоматически обслуживаются сервером разработки. В рабочей среде необходимо указать каталог STATIC_ROOT, в который команда collectstatic будет копировать эти файлы.

Дополнительную информацию см. в разделе Управление статическими файлами (например, изображениями, JavaScript и CSS).

MEDIA_ROOT и MEDIA_URL

Медиафайлы загружают пользователи. Им нельзя доверять! Убедитесь, что веб-сервер никогда не пытается интерпретировать их. Например, если пользователь загрузит файл .php, веб-сервер не должен его выполнять.

Сейчас самое время проверить стратегию резервного копирования этих файлов.

HTTPS

Любой веб-сайт, на котором пользователи могут входить в систему, должен использовать HTTPS по всему сайту, чтобы избежать передачи токенов доступа в открытом виде. В Django к токенам доступа относятся имя пользователя и пароль, cookie сеанса и токены сброса пароля. (Если вы отправляете токены сброса пароля по электронной почте, защитить их в полной мере невозможно.)

Защиты только чувствительных разделов, например учетной записи пользователя или административного интерфейса, недостаточно, поскольку для HTTP и HTTPS используется один и тот же cookie сеанса. Веб-сервер должен перенаправлять весь трафик HTTP на HTTPS и передавать Django только HTTPS-запросы.

После настройки HTTPS включите следующие параметры.

CSRF_COOKIE_SECURE

Установите значение True, чтобы случайно не передавать cookie CSRF по HTTP.

SESSION_COOKIE_SECURE

Установите значение True, чтобы случайно не передавать cookie сеанса по HTTP.

Оптимизация производительности

При отключении DEBUG = False отключается несколько функций, полезных только при разработке. Кроме того, можно настроить следующие параметры.

Сеансы

Для повышения производительности рассмотрите возможность использования кэшируемых сеансов.

Если вы используете сеансы, хранящиеся в базе данных, регулярно удаляйте старые сеансы, чтобы не хранить ненужные данные.

CONN_MAX_AGE

Включение постоянных подключений к базе данных может заметно повысить скорость, если подключение к базе данных занимает значительную часть времени обработки запроса.

Это особенно полезно на виртуализированных хостах с ограниченной производительностью сети.

TEMPLATES

Включение кэшируемого загрузчика шаблонов часто значительно повышает производительность, поскольку избавляет от необходимости компилировать каждый шаблон при каждом отображении. При включенном DEBUG = False кэшируемый загрузчик шаблонов включается автоматически. Дополнительную информацию см. в разделе django.template.loaders.cached.Loader.

Отчеты об ошибках

К моменту публикации кода в рабочей среде он, будем надеяться, уже достаточно надежен, однако нельзя исключать неожиданные ошибки. К счастью, Django может перехватывать ошибки и уведомлять вас о них.

LOGGING

Проверьте конфигурацию журналирования перед запуском сайта в рабочей среде и убедитесь, что она работает должным образом, как только сайт получит первые запросы.

Подробную информацию о журналировании см. в разделе Журналирование.

ADMINS и MANAGERS

Администраторы из списка ADMINS будут получать уведомления об ошибках 500 по электронной почте.

Менеджеры из списка MANAGERS будут получать уведомления об ошибках 404. Настройка IGNORABLE_404_URLS поможет отфильтровать лишние отчеты.

Подробную информацию об отправке отчетов об ошибках по электронной почте см. в разделе Управление отчетами об ошибках.

Отправка отчетов об ошибках по электронной почте плохо масштабируется

Рассмотрите возможность использования системы мониторинга ошибок, например Sentry, прежде чем ваш почтовый ящик переполнится отчетами. Sentry также может агрегировать журналы.

Настройка стандартных представлений ошибок

Django включает стандартные представления и шаблоны для нескольких кодов ошибок HTTP. При необходимости вы можете переопределить стандартные шаблоны, создав следующие шаблоны в корневом каталоге шаблонов: 404.html, 500.html, 403.html и 400.html. Стандартных представлений ошибок, использующих эти шаблоны, должно быть достаточно для 99% веб-приложений, но вы также можете настроить их.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API