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

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

Для ознакомления с использованием 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 ©2021 All rights reserved