Развертывание статических файлов

См.также

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

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

Основная схема запуска статических файлов в производство проста: выполните команду 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 сделает этот процесс невероятно простым. Если вы написали или используете сторонний пользовательский бэкенд для хранения данных, вы можете указать 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.

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