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

Смотрите также

Чтобы получить представление об использовании django.contrib.staticfiles , прочтите « Обработка статических файлов (например, изображений, JavaScript, CSS)» .

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

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

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

Сайт и статические файлы на одном сервере

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

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

Статические файлы на выделенном сервере

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

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

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

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

Статические файлы в облачном сервисе или CDN

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

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

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

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

STATICFILES_STORAGE = 'myproject.storage.S3Storage'

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

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

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

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

Copyright ©2020 All rights reserved