Drupalでマルチサイトを構築する

Drupalは汎用性の高いCMSです。マルチサイトの構築も簡単にできます。以下、Windowsのローカル環境のXAMPPでマルチサイトを構築する方法について解説します。

Drupalのマルチサイト機能

CMSはたいていの場合、バージョン管理をする必要があります。アップデートにかかる手間は、多くなればなるほど負担が増えるため、一つで複数のサイトを構築できる機能は重宝します。
単体で構築することのメリットとして、更新などのメンテナンスが一回で済み、非常に楽になることが挙げられます。デメリットにはアップデートに失敗した場合、すべてのサイトに影響が出ることです。

Drupalのサイト管理は、\sites\ディレクトリで行います。モジュール、テーマなどはすべてこのディレクトリに入っています。

構成ディレクトリの探索ルール

default.settings.phpファイルはDrupalによって読み取り専用属性が付加されています。このファイルを編集した後は必ず読み取り専用属性にしてください。書き込み権限を付与したままだとセキュリティ上のリスクがあります。

サイト機能に関する設定ファイルは、以下のルールに基づいて構成ディレクトリの探索を行います。

Webサイトのホスト名を左から右へ読み込み、それを右から左へパス名として取得することで構成ディレクトリの探索を行っています。このうち、最初に見つかった設定ファイルを使用し、以降の探索は行いません。設定ファイルが見つけられない場合は、'sites/default'にあるデフォルト設定ファイルが使用されます。

たとえば次のようなサイトがあったとします。

http://www.example.org/mysite/test/

'settings.php'ファイルは以下のディレクトリから順に探索されます。

  1. sites/www.example.org.mysite.test
  2. sites/example.org.mysite.test
  3. sites/org.mysite.test

  4. sites/www.example.org.mysite
  5. sites/example.org.mysite
  6. sites/org.mysite

  7. sites/www.example.org
  8. sites/example.org
  9. sites/org

  10. sites/default

もし標準ポート番号以外でインストールしている場合は、その番号をホスト名の前につけてください。たとえば次のURLは、sites/8080.www.example.org.mysite.test/としてロードされます。

http://www.example.org:8080/mysite/test/


詳細は'sites/default/default.settings.php'のコメントドキュメントを参照してください。また、マルチサイト機能に関する詳細は次のサイトを参考にしてください。
Multi-site - Sharing the same code base | Drupal 7 guide on Drupal.org
[URL] http://drupal.org/documentation/install/multi-site

マルチサイト用のディレクトリのエイリアス

example.sites.phpは、Drupalでマルチサイトを構成するためのディレクトリ(以下、構成ディレクトリ)のエイリアス(または、別名)を設定するファイルです。

Drupalでは、Webサイトにおけるホスト名とパス名に基づいて、適切な構成ディレクトリを探索します。構成ディレクトリ探索時のルールに関する詳細な説明は、'sites/default/default.settings.php'のコメントドキュメントに記載しています。

このファイルによって、ホスト名とパス名を特定の構成ディレクトリにマップするエイリアスのセットを定義することができます。これらのエイリアスは、構成ディレクトリをスキャンする前にロードされ、通常の探索ルールから除外されます。エイリアスの指定には、$sitesという名前の連想配列で定義します。たとえば次のように記述します。

sites = array(
    'devexample.com'    => 'example.com',
    'localhost.example' => 'example.com',
);

この例では、"example.com"、"devexample.com"、"localhost/example"というリクエストがあった場合、Drupalは"example.com"という名前のサイトの構成ディレクトリを見に行きます。この機能は、開発サーバー上のあるドメイン名が実際のサーバーのドメインと同じではない、といった場合に役に立ちます。Drupalでは、データベース(ファイル、システムテーブル、など)にファイルパスを保存するので、この機能を用いて開発サーバー上でアクセスしている間は、それらのパスが正しいことが保証されます。

このファイルを使用するには、パスとファイル名が'sites/sites.php'になるように、コピーしてリネームしてください。マルチサイト用のディレクトリのエイリアス機能が不要な場合は、このファイルを無視してください。Drupalもこのファイルを無視します。

example.sites.php | Drupal 7.x | Drupal API
[URL] http://api.drupal.org/api/drupal/sites!example.sites.php/7

サブディレクトリで構築してみる

サブドメイン型の構築方法についてはサブドメインで構築してみるをご覧ください。以下、ApacheのAliasディレクティブを用いてサブディレクトリを構築する方法を紹介します。

