Работа с несколькими базами в CMF Drupal, мультисайтинг

Опубликовано 2012.04.15

Мультисайтинг – это возможность использовать одну сборку Drupal для нескольких сайтов. Например, нужно сделать 5 похожих сайтов на Drupal. Традиционный способ – это иметь 5 экземпляров движка и 5 баз данных. Конечно, иметь несколько копий одних и тех же файлов не рационально. В этом случае можно использовать 1 экземпляр движка общий на все сайты. Это сэкономит место на жестком диске сервера, избавит от необходимости обновлять одни и те же модули на всех пяти сайтах и повысит удобство работы с сайтами в целом.

Варианты мультисайтинга могут быть разными:

  1. Мультисайтинг с общим движком. Много независимых сайтов используют один движок. Drupal будет работать в режиме "один движок, много сайтов".
  2. Мультисайтинг с общими таблицами. Много сайтов частично используют одинаковые таблицы в базе, например, данные о пользователях.
  3. Мультисайтинг с одной базой данных для разных сайтов. Таблицы различаются префиксами.

Для настройки мультисайтинга надо правильно настроить файл settings.php .

Также, если на мультисайтинге работают сайты с доменом третьего уровня (домены первого и второго уровня совпадают, а третий различен), например store.site.ru и blog.site.ru и т.д. – то указав этим сайтам одинаковый домен для кук (.site.ru) и у сайтов будут общие таблицы пользователей – то при авторизации на одном сайте - пользователь будет авторизован и на другом.

Рассмотрим настройку всех способов мультисайтинга.

№1. Одно ядро, 2 разные базы.

Имеем сайты home.ru и game.ru

Скопируем файлы Drupal в папку сайта. Я назвал её m_s_1.

В папке sites создадим папки home.ru и game.ru

Сервер должен быть настроен так, чтобы оба адреса вели на корневую папку сайта, не на папки в sites.

Далее создадим 2 базы-game и home.

Запускаем в браузере установку первого сайта game.ru/install.php .Устанавливаем в базу game.

Префиксы таблиц не используем.

Готово, сайт установлен.

Теперь установим сайт home.ru в базу home.

Сайт успешно установился. Как видите – ядро Drupal используется одно. Причём каждый сайт имеет свои настройки и БД. Все модули и темы в папке sites/all будут доступны обоим сайтам. А в папках sites/home.ru и sites/game.ru только соответствующим сайтам.

№2. Сайты с общими таблицами.

Теперь на основе двух созданных сайтов сделаем сайты с общими пользователями. В таком случае аккаунт, созданный на одном из сайтов – будет работать на всех сайтах в мультисайтинге. Для этого нужно объединить таблицы users, sessions, role и authmap

В таком случае 1 сайт будет основным (в его БД будут таблицы пользователей) и все остальные сайты будут тянуться к БД главного сайта за пользователями.

Пусть сайт home.ru будет основным.

Отредактируем файл sites/game.ru/settings.php

  1. $databases = array (
  2. 'default' =>
  3. 'default' =>
  4. 'database' => 'dr_7',
  5. 'username' => 'root',
  6. 'password' => '',
  7. 'host' => 'localhost',
  8. 'port' => '',
  9. 'driver' => 'mysql',
  10. 'prefix' => array(
  11. 'users' => 'home.',
  12. 'sessions' => 'home.',
  13. 'role' => 'home.',
  14. 'authmap' => 'home.',
  15. ),
  16. ),
  17. ),
  18. );

В элементе prefix мы указали, из какой БД брать таблицы users, sessions, role и authmap. Для этого после home стоит точка.

№3. Несколько сайтов на одной БД.

И последний способ – использование одной БД. Этот способ использовать не рекомендуется из-за разрастания БД. В этом случае также создаются папки sites/home.ru и sites/game.ru ,только при установке сайтов указывается одна БД, но разные префиксы.

Этот случай стоит использовать, если, например хостер не позволяет создать ещё одну БД.