一つのDrupalコードベースで複数のサイトを構築する方法

一つのコードベースを複数サイトで共有するメリットは、メンテナンスが比較的容易になること。複数のコードベースを使う場合、バグのパッチをあてる際とかに手間が増える。デメリットは、他のサイトに影響を及ぼすモジュールがある、ということ。

作業概要:
Drupalは、設定ファイルを複数設けることによって、1つのインストレーションによる複数サイトの展開を可能にしている。ここでは、1)フォルダ名の付け方  2)データベースの設置 3)設定ファイルの設置・変更方法を説明。Linux + Apache + MySQLを利用していることを前提とする。
また、断りがない限り、コマンドは '/var/www'(公開フォルダ)にいる状態で入力しているものとする。
1. 設定ファイルの場所
設定ファイルの設置場所は、サイトのアドレスに基づく命名ルールに従って決まる。インストール時のデフォルトは

[公開フォルダ]/[drupalフォルダ]/sites/default/settings.php

となっている。命名ルールでは、青の'default'の部分をサイトのアドレスに変更する。

例として以下のようなシチュエーションを仮定する:

この場合、設定ファイルは以下のように格納される

/var/www/drupal/sites/default/settings.php
/var/www/drupal/sites/sub.example.com/settings.php
/var/www/drupal/sites/example.com.yet-another/settings.php

(非公開部分が'/var/www/'であるかは環境によって異なるので適宜読み替えのこと)


2. データベースの設置
これら3つのサイトは、それぞれ異なるDBを利用しているという前提で設定を行う。

   サイト                          DB名            username      password
- example.com                      'drupaldb'      drupaluser    dp
- sub.example.com                  'subdb'         subuser       sp
- example.com/yet-another          'yadb'          yauser        yp

適切なスクリプトを使って各DBにテーブルを作成する(e.g. drupal/database/database.4.1.mysqlなど)。コマンドラインを使う場合は以下のような感じになる。使い慣れてない場合、phpmyadminを使った方が良いかも。

# mysql -u [username] -p drupaldb < drupal/database/database.4.1.mysql
# password: [password]

3. 設定ファイルの設置・変更
drupal/sites/default/settings.phpがオリジナルの設定ファイルになる。これを、それぞれのサイトの設定フォルダにコピーする。

# cp drupal/sites/default/settings.php drupal/sites/sub.example.com/settings.php
# cp drupal/sites/default/settings.php drupal/sites/example.com.yet-another/settings.php

例として、sub.example.com/settings.phpの変更方法を以下に:
88行目あたりにある例を参考に、

$db_url= 'mysql://subuser:sp@sub.example.com/subdb

と記入。メインサイトの設定ファイルはすでに終わっている前提。というか、やり方は上記とまったく一緒。username, password, site address, dbnameを適宜変更。
一部データベースを他のサイトのDBと共有したい場合(同じID+PWで別サイトにアクセスしたい場合など)は、58行目あたりからの説明を読んで、テーブル名のprefixを変更する。ここでは割愛(というか、やってないのでよくわかってません)

最後に、'/var/www'に、デフォルト以外のサイトのリンクを作ってやる。

# ln -s drupal sub
# ln -s drupal yetanother

これで、sub.example.comまたはexample.com/yetanotherにアクセスすると、ちゃんと別サイトとして扱えます。'drupal/modules/'フォルダに入れたモジュール達は、もちろんそれぞれのサイトで使えて、設定も各サイトごと行えます。

参考:How to install Drupal on multiple sites from a single codebase