一つのDrupalコードベースで複数のサイトを構築する方法
一つのコードベースを複数サイトで共有するメリットは、メンテナンスが比較的容易になること。複数のコードベースを使う場合、バグのパッチをあてる際とかに手間が増える。デメリットは、他のサイトに影響を及ぼすモジュールがある、ということ。
作業概要:
Drupalは、設定ファイルを複数設けることによって、1つのインストレーションによる複数サイトの展開を可能にしている。ここでは、1)フォルダ名の付け方 2)データベースの設置 3)設定ファイルの設置・変更方法を説明。Linux + Apache + MySQLを利用していることを前提とする。
また、断りがない限り、コマンドは '/var/www'(公開フォルダ)にいる状態で入力しているものとする。
1. 設定ファイルの場所
設定ファイルの設置場所は、サイトのアドレスに基づく命名ルールに従って決まる。インストール時のデフォルトは
となっている。命名ルールでは、青の'default'の部分をサイトのアドレスに変更する。
例として以下のようなシチュエーションを仮定する:
- ドメインが 'example.com'
- ウェブの公開フォルダに'drupal'というフォルダを作って、その中にdrupalのコードを入れ、メインのサイトとしている
- サブドメイン'sub'に新たなサイトを設置する(このサイトのディレクトリは/var/www/sub)
- さらに'example.com/yet-another'にも新たなサイトを設置する
この場合、設定ファイルは以下のように格納される
/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'に、デフォルト以外のサイトのリンクを作ってやる。
これで、sub.example.comまたはexample.com/yetanotherにアクセスすると、ちゃんと別サイトとして扱えます。'drupal/modules/'フォルダに入れたモジュール達は、もちろんそれぞれのサイトで使えて、設定も各サイトごと行えます。
参考:How to install Drupal on multiple sites from a single codebase