Многосайтовая, многоинстансная и многоарендная системы
Эта страница содержит общую информацию о том, как запустить несколько сайтов 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. Вы можете добавить site_id в модель, а затем использовать метод get_queryset админ-интерфейса модели для определения, какой сайт может управлять каждым объектом. Встроенные выбиратели сниппетов можно заменить на modelchooser, который позволяет фильтровать набор запросов, чтобы ограничить сайты, которые могут отображать объекты.
- Управление сайтами, настройками сайтов, пользователями и группами. В настоящее время лучше всего разрешить только суперпользователям управление этими объектами.
- Потоки и задачи потока
- История сайта
- Перенаправления
Настройка разрешений для встроенных моделей, таких как Сайты, Настройки сайта и Пользователи, не является сайту-специфичной, поэтому любой пользователь с правом редактирования одной записи может редактировать их все. Это ограничение можно в основном обойти, разрешая только суперпользователям управлять этими моделями.
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/v2.16.3/advanced_topics/multi_site_multi_instance_multi_tenancy.html