Drupal のマルチサイト・インストールによるサイトを作成する

単一のコード・ベースと複数のデータベースから複数の Drupal サイトを作成する

Drupal コンテンツ・マネジメント・システムに備わっている重要な機能の 1 つは、このフレームワークの単一のベース・インストールから複数の Web サイトを実行できる、マルチサイト・インストールと呼ばれる機能です。長期的に複数のサイトを管理および保守する必要のある Web 管理者にとって、このようなインストールはとりわけ役に立ちます。マルチサイト・インストールにより、同じサーバー上にある複数の Drupal インストールのすべてを単一のスクリプトで実行できるようになることから、管理が簡素化されるためです。この記事を読んで、複数の Drupal サイトをインストールして構成し、実行、管理する方法を学んでください。

Timi Ogunjobi, Software Engineer and Author, Xceedia Limited

Timi Ogunjobi photoTimi Ogunjobi は、執筆家兼 Web アプリケーション開発者で、Web およびモバイル・アプリケーションを開発するソフトウェア・エンジニアリング会社、Xceedia Limited の CEO を務めています。彼の著書の中には、Drupal を話題にした本も 3 冊あります。



2013年 6月 27日

システム管理者や開発者が、複数のサイトを 1 台のサーバーでホストする方法として、マルチサイト構成を選択するのには多くの理由があります。マルチサイト構成にすることで、例えば以下のようなことが可能になります。

  • 効率的な開発環境を構築することができます。
  • サイトを公開する前に、サイトをステージングしてテストすることができます。
  • 同じサイトでさまざまなソフトウェアを実行することができます。
  • 単一のコード・ベースを複数のサイトで共有することができます。
  • 共有ホスティングを利用することができます。
  • 同じサーバー上で同様のセキュア (HTTPS (HTTP over Secure Sockets Layer)) サイトと標準 (HTTP) サイトを実行することができます。
  • サーバーの管理作業が軽減されます。

ただし、以上の理由のすべてに Drupal のマルチサイト機能で対処するのが最適であるというわけではありません。そこで、この記事では 1 つのストラテジーに焦点を絞ります。それは、Drupal の組み込みマルチサイト・サポートを使用して、1 つの Drupal インスタンスから複数のサイトを作成して提供する方法です。

基本的な考慮事項

Drupal コンテンツ・マネジメント・システム (CMS) を使用してマルチサイト構成を作成することには、いくつかの際立った利点があります。その 1 つは、セットアップおよび保守をするための構成が極めて簡単なことです。また、Drupal はサーバー上の一箇所のみにインストールされることから、データの重複が最小限になるという利点もあります。さらに、Drupal にはマルチサイトの処理を強化するために使用可能なモジュールが豊富に寄与されており、構成内のすべてのサイトに高度な機能を提供することができます。機能が追加されるだけでなく、管理も簡素化されることは、マルチサイト構成をセットアップして管理したいと思っている誰にとっても朗報です。とは言うものの、このような構成を使用することに欠点がないわけではありません。特に明確に述べておかなければならないのは、セキュリティーと共有という 2 つの点です。

マルチサイト・インストールのサイトは、同じコードを共有します。つまり、同じファイルを共有するということです。そのため、あるサイトのサーバーのファイルシステムに対するアクセス権を持っていれば、そのマルチサイト・インストールの他のすべてのサイトに使用されるあらゆるファイルにアクセスすることができます。したがって、マルチサイト構成内の各サイトをそれぞれに異なる担当者が管理しているとしたら、その構成はセキュアとは言えません。サイト間でのセキュリティーが第一に優先される問題である場合、あるいはサイトによって管理者が異なる場合には、Drupal の組み込みマルチサイト機能は最善のソリューションではないでしょう。代わりに、サイトごとに固有の Drupal インスタンスを割り当てることを検討してください。その場合、マルチサイト構成によってもたらされる管理の容易さという利点は失われますが、発生し得るさまざまな事象に対するサイトの保護は強化されます。

もう 1 つの懸念事項である共有は、データベース・アクセスに関する懸念です。Drupal のマルチサイトは同じソース・コードを共有するとは言っても、同じデータベースのデータを共有するわけではありません。そのため、あるサイトのノード、ユーザー、コメントには、デフォルトで他のサイトからアクセスすることはできません。このような振る舞いは、実際には望ましいものであるとみなすことができますが、管理者がすべてのサイトで情報を共有させなければならないような状況では、Drupal のマルチサイト機能の設計が持つ制約事項となるかもしれません。それでも、Drupal の組み込みマルチサイト・サポートには、モジュール、テーマ、そして (ある程度は) アップロードされるファイルでさえも、全サイトで共有できるという優れた点があります。その上、構成内の各サイトに対応する個別のフォルダーに同じファイルやカスタム・ファイルを保持することができます。すべてのコンテンツを共有することが重要である場合は、マルチドメイン機能の使用を検討してください。この機能は、Multiple Domains という名前のモジュールをインストールすることで簡単に使用できるようになります。


