Spec-Zone.ru › Django 6.0

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

См. также

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

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

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

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

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

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

  • Отправьте свой код на сервер развертывания.
  • На сервере выполните collectstatic, чтобы скопировать все статические файлы в STATIC_ROOT.
  • Настройте веб-сервер так, чтобы он раздавал файлы из STATIC_ROOT по URL STATIC_URL. Например, вот как это сделать с Apache и mod_wsgi.

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

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

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

  • Nginx
  • Упрощенная версия Apache

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

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

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

Раздача статических файлов из облачного сервиса или CDN

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

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

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

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

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

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

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

Дополнительная информация

Полное описание всех настроек, команд, тегов шаблонов и других компонентов django.contrib.staticfiles см. в справочнике по staticfiles.

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

Spec-Zone.ru

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