Создание многоузловой установки Drupal

Создание нескольких сайтов Drupal с единой базой кода и разными базами данных

Одна важная особенность системы управления информацией Drupal заключается в том, что она позволяет запускать несколько Web-сайтов из одной базовой установки среды – эта функция называется многоузловыми установками (multisite installations). Такие объекты особенно полезны Web-администраторам, которым нужно постоянно управлять и поддерживать несколько сайтов, и упрощают администрирование нескольких установок Drupal, расположенных на одном и том же сервере, так как все они работают по одному и тому же сценарию. В этой статье показано, как установить, настроить, запускать и администрировать многоузловые установки Drupal.

Тим Огунжоби, инженер-программист и технический писатель, Xceedia Limited

Фотография Тима ОгунжобиТим Огунжоби (Timi Ogunjobi) – технический писатель и разработчик Web-приложений. Генеральный директор компании Xceedia, специализирующейся на разработке Web- и мобильных приложений. Автор нескольких книг, три из которых посвящены Drupal. Электронный адрес: timi@xceedia.co.uk.



02.08.2013

Существует множество причин, по которым системный администратор или разработчик может предпочесть размещение нескольких узлов на одном и том же сервере в виде многоузловой конфигурации. Например, такая конфигурация:

  • позволяет создать эффективную среду разработки;
  • обеспечивает возможность создания и тестирования сайта до его публикации;
  • позволяет выполнять разное ПО на одном и том же сайте;
  • допускает совместное использование одной и той же базы кода на нескольких сайтах;
  • упрощает виртуальный хостинг;
  • позволяет исполнять на одном и том же сервере аналогичные защищенные (HTTP поверх Secure Sockets Layer [HTTPS]) и стандартные (HTTP) сайты;
  • облегчает администрирование сервера.

Однако не все из эти задачи лучше всего решать с помощью многоузловой установки Drupal. В этой статье рассматривается только одна стратегия: как использовать встроенную многоузловую поддержку Drupal для создания и обслуживания нескольких сайтов из одного экземпляра Drupal.

Основные соображения

Использование системы управления информацией (Content Management System - CMS) Drupal для создания многоузловой конфигурации дает несколько преимуществ, одно из которых ― предельное упрощение настройки и поддержки. Другое преимущество заключается в том, что дублирование данных сводится к минимуму, поскольку Drupal устанавливается только в одном месте на сервере. Наконец, в Drupal есть множество вспомогательных модулей, которые можно использовать для упрощения управления несколькими сайтами, применяя расширенные возможности ко всем сайтам установки одновременно. Сочетание дополнительных функций с упрощенным администрированием ― благо для всех, кому приходится настраивать и администрировать многоузловые установки. Тем не менее, у такой конфигурации есть несколько недостатков, два из которых заслуживают особого упоминания: безопасность и обобщение.

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

Вторая проблема — обобщение — связана с доступом к базе данных. Многоузловые установки Drupal разделяют один и тот же исходный код, но не одну и ту же базу данных. Так что узлы, пользователи и комментарии на одном сайте по умолчанию недоступны с других сайтов. Это можно рассматривать и как благо, но в тех ситуациях, когда администратору может потребоваться, чтобы все сайты разделяли одну и ту же информацию, это может оказаться препятствием при проектировании многоузловой установки Drupal. Тем не менее, ярким пятном встроенной многоузловой поддержки Drupal является то, что модули, темы и даже в некоторой степени загруженные файлы можно сделать общими для всех сайтов. Кроме того, одинаковые или специальные файлы можно сохранять в разных папках, соответствующих разным сайтам конфигурации. Если важно, чтобы вся информация была общей, рекомендуется использовать функцию многодоменной (multidomain) поддержки, которая легко обеспечивается модулем с таким же именем.


Установка многоузловой конфигурации Drupal

После загрузки архива Drupal (см. раздел Ресурсы) распакуйте файл и скопируйте полученную папку в корневой каталог документов своего Web-сервера. Это нетрудно сделать с помощью подходящего FTP-клиента; а при наличии доступа Secure Shell (SSH) к серверу задача упрощается еще больше. Достаточно выполнить команду wget, чтобы загрузить файл архива из хранилища и распаковать его, получив папку установки Drupal. (Для локальной среды разработки возможны дополнительные варианты: см. ниже.) Назовите папку установки /goodsite.

Для этого примера мы создадим три разных сайта; таким образом, потребуются три разных базы данных — по одной для каждого сайта. Эта задача легко решается с помощью функции phpMyadmin панели Cpanel сервера. Затем установите среду. Однако перед использованием Web-браузера для запуска программы установки нужно решить две задачи:

  • предоставить Drupal необходимую информацию о сайтах, которые вы собираетесь запускать;
  • передать данные о конфигурации сайтов из Drupal во все сайты.