マルチサイトで使用するための Drupal をインストールする

Drupal アーカイブをダウンロードした後 (「参考文献」のリンクを参照)、このファイルを解凍し、そこから抽出されたフォルダーを Web サーバーのドキュメント・ルートにコピーします。この作業は、適切な FTP クライアントを使用すれば難しくはありません。サーバーに対して SSH (Secure Shell) アクセスを使用できるとしたら、さらに簡単な作業になります。その場合、wget コマンドを実行してリポジトリーからアーカイブ・ファイルをダウンロードし、それを解凍すると、Drupal インストール・フォルダーが生成されます (ローカルの開発環境を使用しているとしたら、さらにオプションがあることに備えていてください)。このインストール・フォルダーに、/goodsite という名前を付けます。

この演習では 3 つの異なるサイトを作成するため、各サイトに 1 つ、合計 3 つのデータベースが必要です。データベースを作成する作業は、サーバーの Cpanel から phpMyadmin を使用することで簡単に行うことができます。次に、フレームワークをインストールします。ただし、Web ブラウザーを使ってインストーラーを実行するには、その前に以下の 2 つの作業を行う必要があります。

  • Drupal に、実行対象のサイトに関して必要となる情報を提供します。
  • Drupal からすべてのサイトに、サイトに固有の構成データを渡します。

最初の作業を行うには、サイトごとに特殊なディレクトリーを作成します。2 番目の作業では、各ディレクトリーに設定ファイルを配置します。この記事で目的とするのは、2 つのサブサイトを持つ 1 つのマスター・インストールをセットアップすることです。サブサイトのそれぞれがコア・サイトと同じファイルを共有しますが、サブサイトごとに固有の URL とデータベースがあります。これから作成するサイトの URL は、以下のとおりです。

  • マスター・サイト: http://goodsite.com
  • サブサイト 1: http://bettersite.com
  • サブサイト 2: http://bestsite.com

最初のホストをインストールする

Drupal ソース・コードをドキュメント・ルートに配置して、MySQL データベースを作成した後は、最初のサイトとマスター・ドメインのインストールを開始します。

マスター・ドメイン

