Как развернуть статические файлы

Обслуживание статических файлов в производстве

Основная схема ввода статических файлов в эксплуатацию состоит из двух шагов: выполнение команды collectstatic при изменении статических файлов, затем организация перемещения собранного каталога статических файлов (STATIC_ROOT) на сервер статических файлов и его обслуживание. В зависимости от псевдонима staticfiles STORAGES файлы, возможно, придется перемещать в новое место вручную или об этом позаботится метод post_process класса Storage.

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

Обслуживание сайта и ваших статических файлов с одного сервера

Если вы хотите обслуживать статические файлы с того же сервера, который уже обслуживает ваш сайт, процесс может выглядеть примерно так:

  • Подключите свой код к серверу развертывания.
  • На сервере запустите collectstatic, чтобы скопировать все статические файлы в STATIC_ROOT.
  • Настройте свой веб-сервер так, чтобы он обслуживал файлы в STATIC_ROOT под URL STATIC_URL. Например, вот how to do this with Apache and mod_wsgi.

Вы, вероятно, захотите автоматизировать этот процесс, особенно если у вас несколько веб-серверов.

Обслуживание статических файлов с выделенного сервера

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

Настройка этих серверов выходит за рамки данного документа; ознакомьтесь с инструкциями в соответствующей документации каждого сервера.

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

  • Когда ваши статические файлы изменятся, запустите collectstatic локально.
  • Переместите локальный STATIC_ROOT на сервер статических файлов в обслуживаемый каталог. rsync является обычным выбором для этого шага, поскольку ему нужно передать только те биты статических файлов, которые изменились.

Обслуживание статических файлов из облачной службы или CDN

Другой распространенной тактикой является предоставление статических файлов из облачного хранилища, такого как Amazon S3 и/или CDN (сеть доставки контента). Это позволяет игнорировать проблемы, связанные с обслуживанием статических файлов, и часто ускоряет загрузку веб-страниц (особенно при использовании CDN).

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

Это можно сделать разными способами, но если у провайдера есть API, то можно использовать custom file storage backend для интеграции CDN с вашим Django-проектом. Если вы написали или используете сторонний пользовательский бэкенд для хранения данных, вы можете указать collectstatic на его использование, задав staticfiles в STORAGES.

Например, если вы написали бэкенд хранилища S3 на myproject.storage.S3Storage, вы можете использовать его с помощью:

STORAGES = {
    # ...
    "staticfiles": {"BACKEND": "myproject.storage.S3Storage"}
}

После этого достаточно выполнить команду collectstatic, и статические файлы будут переданы через ваш пакет хранения на S3. Если в дальнейшем потребуется перейти на другого поставщика услуг хранения, то достаточно будет изменить staticfiles в настройках STORAGES.

Подробнее о том, как написать один из этих бэкендов, смотрите Как написать пользовательский класс хранения. Существуют приложения сторонних разработчиков, которые обеспечивают поддержку многих распространенных API для хранения файлов. Хорошей отправной точкой является overview at djangopackages.org.

Changed in Django 4.2:

Добавлена настройка STORAGES.

Узнать больше

Для получения полной информации обо всех настройках, командах, тегах шаблонов и других элементах, включенных в django.contrib.staticfiles, смотрите the staticfiles reference.

Вернуться на верх