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

Опубликовано 2012.04.15 в разделе Drupal

Мультисайтинг – это возможность использовать одну сборку 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 ,только при установке сайтов указывается одна БД, но разные префиксы.

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


10 Комментариев

Оставить комментарий

  1. Гость 2014/08/03

    можно ли снять видео по поднобной установке на хостинг? у меня isp панель хостинга и не получилось ничего или хотябы инструкцию как устанавливать на мультисайтовость на хостинг с isp понелью

    Ответить

    1. Админ 2014/08/03

      Да от панели фактически ничего и не зависит. Вам нужно создать в ней домен, так сказать. ISP панель создаст папку на хостинге. Далее скачивайте с drupal.org последнюю версию друпала, разархивируйте и через FTP клиент скопируйте в эту созданную папку. Далее в ISP панели создайте базу данных.
      Потом в браузере набирает имя домена, созданного в ISP панели и всё. ВЫ попадёте на адрес install.php, введите там данные от созданной базы данных и всё. Сайт установится.

      Ответить

  2. Гость 2013/12/08

    Привет, с общими пользователями все ясно, в каждом блоге этот вариант рассматривают. А если нужно их разделить, то как быть?
    Мне например надо, чтобы пользователи на одном сайте зарегились и все. На Остальных сайтах они не нужны.

    Ответить

    1. Админ 2013/12/08

      Тогда таблицу пользователей шарить на все сайты не надо. И там где пользователи не нужны - просто в настройках "Разрешить создание учётных записей только администратору".

      Ответить

  3. Гость 2013/08/13

    Доброго времени суток у меня к Вам такой вопрос!
    Хочу склеить 2 домена какой из вариантов посоветуете использовать и как лучше это реализовать. (Сайты пустые) (только начал изучать Drupal 7 так что не очень разбираюсь в его коде и PHP).
    Заранее спасибо!

    Ответить

    1. Админ 2013/08/13

      Второй способ. А что именно склеить,пользователей?
      Если домены разные, например cars.ru и html.ru - с авторизацией помучаться придётся.
      Если только начали-лучше сразу не заморачиваться с мультисайтингом, его нечасто применяют. Лучше в совершенстве уметь работать с полями и вьюсами, как минимум.

      Ответить

      1. Гость 2013/08/13

        Я хочу склеить 2 домена в 1! Один из них с пузомерками но с нехорошим именем, а другой новый на который я хочу чтобы они перетекли и на нем уже создать сайт.
        Ну я так понял проще установить 2 движка создать отдельные базы данных а потом через 301 редирект и robots.txt склеить 2 домена в 1!
        Или это как то по другому делается? (Извините за глупые вопросы просто первый рас это делаю!)

        Ответить

        1. Админ 2013/08/14

          Если на пузомерках хочешь заработать - не пофиг на имя?
          301м редиректом ты как бы перенесешь вес, да. В пределах одного домена точно.
          А вот на другой домен-незнаю, это уже к сеошникам вопрос.
          С технической стороны: делаешь 2 абсолютно независимых сайта, на некрасивом домене и нормальном. И обычными редиректами(если сеошники одобрят) переносишь вес.

          Ответить

  4. Гость 2012/10/18

    Привет,
    спасибо большое за статью. Но у меня возникла проблема, когда нужно было в браузер вставить site:8080/install.php. Пишет, что не может найти сервер. Можешь подсказать в чем может быть проблема?
    Спасибо
    Катя

    Ответить

    1. Админ 2012/10/20

      А site - папка сайта?
      :8080 - это порт,у меня он был необходим,так как я использовал на компьютере пакет EasyPHP, аналог денвера.
      Если у вас денвер - то порт указывать не нужно, просто site/install.php

      Ответить

Ваш комментарий успешно создан

Ваш комментарий

  • Для выделения кода оберните его в тэги <code> и </code>
  • Отметьте шестерёнку