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

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

Основная схема запуска статических файлов в производство состоит из двух шагов: выполнить команду collectstatic при изменении статических файлов, затем организовать перемещение каталога собранных статических файлов (STATIC_ROOT) на сервер статических файлов и их обслуживание. В зависимости от STATICFILES_STORAGE, файлы могут быть перемещены в новое место вручную или об этом может позаботиться метод 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_STORAGE на движок хранения данных.

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

STATICFILES_STORAGE = 'myproject.storage.S3Storage'

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

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

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

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

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