Многосайтовость, многоэкземплярность и многоарендатность
Эта страница предоставляет справочную информацию о том, как запустить несколько сайтов Wagtail (с одинаковым исходным кодом).
Многосайтовость
Многосайтовость — это конфигурация проекта Wagtail, в которой авторы контента работают в одном админ-интерфейсе и управляют контентом нескольких веб-сайтов. В некоторой степени возможны разрешения на управление конкретным контентом и ограничение доступа к другому контенту.
Конфигурация многосайтовости представляет собой единую базу кода на одном сервере, подключенную к одной базе данных. Медиафайлы хранятся в одном корневом каталоге. Контент может быть общим для нескольких сайтов.
Wagtail поддерживает многосайтовость из коробки: Wagtail поставляется с site model. Модель сайта содержит имя хоста, порт и поле корневой страницы. При запросе URL запрос поступает, имя домена и порт берутся из объекта запроса для поиска соответствующего объекта сайта. Корневая страница используется в качестве отправной точки для разрешения URL и отображения правильной страницы.
Wagtail также поставляется с настройками сайта. Настройки сайта — это «синглтоны», которые позволяют хранить дополнительную информацию о сайте. Например, настройки социальных сетей, поле для загрузки логотипа или поле выбора темы.
Объекты моделей могут быть связаны с сайтом, поместив поле внешнего ключа в модель, указывающее на объект сайта. Объект запроса может использоваться для поиска текущего сайта. Таким образом, можно отображать контент, относящийся к конкретному сайту.
Пользователи, группы и разрешения могут быть настроены таким образом, чтобы авторы контента могли управлять только страницами, изображениями и документами конкретного сайта. Wagtail может иметь несколько объектов сайта и несколько деревьев страниц. Разрешения могут быть связаны с определенным деревом страниц или его подсекцией. Коллекции используются для категоризации изображений и документов. Доступ к коллекции может быть ограничен пользователями, которые входят в определенную группу.
Некоторым проектам требуется, чтобы редакторы контента имели разрешения на определенные сайты и ограничивали доступ к другим сайтам. Разделение всего контента по сайтам и гарантирование, что контент не «утечет», сложно реализовать в многосайтовом проекте. Если вам нужна полная изоляция контента, многоэкземплярность может быть более подходящим вариантом…
Многоэкземплярность
Многоэкземплярность — это конфигурация проекта Wagtail, в которой один набор файлов проекта используется несколькими веб-сайтами. Каждый веб-сайт имеет свой файл настроек, отдельную базу данных и каталог медиафайлов. Каждый веб-сайт выполняется в собственном процессе сервера. Это гарантирует полную изоляцию всего контента.
Предположим, что домены — a.com и b.com. Файлы настроек могут быть base.py, acom.py, и bcom.py. Базовые настройки будут содержать все настройки как обычно. Содержимое сайту-специфичных настроек переопределяет базовые настройки:
# settings/acom.py from base import * # noqa ALLOWED_HOSTS = ['a.com'] DATABASES["NAME"] = "acom" DATABASES["PASSWORD"] = "password-for-acom" MEDIA_DIR = BASE_DIR / "acom-media"
Каждый сайт может быть запущен со своим файлом настроек. В режиме разработки ./manage.py runserver --settings settings.acom. В производстве, например, с помощью uWSGI, укажите правильные настройки с помощью env = DJANGO_SETTINGS_MODULE=settings.acom.
Поскольку у каждого сайта своя база данных и папка медиафайлов, ничего не может «утечь» на другой сайт. Но это также означает, что контент не может быть общим для сайтов, как это возможно при использовании многосайтовой опции.
В этой конфигурации несколько сайтов используют один и тот же, единый набор файлов проекта. Развертывание будет обновлять единый набор файлов проекта и перезапускать каждый экземпляр.
Эта конфигурация многоэкземплярности не сильно отличается от многократного развертывания кода проекта. Однако, наличие одного набора файлов проекта и различие только в файлах настроек — это максимально близкое к истинной многоарендатности решение, которое может предложить Wagtail. Каждый сайт идентичен, контент изолирован, включая управление пользователями. «Добавление нового арендатора» — это добавление нового файла настроек и запуск нового экземпляра.
В конфигурации многоэкземплярности каждый экземпляр требует определенного количества ресурсов сервера (CPU и памяти). Это означает, что добавление сайтов увеличит нагрузку на сервер. Это масштабируется до определенного момента.
Многоарендатность
Многоарендатность — это конфигурация проекта, в которой один экземпляр программного обеспечения обслуживает нескольких арендаторов. Арендатор — это группа пользователей, имеющих доступ и разрешения к одному сайту. Многоарендаторное программное обеспечение предназначено для предоставления каждой аренде ее конфигурации, данных и управления пользователями.
Wagtail поддерживает многосайтовость, где управление пользователями и контент общие. Wagtail может работать в многоэкземплярном режиме, где происходит полная изоляция контента за счет запуска нескольких экземпляров. Многоарендатность сочетает в себе лучшее из обоих миров: один экземпляр и полная изоляция контента по сайтам и управление пользователями.
Wagtail в настоящее время не поддерживает полную многоарендатность. Но это находится в нашем списке приоритетов, мы хотим улучшить Wagtail, добавив многоарендатность, при этом сохраняя поддержку существующей многосайтовой опции. Если у вас есть идеи или вы хотите внести вклад, присоединяйтесь к нам на Slack в канале многоарендатности.
Wagtail в настоящее время имеет следующие возможности для поддержки многоарендатности:
- Модель сайта, сопоставляющая имя хоста с корневой страницей
-
Разрешения для предоставления группам пользователей управления:
- произвольными секциями дерева страниц
- секциями дерева коллекции (скоро)
- одной или несколькими коллекциями документов и изображений
- API страниц автоматически ограничен хостом, используемым для запроса
Однако несколько функций в настоящее время не поддерживают многоарендатность:
- Сниппеты — это глобальные фрагменты контента, поэтому они не подходят для многоарендатности, но любая модель, которая может быть зарегистрирована в качестве сниппета, также может управляться через Wagtail model admin. Вы можете добавить site_id в модель, а затем использовать метод get_queryset model admin для определения, какой сайт может управлять каждым объектом. Встроенные сниппет-выбиратели можно заменить на modelchooser, который позволяет фильтровать запрос, чтобы ограничить, какие сайты могут отображать объекты.
- Управление сайтом, настройками сайта, пользователями и группами. В настоящее время ваш лучший вариант — разрешить только суперпользователям управлять этими объектами.
- Рабочие процессы и задачи рабочих процессов
- История сайта
- Перенаправления
Конфигурация разрешений для встроенных моделей, таких как Sites, настройки сайта и пользователи, не специфичны для сайта, поэтому любой пользователь с правом редактирования одной записи может редактировать все. Это ограничение можно в основном обойти, разрешив только суперпользователям управлять этими моделями.
Python, Django и Wagtail позволяют переопределять, расширять и настраивать функциональность. Вот несколько идей, которые могут помочь вам создать решение многоарендатности для вашего сайта:
- Django позволяет переопределять шаблоны, это также работает в админ-панели Wagtail.
- Можно использовать пользовательскую модель пользователя для связи пользователей с конкретным сайтом.
- Пользовательские админ-представления могут предоставить более ограниченное управление пользователями.
Мы приветствуем заинтересованных участников сообщества Wagtail, которые захотят внести код и идеи.
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v3.0.3/advanced_topics/multi_site_multi_instance_multi_tenancy.html