Apacheの設定ファイルを編集する

Apacheの設定ファイルを変更して、Aliasディレクティブを設定します。どのファイルでも構いませんが、ここではバーチャルホストに関する設定ファイルhttpd-vhosts.confを開きます。XAMPPの場合、C:\xampp\apache\conf\extra\にあります。


<<大きい画像はこちら>>


httpd-vhosts.confファイルを開いたら、末尾に次の文を追記してください。

<<大きい画像はこちら>>

# Alias for all php drupal sites
Alias /sub1 "/xampp/htdocs/drupal"
Alias /sub2 "/xampp/htdocs/drupal"
ディレクトリの作成と設定ファイルのコピー

Drupalのsitesディレクトリにドメイン名のディレクトリを新たに作成します。ここではlocalhost.sub1localhost.sub2を新たに作成しています。

<<大きい画像はこちら>>

defaultディレクトリ内にあるdefault.settings.phpファイルを、先ほど作成したディレクトリにコピーし、settings.phpにリネームしてください。

<<大きい画像はこちら>>

以上でインストールの準備完了です。後はドメインごとにインストールを行ってください。

サブドメインで構築してみる

Windowsのローカル環境でサブドメインを構築するにはApachehttpd.confファイルとWindowsのhostsファイルを編集する必要があります。サブディレクトリ型の構築方法についてはサブディレクトリで構築してみるをご覧ください。

Apacheの設定ファイルを編集する

Apacheの設定ファイルを変更して、バーチャルホスト機能を有効にします。バーチャルホストに関する設定ファイルhttpd-vhosts.confを開いてください。XAMPPの場合、C:\xampp\apache\conf\extra\にあります。このディレクトリにある設定ファイルは、httpd.confを分割した外部ファイルで、Apache起動時にhttpd.confに書かれたIncludeディレクティブによって自動的に読み込まれます。

# Virtual hosts
Include "conf/extra/httpd-vhosts.conf"


<<大きい画像はこちら>>


httpd-vhosts.confファイルを開いたら、末尾に次の文を追記してください。


<<大きい画像はこちら>>

NameVirtualHost *:80

<VirtualHost *:80>
    DocumentRoot "/xampp/htdocs"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/xampp/htdocs/drupal"
    ServerName localhost.localdomain
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/xampp/htdocs/drupal"
    ServerName sub1.localhost.localdomain
</VirtualHost>

バーチャルホストの例 - Apache HTTP サーバ バージョン 2.2
[URL] http://httpd.apache.org/docs/2.2/ja/vhosts/examples.html

Windowsのhostsファイルを編集する

Apacheの設定ファイルに追記したドメイン名とIPアドレスを対応付けます。DNS(Domain Name System)を用いずに名前解決(name resolution)を行うため、hostsファイルを開いて編集します。Windowsの場合はC:\WINDOWS\system32\drivers\etc\にあります。


<<大きい画像はこちら>>


hostsファイルを開いたら、末尾に次の文を追記してください。


<<大きい画像はこちら>>

127.0.0.1       localhost.localdomain
127.0.0.1       sub1.localhost.localdomain
ディレクトリの作成と設定ファイルのコピー

Drupalのsitesディレクトリにドメイン名のディレクトリを新たに作成します。ここではlocalhost.localdomainsub1.localhost.localdomainを新たに作成しています。


<<大きい画像はこちら>>


defaultディレクトリ内にあるdefault.settings.phpファイルを、先ほど作成したディレクトリにコピーし、settings.phpにリネームしてください。


<<大きい画像はこちら>>

以上でインストールの準備完了です。後はドメインごとにインストールを行ってください。

ドメインごとにインストールする

Webブラウザで次のURLにアクセスすれば、インストールが開始されます。後は普通のインストールと同じです。ドメインごとに繰り返し行ってください。インストールに関してはDrupalをインストールするを参考にしてください。

subdirectory
http://localhost/sub1/
http://localhost/sub2/

subdomain
http://localhost.localdomain/
http://sub1.localhost.localdomain/


同一のデータベースを使用する場合は、テーブルの接頭語に何か文字列をつけてください。接頭語をつけておくことでテーブル名がかぶらず、同じデータベースに複数のサイトのデータを入れることができます。


<<大きい画像はこちら>>

おわりに

Drupalでマルチサイトを構築するのはとても簡単だったと思います。また、高い汎用性と拡張性により、自由にサイトを構築することができることがなんとなくわかったと思います。少しでも興味が出たらぜひDrupalを使用してみてください。