How to deploy static files

См.также

Для ознакомления с использованием django.contrib.staticfiles смотрите How to manage static files (e.g. images, 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.

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

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

Most larger Django sites use a separate web server – i.e., one that’s not also running Django – for serving static files. This server often runs a different type of web server – faster but less full-featured. Some common choices are:

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

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

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

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

Another common tactic is to serve static files from a cloud storage provider like Amazon’s S3 and/or a CDN (content delivery network). This lets you ignore the problems of serving static files and can often make for faster-loading web pages (especially when using a 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.

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

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

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

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