Развёртывание статических файлов
См. также
Для введения в использование 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.2/howto/static-files/deployment/