Многосайтовая, многоэкземплярная и многоарендная системы
Эта страница предоставляет справочную информацию о том, как запустить несколько сайтов Wagtail (с одинаковым исходным кодом).
Многосайтовая
Многосайтовая конфигурация Wagtail — это конфигурация проекта Wagtail, в которой авторы контента работают в одном административном интерфейсе и управляют контентом нескольких веб-сайтов. В определенной степени возможны разрешения для управления определённым контентом и ограничение доступа к другому контенту.
Конфигурация многосайтовой системы основана на одном кодовом основании, на одном сервере и подключена к одной базе данных. Медиафайлы хранятся в одном корневом каталоге медиа. Контент может быть общим для разных сайтов.
Wagtail поддерживает многосайтовую конфигурацию «из коробки»: Wagtail поставляется с моделью сайта моделью сайта. Модель сайта содержит имя хоста, порт и поле корневой страницы. При запросе 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 в модель, а затем использовать метод model admin 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/stable/advanced_topics/multi_site_multi_instance_multi_tenancy.html