Для решения первой задачи создадим специальный каталог для каждого сайта. Затем поместим в каждый каталог файл параметров. Цель заключается в том, чтобы создать одну основную установку с двумя подузлами. Каждый подузел разделяет общие файлы с основным узлом, но имеет свой собственный URL-адрес и отдельную базу данных. Вот URL-адреса создаваемых сайтов:

  • основной сайт: http://goodsite.com;
  • подузел 1: http://bettersite.com;
  • подузел 2: http://bestsite.com.

Установка первого узла

После размещения исходного кода Drupal в корневом каталоге документов и создания баз данных MySQL приступаем к установке первого сайта и главного домена.

Главный домен

Именем главного домена будет URL-адрес, через который доступен основной сайт (в этой статье: http://goodsite.com). Основная задача главного домена ― размещение базовой установки Drupal. Независимо от того, используется ли этот домен в качестве одного из ваших сайтов, в случае отказа любых дочерних узлов их URL-адреса будут по умолчанию присвоены главному домену; таким образом, полезно, чтобы этот сайт содержал информацию, относящуюся к дочерним сайтам, такую как контактные данные.

Как уже упоминалось, для каждого подузла в основной папке Drupal нужно создать подпапку. То, что многие считают самой сложной задачей в многоузловой установке Drupal, на самом деле решается очень просто: укажите Drupal, какие сайты вы хотите разместить, и просто создайте для этих сайтов вложенные папки в папке /sites.

Главная корневая папка Drupal ― это каталог с именем /sites. Те, кто уже администрировал Drupal, знает, что весь некорневой код должен находиться в этой папке. В установке Drupal по умолчанию папка /sites содержит два каталога. В первом, all/, размещаются загруженные темы и модули. Каталог all/ ― это хранилище информации, общей для всех сайтов. Вторая папка, default/, содержит файлы конфигурации, а также неосновные и специальные темы и модули. Обычно, если не указано иное, Drupal ищет сведения о конфигурации сайта в каталоге default/. Заметим, однако, что это предположение для обычного, одноузлового сайта — для многоузловой установки оно может не соблюдаться.

Создание подпапок и файлов

Важной подсказкой для построения многоузловой конфигурации Drupal служит то, что помимо папок all/ и default/ можно создавать другие подпапки /sites, и Drupal присвоит им особое значение. Конкретнее, Drupal предполагает, что все другие каталоги, расположенные в папке /sites, представляют собой имя хоста или шаблон имени хоста.

Вы создаете вложенную папку в шаблоне /goodsite/sites/<sub-site> в папке /sites для всех подсайтов, подставляя вместо имени каждой папки подсайта свой предполагаемый URL. Дочерние сайты для этого примера показаны на рисунке 1.

  • Sub-site1: /goodsite/sites/bettersite
  • Sub-site2: /goodsite/sites/bestsite
Рисунок 1. Иерархия папок /sites
Иерархия папок дочерних сайтов

Для каждого дочернего узла выполните следующие действия:

  1. Скопируйте файл default.settings.php из каталога sites/default в каждый подкаталог и переименуйте его в settings.php.
  2. С помощью команды CHMOD установите код допуска settings.php равным 644, если это не текущее значение кода допуска.
  3. Для установки Drupal версии 6 создайте папку с именем files для каждого сайта и с помощью CHMOD измените код допуска на 755.

    Это папка, в которую Drupal может записывать информацию — как правило, загружены файлы, эскизы изображений, агрегированные каскадные таблицы стилей (CSS) и файлы JavaScript. Эти файлы хранятся не в базе данных, а, скорее, в файловой системе, так что нужно иметь каталог, в котором они могут размещаться.

    По умолчанию Drupal просматривает подкаталог с именем files/ в каталоге каждого сайта. В установке Drupal по умолчанию это папка sites/default/files/.

  4. Для каждого подсайта создайте папку modules.

    Это папка, в которой находятся все модули, специфические для этого подсайта. Любые модули, которые будут использоваться всеми сайтами, должны находиться в папке sites/all/modules.

  5. Для каждого подсайта создайте папку themes.

    Здесь размещаются темы, уникальные для данного подсайта. Любые темы, которые будут использовать все сайты, должны размещаться в папке sites/all/themes.

Теперь укажите URL-адреса дочерних сайтов на Web-сервере, если они не находятся в ведении одной и той же хостинговой компании. Если для разных сайтов используются разные хосты, нужно изменить информацию системы доменных имен (DNS ― как это сделать, подскажут регистраторы и хостинговые компании). После этого нужно «припарковать» этот домен поверх своего основного домена — в данном случае, goodsite.com. Теперь у вас есть несколько альтернатив, наиболее трудная из которых предполагает использование так называемой символической ссылки (symlink). Однако парковка намного проще; так что выберите в Cpanel пункт Parked Domains. Добавьте bettersite.com и bestsite.com в поле New Domain Name (Новое доменное имя), затем нажмите кнопку (Добавить домен).


Создание мультисайтов

Есть несколько способов двигаться дальше, но опять же, мы выберем самый простой: непосредственную загрузку в каждый дочерний узел базы данных с таблицами, созданными в процессе установки главного сайта. Для этого необходимо создать дамп таблицы базы данных из установки главного сайта и сохранить его локально. Затем ― либо загрузить этот файл с помощью phpMyadmin, либо открыть его в редакторе. Чтобы использовать второй вариант, выполните в phpMyadmin следующие действия:

  1. Перейдите в базу данных, созданную для подсайта.
  2. Перейдите в SQL и вставьте туда весь код из дампа структурированного языка запросов (SQL).
  3. Нажмите кнопку Go.

Эта процедура воспроизводит таблицы базы данных главного сайта в базе данных подсайта.

Далее, для каждого дочернего узла откройте файл settings.php и найдите следующую строку:

$db_url = 'mysql://username:password@localhost/databasename';

Измените эту строку подключения к базе данных с учетом параметров базы данных подсайта (имя пользователя, пароль, имя хоста, имя базы данных). Теперь, если зайти на bettersite.com, вы должны получить стандартную страницу "Welcome to your new Drupal website" (Добро пожаловать на ваш новый сайт Drupal), как показано на рисунке 2. Повторите эти действия для всех дополнительных сайтов.

Рисунок 2. Ваш новый Web-сайт в Drupal
Изображение нового Web-сайта в Drupal

Создание мультисайтов из субдоменов

Есть еще один способ быстрого создания мультисайтов с их предварительным описанием в качестве поддоменов в Cpanel. При этом методе, однако, необходимо сначала создать папки для каждого сайта в каталоге /goodsite/sites, но на этот раз ― с использованием следующего соглашения (см. Рисунок 3):

  • Sub-site1: /www/goodsite/sites/ bettersite.com;
  • Sub-site2: /www/goodsite/sites/ bestsite.com
Рисунок 3. Создание мультисайтов из субдоменов
Создание мультисайтов из субдоменов

Обратите внимание, что в папки субдоменов должны иметь те же имена, что и сами субдомены. Как и прежде, поместите в каждую папку субдомена копию файла default.settings.php, измените имя файла на settings.php и подайте команду CHMOD, чтобы изменить код допуска на 644.

Теперь возвратитесь в Cpanel и создайте два поддомена:

  • bettersite.goodsite.com
  • bestsite.goodsite.com

Символическая ссылка (symlink) — это файл, содержащий ссылку на другой файл или папку в виде абсолютного или относительного пути, который способствует разрешению имен пути. С помощью любого редактора кода создайте файл symlink.php и добавьте код, аналогичный следующему:

<?php
symlink( '/home/Cpanel_User_Name/public_html/', 'sub-domain' );
?>

В данном случае файл будет выглядеть примерно так:

<?php
symlink('/home/myuserdirectory/goodsite/','bettersite');
symlink('/home/myuserdirectory/goodsite/','bestsite');
?>

Поместите эту символическую ссылку в основной каталог главного сайта и запустите ее из URL-адреса http://goodsite.com/symlink.php. Если синтаксис кода правильный, вы должны увидеть пустую страницу; в противном случае будет выведено сообщение об ошибке. Настройте код этого файла так, чтобы он работал правильно.

Настройка .htaccess

Теперь откройте файл .htaccess в любом редакторе кода. Найдите следующую строку:

 # RewriteBase/

Удалите знак "решетка" (#) и добавьте следующую строку, а затем сохраните изменения:

RedirectMatch 301 ^/sub-domain/(.*)$
http://sub-domain.yoursite.com $1

Вот как в результате должен выглядеть файл .htaccess:

RewriteBase / RedirectMatch 301 ^/bettersite/(.*)$
http://bettersite.goodsite.com/$1 RedirectMatch 301
^/bestsite/(.*)$http://bestsite.goodsite.com/$1

Эта переадресация позволяет перенаправить http://goodsite.com/bettersite и http://bettersite.goodsite.com на один и тот же сайт. Если все сделано правильно, то при обращении по URL-адресам подсайтов http://bettersite.goodsite.com и http://bestsite.goodsite.com вы будете переадресовываться на страницу установки.

Когда все сайты установлены, с сайтом http://bettersite.goodsite.com легко связаться из Cpanel с помощью переадресации по URL-адресу http://bettersite.com.


Мультисайт на локальном хосте Ubuntu

Выполнить многоузловую установку на Ubuntu немного сложнее, чем то, что мы уже проделали для удаленного хостинга. Такую многоузловую установку легко настроить с помощью метода, описанного в следующих разделах.

Создание новой папки хостов

Сначала необходимо создать папку goodsite в своей домашней папке, используя следующий код:

>> filesystem/home/<your ubuntu login name>/

Результат должен выглядеть так: -> /home/<your ubuntu login name>/goodsite.

Теперь скопируйте в эту папку все свои файлы Drupal.

Редактирование файла hosts

Отредактируйте файл hosts, открыв окно терминала с помощью следующей команды:

sudo gedit /etc/hosts'

Затем можно добавить любое имя сайта в формате 127.0.0.1 mysite.com. Для данного примера добавьте следующие строки:

127.0.0.1 goodsite.com
127.0.0.1 bettersite.com
127.0.0.1 bestsite.com

Редактирование имеющихся сайтов

Теперь перейдите в папку имеющихся сайтов и создайте файл названием goodsite.com с помощью следующих команд:

cd /etc/apache2/sites-available
sudo cp default goodsite.com
sudo gedit goodsite.com

Первая команда выполняет переход в папку доступных сайтов; вторая копирует файл по умолчанию и переименовывает его в goodsite.com. Третья команда открывает файл goodsite.com для редактирования. Добавьте в файл код, приведенный в листинге 1.

Листинг 1. Добавление нового сайта в папку существующих сайтов
<VirtualHost *:80>
ServerAdmin webmaster@localhost 
ServerName goodsite.com               
DocumentRoot /home/<your ubuntu login name>/goodsite

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

Сохраните goodsite.com, включите его и перезагрузите Apache с помощью следующих команд:

sudo a2ensite mysite.com
sudo /etc/init.d/apache2 reload

Создание папок дочерних сайтов

Создайте свой подсайт в папке /sites folder /home/[ваш логин ubuntu]/goodsite/sites/bettersite.com, а затем добавьте в новую папку файл settings.php. Если вы уже перешли в sites/ directory, скопируйте файл settings.php с помощью следующей команды:

$ cp default/default.settings.php bettersite.com/settings.php 
$ chmod 777 bettersite.com/settings.php

Запуск установки подсайта

Откройте браузер и наберите: http://bettersite.com. Вы должны увидеть страницу настройки установки. Вновь сделайте файл settings.php доступным только для чтения во избежание сообщений безопасности, затем выполните установку подсайта.

Далее, создайте папку сайта и выполните установку bestsite.com, а также любых других подсайтов, указанных в конфигурации хостов.


Многоузловые модули

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

Модули Domain Access

Модули Domain Access (см. раздел Ресурсы) позволяют создать мультисайт, используя единую базу кода, общую базу данных пользователей и общий вход, но разные информационные базы данных. Такая конфигурация отличается от того, что мы сделали в этой статье. Domain Access ― это на самом деле набор модулей, которые облегчают управление группой сайтов с использованием единого базового кода Drupal, установленного внутри единой общей базы данных. Эти модули позволяют всем сайтам разделять пользователей, контент и параметры, если они уже настроены на такую работу. Чтобы определить, какая информация должна отображаться на каждом сайте в многоузловой среде, модули Domain Access используют систему Drupal Node Access System. В отличие от других многодоменных модулей, эти модули также контролируют доступ пользователей на основе активного домена, который просматривает пользователь, а не на основе группы или сайта, к которым этот пользователь принадлежит.

Модуль Multisite Manager

Multisite Manager (см. раздел Ресурсы) — это вспомогательный модуль, который позволяет создавать новые сайты Drupal из базового сайта - без необходимости обращаться к базе данных установки. По умолчанию новый сайт устанавливается в той же базе данных, что и основная установка, но с другим префиксом. В противном случае, если у текущего пользователя есть права на создание базы данных, установку можно выполнить в этой базе данных.


Заключение

Эта статья учит созданию многоузловой конфигурации с помощью Drupal в качестве базовой CMS. Мы установили главный сайт и в его структуре каталогов расположили подсайты. Читатель узнал, как выполнять многоузловые установки на удаленном сервере с помощью средств администрирования, предоставляемых хостинговой компанией. Он также узнал, как создать многоузловую установку на локальном компьютере — в частности, на компьютере под управлением Ubuntu Linux ®. Эта статья также знакомит читателя с двумя модулями Drupal, которые помогают создавать многоузловые и многодоменные конфигурации.

Ресурсы

Научиться

Получить продукты и технологии

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Web-архитектура, Open source
ArticleID=939662
ArticleTitle=Создание многоузловой установки Drupal
publish-date=08022013