Развёртывание статических файлов
См. также
Для ознакомления с использованием django.contrib.staticfiles, см. Управление статическими файлами (например, изображениями, JavaScript, CSS).
Обслуживание статических файлов в рабочей среде
Основной принцип размещения статических файлов в рабочей среде прост: запустите команду collectstatic при изменении статических файлов, а затем организуйте перемещение каталога собранных статических файлов (STATIC_ROOT) на сервер статических файлов и его обслуживание. В зависимости от STATICFILES_STORAGE, файлы могут потребоваться переместить вручную или метод post_process класса Storage может позаботиться об этом.
Конечно, как и при всех задачах развертывания, детали важны. Каждая конфигурация рабочей среды будет немного отличаться, поэтому вам нужно будет адаптировать основной принцип под свои нужды. Ниже приведены несколько распространённых шаблонов, которые могут помочь.
Обслуживание сайта и статических файлов с одного сервера
Если вы хотите обслуживать статические файлы с того же сервера, который уже обслуживает ваш сайт, процесс может выглядеть примерно так:
- Загрузите свой код на сервер развертывания.
- На сервере выполните
collectstatic, чтобы скопировать все статические файлы вSTATIC_ROOT. - Настройте веб-сервер для обслуживания файлов из
STATIC_ROOTпо адресуSTATIC_URL. Например, вот как это сделать с Apache и mod_wsgi.
Вероятно, вы захотите автоматизировать этот процесс, особенно если у вас несколько веб-серверов.
Обслуживание статических файлов с выделенного сервера
Большинство крупных сайтов на Django используют отдельный веб-сервер (то есть не тот, который также запускает Django) для обслуживания статических файлов. Этот сервер часто работает с другим типом веб-сервера — более быстрым, но менее функциональным. Некоторые распространённые варианты:
Настройка этих серверов выходит за рамки этого документа; для получения инструкций обратитесь к документации каждого сервера.
Поскольку ваш сервер статических файлов не будет запускать Django, вам нужно будет изменить стратегию развертывания примерно так:
- При изменении статических файлов запустите
collectstaticлокально. - Загрузите ваш локальный
STATIC_ROOTна сервер статических файлов в каталог, который обслуживается. rsync — распространённый выбор для этого шага, так как он копирует только изменённые части статических файлов.
Обслуживание статических файлов из облачного сервиса или CDN
Ещё один распространённый приём — обслуживание статических файлов с поставщиком облачного хранилища, например Amazon S3, и/или CDN (сеть доставки контента). Это позволяет вам игнорировать проблемы с обслуживанием статических файлов и часто приводит к более быстрому загрузке веб-страниц (особенно при использовании CDN).
При использовании этих сервисов базовый рабочий процесс будет примерно таким же, как выше, но вместо использования rsync для передачи статических файлов на сервер, вам нужно будет передать статические файлы поставщику хранилища или CDN.
Существует множество способов сделать это, но если у поставщика есть API, настройка пользовательского хранилища файлов сделает процесс невероятно простым. Если вы написали или используете стороннее пользовательское хранилище, вы можете указать collectstatic на использование его, установив STATICFILES_STORAGE на движок хранения.
Например, если вы написали бэкенд хранения S3 в myproject.storage.S3Storage , вы можете использовать его так:
STATICFILES_STORAGE = 'myproject.storage.S3Storage'
После этого вам нужно только запустить collectstatic, и ваши статические файлы будут переданы через ваш пакет хранения в S3. Если вам позже потребуется переключиться на другого поставщика хранения, это может быть так же просто, как изменение настройки STATICFILES_STORAGE.
Подробную информацию о том, как написать один из этих бэкендов, см. в Создание собственной системы хранения. Существуют сторонние приложения, предоставляющие бэкенды хранения для многих распространённых API хранилищ файлов. Хорошей отправной точкой является обзор на djangopackages.org.
Дополнительная информация
Для получения подробной информации обо всех настройках, командах, тегах шаблонов и других элементах, включённых в django.contrib.staticfiles, см. справочник по staticfiles.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/2.0/howto/static-files/deployment/