Мультисайтовость в Друпале

Решил установить несколько сайтов под Друпалом в мультисайтовой связке.

Требования:

- единая регистрация (один раз зарегистрировался и больше не надо регится - остальные сайты видят тебя автоматом);

- при регистрации под именем seit1 на основном сайте(my_site.ru)   создаётся "дочерний" сайт типа seit1.my_site.ru;

- соответственно на дочернем сайте тема и документы свои;

Буду описывать, что делал (может кому пригодится):

Первым делом, конечно же почитал информацию на сайте drupal.ru

Что интересного нашёл?

На самом сайте информации много (даже через чур много, для неопытного пользователя можно потеряться), но главное - это ссылки на стать по данной теме, размещённые на других сайтах, а на этом только ответы на некоторые вопросы.

Что за ссылки?

Их много буду рассматривать по ходу прохождения всего процесса установки мультисайтинга.

Первая статья (с уважаемого мною сайта - http://andyceo.ruware.com/blog/labelman/multisaiting-na-drupale-eto-kruto )

Правда написана в 2007 году, а это уже раритет, но для общего понятия начал с неё.

Буду использовать Друпал 6!

Статья оказалась полезной, но не для моего варианта. Больше подходит для объединения нескольких сайтов с общими таблицами пользователей.

Из данной статьи усвоил следующее:

Также у Вас есть файл settings.php, находящийся в подпапке sites/default/settings.php. В нем прописываются все необходимые параметры базы данных, нужные для работы Друпал.

Друпал позволяет для каждой из таблиц задать отдельный префикс.

Возникает понимание, что некоторую информацию сайта1 и сайта2 неплохо бы объединить. Например сделать общих пользователей.

Вот здесь-то и проявляется вся гибкость и мощь Друпала, здесь-то мы и осознаем в полной мере, насколько удобно задавать разным таблицам разные префиксы, и как Друпал умеет работать с разными БД.

Сделать общим можно все! Начиная от пользователей и заканчивая документами (нодами).

Поэтому, после некоторого тестинга, я пришёл к выводу, что объединить без ущерба нарушения целостности БД и психики можно:

  1. Пользователей,
  2. Роли пользователей и права ролей
  3. Профили пользователей
  4. Переводы ядра и модулей
  5. Словари
  6. Термины в словарях
  7. Фильтры сообщений - насчет этого уже не уверен, т.к. таблица filter_formats привязывается к кэшу (поле cash), а таблица filters использует id фильтра из таблицы filter_formats, таким образом, обе таблицы фильтров привязаны к конкретному сайту.

Т.е. вообще все таблицы и модули, в которых нет жёсткой привязки к документам (нодам).

чтобы сделать общих пользователей, нам нужно сделать для сайтов общие таблицы пользователей. Допустим, что у нас уже есть сайт1, и новый сайт сайт2, и мы осознали что неплохо было бы, если пользователь зарегистрировался на каком-либо из этих сайтов, имел бы доступ и к другому.

За пользователей у нас в Друпале отвечают следующие таблицы:

'authmap'
'sessions'
'sequences'
'users'

Таблица users - непосредственно хранит данные пользователя.
Таблица sequences - хранит служебную информацию Друпал. Для каждой таблицы, в sequences сохраняется её имя, и следующее значение первичного ключа. (Если вообще планируете сделать что-то общее для каких-то двух сайтов, таблицу sequences рекомендую делать общей при любом раскладе).
Таблица sessions хранит информацию текущих сессий пользователя.
Таблица authmap я не знаю пока чего хранит.

Помимо вышеперечисленных таблиц, для пользователей существуют роли:

'role'
'users_roles'

При этом в таблице role хранится для каждого сайта информация о ролях пользователей, а в таблице users_roles - информация, какой пользователь к какой группе (роли) принадлежит. Скажу сразу, что если Вы хотите сделать так, чтобы роли для каждого сайта были абсолютно независимы, то Вам не нужно делать общей таблицу role. Таблицу users_roles можно сделать общей, если Вы делаете общих пользователей.

Profile module. Если у Вас включён модуль профилей для пользователей, тогда его таблицы тоже имеет смысл сделать общими:

'profile_fields' - хранит информацию о полях профиля
'profile_values' - хранит информацию поля.

Locale module. Модуль локализации. Одна из удобнейших возможностей - использовать общую таблицу локализации, т.к. переводы всего и вся можно залить один раз и потом просто выбирать из админки нужного сайта.

'locales_meta'
'locales_source'
'locales_target'

BUEditor Module. Это я привел чисто для примера. Любой модуль, не использующий привязку к документам, может быть объединён. Строго говоря, то же верно и для любого модуля, жёстко привязанного к документам, просто в нем надо найти таблицу связей для модуля и документов, и не делать её общей. Для модуля BUEditor таких таблиц нет, поэтому смело объединяем:

'bueditor_buttons'
'bueditor_editors'
Это самое полезное (для меня) из этой статьи. Идём дальше.
Написана ещё раньше (аж в 2006 году).
Что осталось актуальным?
Пошагово расписано присоединения одного сайта к другому (очень интересно, но пока не в тему) и даны ссылки на модули:

Модули, полезные при мультисайтинге

  • Shared Sign-Ons. Позволяет пользователям ограничиться залогиниванием на одном лишь сайте сайте. При переходе внутри мультисайтовой связки другие сайты будут узнавать такого пользователя без дополнительной аутентификации. В марте 2007 г. у этого модуля были проблемы из-за которых он работал устойчиво только при отключенном кэширования сайта.
  • Fierce SSO. Альтернатива Single Sign-On. Позволяет узнавать пользователей, залогинившихся даже с сайтов не на Друпале.
  • Registration role. Этот модуль позволяет назначать пользователям при регистрации заранее заданные роли. Можно на каждом сайте из связки завести отдельную роль, названную по имени сайта и присваивать зарегистрировавшимся пользователям роль, названную именем сайта. Такая информация служит для разделения пользователей по месту их исходной регистрации. Эта информация может быть полезна при выплате коммиссионных за приведенных покупателей. Или когда настанет время "выделить" сайт из связки вместе с пользователями, которые зарегистрировались на этом сайте
  • Multisite Manager. Модуль позволяет плодить сайты на основе центрального сайта
  • Multiple Domains. Позовляет создавать частичные клоны основного сайта. Например, можно вынести работу E-commerce или работу с пользовательскими аккаунтами на отдельный протокол https. Требует модуль single sign-on.
  • Robotstxt позволяет создать отдельный robots.txt для каждого сайта в связке.
Будем разбираться, что за модули и чем они нам будут полезны!
На первый взгляд могут пригодиться Multisite Manager, Multiple Domains и Robotstxt
Тоже не свежая статья, но уже 2007 года.
Всё о том же, что и в предыдущих статьях, объединение двух сайтов. Полезно, но не в данный момент!
Больше статей в интернете по интересующему меня вопросу не нашёл. Если пропуспил - подскажите!
Дальше читаем книги:
1. Leveraging Drupal Getting Your Site Done Right
Про мультисайтинг не слова
2. Learning Drupal 6 Module Development
Тоже ничего
3. Building powerful and robust websites with Drupal 6
И опять ничего
4. Apress.Pro.Drupal.Development.SE.2008
И тут ничего
5. Drupal. Community-Websites entwickeln und verwalten mit dem Open Source-CMS.
Как и следовало ожидать - ничего
С книгами не получилось! Попробуем с видео.
Пожалуй, самое полезное для меня видео - от Влада Савицкого о мультисайтинге в Друпале
Теперь последнее - ищем информацию по мультисайтингу на сайтах. Информации много:
Похожая информация
Немного другое, но про мульсайтовость (может пригодиться)
Ну вот, всё, что можно прочитал теперь пора сделать выводы! А выводы следующие (но не окончательные):
- использовать для выполнения поставленной задачи один из модулей  Multisite ManagerMultisite User ProfileDomain Access , subdomain
Начну с модуля Domain Access (его больше всего советуют)
1. Установил модуль и его перевод
Включил следующие модули:
  • Domain Access
  • Domain Alias
  • Domain Configuration
  • Domain Content
  • Domain Navigation
  • Domain Prefix
  • Domain Source
  • Domain Strict
  • Domain Theme
  • Domain User
3. Настраиваем Права доступа
4. Настраиваем  Affiliated content
Ни первая, ни вторая задачи не выполняются! Разбираемся дальше.
Да, шустро я начал, а инструкцию и не почитал! Читаем и делаем как там написано.
5. По файлу README:
- настроил DNS  указал  *.my_site.ru
6. По файлу INSTALL
- настраиваем settings.php
Добавил:
/* Чтобы сохранялась единая авторизация на всех поддоменах,
 правда не всегда (или не сразу) работает в Opera, в других браузерах нормально. */
$cookie_domain = 'my_domain.ru';  /** * Add the domain module setup routine. */ include './sites/all/modules/domain/settings.inc';
Ещё интересующиеся (интересовавшиеся) на тему мультисайтинга - это по ходу чтоб не забыть:
Ежа - http://ezh-leon.ru/category/razdely-saita/multisaiting
Leonardа - http://www.drupal.by/razdely-sajta/multisajting
VladSavitsky - http://drupalcookbook.ru/multisajting
lenya's - http://www.dserg.com/drupal-questions-2007-07-09.html
Михаила - http://drupal.ru/node/20749
e-style - http://drupal.ru/node/30598
Pozniy - http://www.drupal.ru/node/3925
Dr. Pretenderа - http://www.drupal.ru/node/31036
WiseManа - http://www.drupal.ru/node/20749
Кого пропустил - давайте ссылку!
Сборка ссылок по мультисайтингу:
http://blogroll.pcmag.ru/taxonomy/term/11011
http://www.drupal.ru/node/3925
Полезное на не русском:
http://groups.drupal.org/node/16555
http://groups.drupal.org/multisite
 

Автора автора