Как развернуть статические файлы
См. также
Для знакомства с использованием 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 — для обработки статических файлов. Этот сервер часто работает с другим типом веб-сервера — более быстрым, но менее функциональным. Некоторые распространённые варианты включают:
Настройка этих серверов выходит за рамки данного документа; ознакомьтесь с документацией каждого сервера для получения инструкций.
Поскольку ваш сервер статических файлов не будет запускать 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.
Была добавлена настройка STORAGES.
Узнать больше
Полные сведения обо всех настройках, командах, тегах шаблонов и других элементах, включённых в django.contrib.staticfiles, см. в справочнике по staticfiles.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/howto/static-files/deployment/