マスター・ドメインの名前は、メイン・サイトにアクセスするために使用する URL です (この記事の例では、http://goodsite.com となっています)。マスター・ドメインの主な目的は、ベースの Drupal インストールをホストすることです。このドメインをサイトの 1 つとして使用するかどうかに関わらず、サブサイトで障害が発生すると、そのサブサイトの URL はデフォルトでマスター・ドメインに変更されます。したがって、このサイトにサブサイト関連の情報 (連絡先情報など) を格納しておくことが賢明です。

前述したように、メインの Drupal フォルダー内には、各サブサイトに対応したサブフォルダーを作成する必要があります。多くの人が Drupal のマルチサイト・インストールで最も難しい作業だと想像していることは、実は単純なルーチンです。Drupal にホスト対象のサイトを認識させて、これらのサイトのサブフォルダーを /sites フォルダー内に作成するだけの作業です。

Drupal のメイン・ルート・フォルダー内に、/sites という名前のディレクトリーがあります。Drupal を管理した経験があるとしたら、ご存知のとおり、コア以外のすべてのコードはこのフォルダー内に格納されます。デフォルトの Drupal インストールには、/sites フォルダーに 2 つのディレクトリーが含まれています。そのうち、all/ という名前のディレクトリーには、ダウンロードしたテーマとモジュールを格納します。all/ ディレクトリーは、すべてのサイトで共有される情報が配置される場所です。もう 1 つの default/ フォルダーには、構成ファイルの他、コア以外のカスタム・テーマとモジュールを保持します。特に指示されない限り、Drupal は一般にサイトの構成情報を default/ ディレクトリーで検索します。ただし、これらの前提は、汎用の単一ホストのサイトに関するものであり、必ずしもマルチサイト・インストールに適用されるわけではありません。

サブフォルダーとファイルを作成する

マルチサイトの Drupal を構築する際の重要なヒントは、all/ および default/ は別として、他のフォルダーを /sites 内に作成すると、Drupal がそれらのフォルダーに特別な意味を割り当てることです。具体的に言うと、Drupal は /sites フォルダー内にあるその他すべてのディレクトリーは、ホスト名またはホスト名のパターンを表していることを前提にしています。

そのため、すべてのサブサイト用の /sites フォルダーの下に、/goodsite/sites/<sub-site> というパターンでサブフォルダーを作成し、目的の URL をそのサブサイト・フォルダーの名前として設定します。この例では、以下のサブサイトを使用します (図 1 を参照)。

  • サブサイト 1: /goodsite/sites/bettersite
  • サブサイト 2: /goodsite/sites/bestsite
図 1. /sites フォルダー階層
サブサイト・フォルダーの階層を示す画像

サブサイトごとに、以下のステップを実行します。

  1. sites/default 内の default.settings.php ファイルを各サブサイト・フォルダーにコピーして、settings.php という名前に変更します。
  2. CHMOD を使用して、settings.php のパーミッションを 644 に設定します (現在のパーミッションがこのように設定されていない場合)。
  3. Drupal バージョン 6 のインストールの場合、各サブサイト・フォルダー配下に files という名前のフォルダーを作成し、CHMOD を使用してパーミッションを 755 に変更します。

    このフォルダー内に、Drupal はコンテンツを書き込むことができます。通常、書き込まれるコンテンツは、アップロードされたファイル、サムネール画像、集約された CSS (Cascading Style Sheet)、および JavaScript ファイルです。これらのファイルはデータベースにではなくファイルシステムに保管されるため、ファイルを格納するためのディレクトリーを用意しなければなりません。

    Drupal がデフォルトで検索する場所は、各サイトのディレクトリー内にある files/ サブディレクトリーです。デフォルトの Drupal インストールでは、このフォルダーは sites/default/files/ 内にあります。

  4. サブサイトごとに modules という名前のフォルダーを作成します。

    このフォルダーには、サブサイトに固有のモジュールを格納します。すべてのサイトが使用するモジュールについては、sites/all/modules フォルダーに配置します。

  5. サブサイトごとに themes という名前のフォルダーを作成します。

    このフォルダーは、そのサブサイトに固有のテーマを格納する場所です。すべてのサイトが使用するテーマの場合は、sites/all/themes フォルダーに配置します。

これらのサブサイトを同じホスティング会社が管理するわけではない場合には、サブサイトの URL はお使いの Web サーバーの URL にしてください。サイトによって異なるホストを使用する場合には、DNS (Domain Name System) 情報を変更する必要があります (その方法は、登録者とホスティング会社の両方から指示してもらえるはずです)。その作業が終わったら、そのドメインをメインのドメイン (この例では、goodsite.com) の上に「パーク」させる (パーク・ドメインとして追加する) 必要があります。ここからは、いくつかの選択肢があります。難易度の高い選択肢にはシンボリック・リンクの使用を伴います。一方、それよりも遥かに単純な選択肢はパーク・ドメインとして追加することなので、Cpanel で「Parked Domains (パーク・ドメイン)」をクリックしてください。「New Domain Name (新規ドメイン名)」に bettersite.com と bestsite.com を追加した後、「Add Domain (ドメインの追加)」をクリックすればパーク・ドメインが追加されます。


マルチサイトを作成する

ここから先は、いくつかの方法に従うことができますが、今回も一番楽な道を選びましょう。それは、各サブサイトのデータベースに直接、マスター・サイト・インストールで作成したテーブルをロードするという方法です。この方法に従う場合は、マスター・サイト・インストールからデータベース・テーブルのダンプを作成し、それをローカルに保存します。次に、この保存したファイルを phpMyadmin を使ってアップロードするか、コード・エディターを使用してファイルを開きます。後者の方法を使用する場合は、phpMyadmin 内で以下の作業を実行します。

  1. サブサイト用に作成されたデータベースにアクセスします。
  2. SQL にアクセスして、SQL (Structured Query Language (SQL) ダンプからすべてのコードを貼り付けます。
  3. Go (実行)」をクリックします。

上記の手順によって、マスター・サイトのデータベース・テーブルがサブサイトのデータベースに複製されます。

次に、各サブサイトの settings.php ファイルを開いて、以下の行を見つけます。

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

上記のデータベース接続ストリングを変更して、サブサイトのデータベースのパラメーター (ユーザー名、パスワード、ホスト名、データベース名) を反映させます。これで、bettersite.com にアクセスすると標準的な「Welcome to your new Drupal website (新規 Drupal Web サイトにようこそ)」ページが表示されようになるはずです (図 2 を参照)。追加するすべてのサイトに対して、この手順を繰り返してください。

図 2. Drupal での新規 Web サイト
Drupal での新規 Web サイトを示す画像

サブドメインからマルチサイトを作成する

マルチサイトを素早く作成するには、別の方法もあります。それは、最初に Cpanel でマルチサイトの詳細をサブドメインとして設定するという方法です。ただしこの方法では、/goodsite/sites の下にあらかじめ各サイトのフォルダーを作成しておかなければなりません。この場合に使用する命名規則は以下のとおりです (図 3 を参照)。

  • サブサイト 1: /www/goodsite/sites/bettersite.goodsite.com
  • サブサイト 2: /www/goodsite/sites/bestsite.goodsite.com
図 3. サブドメインからマルチサイトを作成する
マルチサイトを作成するために使用するサブドメインを示す画像

サブドメインのフォルダー名は、サブドメインの名前と同じでなければならないことに注意してください。サブドメインのフォルダーごとに、前と同じく default.settings.php のコピーを貼り付け、ファイル名を settings.php に変更してから、CHMOD を実行してアクセス権を 644 に変更します。

次に、Cpanel に戻って以下の 2 つのサブドメインを作成します。

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

シンボリック・リンクとは、別のファイルや別のフォルダーへの参照を、絶対パスまたは相対パスの形で含むファイルのことで、パス名の解決に作用させるために作成します。任意のコード・エディターを使用して 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 にアクセスすると、インストール・ページにリダイレクトされます。

すべてのサイトがインストールされた状態になったので、後は簡単に、Cpanel でリダイレクトを使用してサイト http://bettersite.goodsite.com を URL http://bettersite.com に関連付けることができます。


Ubuntu を実行するローカル・ホストでのマルチサイト

これまではリモートでマルチサイトをホストするための作業を行ってきましたが、Ubuntu 上でマルチサイト・インストールを実行するとなると、少し複雑になってきます。以降のセクションで、マルチサイト・インストールを簡単に構成するための方法を概説します。

新規ホスト用フォルダーを作成する

まずは、以下のコードを使用して、home フォルダー内に 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

使用可能なサイトを編集する

以下のコマンドを使用して、カレント・ディレクトリーを sites-available へ変更し、goodsite.com という名前のファイルを作成します。

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

上記の最初のコマンドはカレント・ディレクトリーを sites-available へ変更し、2 番目のコマンドはデフォルト・ファイルをコピーして、ファイル名を goodsite.com に変更します。3 番目のコマンドは編集用に goodsite.com ファイルを開きます。リスト 1 に記載するコードをファイルに追加してください。

リスト 1. sites-available フォルダー内の新規サイト用ファイルに追加する内容
<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 フォルダー内にサブサイト用の /home/<ご自分の ubuntu ログイン名>/goodsite/sites/bettersite.com フォルダーを作成し、この新規フォルダーに settings.php を追加します。sites/ ディレクトリーにすでにナビゲートしている場合は、以下のコマンドで 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 は、実際には、単一の共有データベース内にインストールされた 1 つの基本 Drupal コードを使用することにより、サイトのグループを容易に実行できるようにする一連のモジュールです。これらのモジュールでは、すべてのサイトがユーザー、コンテンツ、および設定を共有することができます (そのように動作するようにサイトが事前に構成されている場合)。Domain Access モジュールは、Drupal のノード・アクセス・システムを使用して、マルチサイト構成内の各サイトで有効にするコンテンツを設定します。これらのモジュールがユーザー・アクセスを制御する基準は、他のマルチドメイン・モジュールのようにユーザーが属するグループやサイトではありません。ユーザーが表示しているアクティブ・ドメインを基準にユーザー・アクセスを制御します。

Multisite Manager モジュール

Multisite Manager モジュール (「参考文献」のリンクを参照) は、インストール・データベースにアクセスすることなく、基本の Drupal サイトから新しい Drupal サイトを作成することを可能にするモジュールとして寄与されました。デフォルトでは、新規サイトは基本インストールと同じデータベースにインストールされますが、異なる接頭辞が付けられます。現行ユーザーにデータベースを作成するためのアクセス権限がある場合には、ユーザーが作成したデータベースに新規サイトをインストールすることも可能です。


まとめ

この記事では、Drupal を基本 CMS として使用して、マルチサイト構成を作成する方法を説明しました。まずはマスター・サイトをインストールし、そのディレクトリー構造内にサブサイトを配置しました。ホスティング会社が提供する管理機能を使用して、マルチサイト・インストールをリモート・サーバー上で実行する方法や、ローカル・マシン (Ubuntu Linux を実行するコンピューター) 上でマルチサイト・インストールによるサイトを作成する方法も説明しました。さらに、マルチサイト構成とマルチドメイン構成の作成を支援する、2 つの Drupal モジュールについても紹介しました。

参考文献

学ぶために

製品や技術を入手するために

  • Drupal の最新バージョンをダウンロードしてください。
  • Domain Access モジュールについて詳しく学んでください。
  • Multisite Manager モジュールについて詳しく学んでください。
  • IBM 製品の評価版: IBM 製品の評価版をダウンロードするか、あるいは IBM SOA Sandbox のオンライン試用版で、DB2、Lotus、Rational、Tivoli、WebSphere などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。

議論するために

  • developerWorks コミュニティー: ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Web development, Open source
ArticleID=935123
ArticleTitle=Drupal のマルチサイト・インストールによるサイトを作成する
publish-date=06272013