Drupalでマルチサイト

Drupalのシステムを共有して複数のサイトを構築できます。以前から知ってはいたものの事情があって初めてチャレンジしてみたところ、これは便利と分かりました。

難しく考えることはなく、例えばfool-uemachi.comというDrupalサイトを構築します。これに対してサブドメインでsub.fool-uemachi.comというサイトをfool-uemachi.comとDrupal自体を共有してサイト構築するとします。

まず通常通りfool-uemachi.comにDrupalをインストールします。インストールできたらfool-uemachi.com/siteディレクトリにsub.fool-uemachi.comというディレクトリを作成します。この中にfool-uemachi.com/site/defaultディレクトリにあるdefault.setting.phpをコピーしてsetting.phpにリネームします。

また通常のDrupalインストールと同様に、このsetting.phpと同じフォルダ内にfilesディレクトリ、filesディレクトリ内にtmpとlanguagesディレクトリを設置、設置したファイルとディレクトリに書き込み属性(777等)を設定します。

次にsub.fool-umemachi.comディレクトリを同じサーバーのfool-uemachi.comと同じ階層に設置します。(同じ階層である必要は無いかも知れません)ここには何もインストールしません。

ここからがポイントなんですが、UNIXのシンボリックリンクを作成します。つまりsub.fool-uemachi.comにアクセスした場合、fool-uemachi.comを読みに行くという設定を行います。読みに行っても中身はPHPなので、sitesフォルダの読み込み優先順位でsub.fool-uemachi.comのデータベースを読み込んで、出力はfool-uemachi.comとは全然違うものになる、というシカケです。

久々にteratermなんぞをひっぱり出してきてサーバーにSSH接続します。めったにやる作業ではなく、ネット上でコマンドを探しながらの作業です。

ln -s fool-uemachi.com sub.fool-uemachi.com

最初の文字はLの小文字です。これでOK、のはずなんですが、う~ん、うまく行きません。

いろいろ調べてる中で、使っているCoreserverに、ドメインウェブ-同期設定、というのを発見、シンボリックリンク機能を使用して同期させることが明記されており、これでトライしてみます。

同期元にfool-uemachi.com、同期先をsub.fool-uemachi.comとして[同期させる]ボタンをクリック!

これでsub.fool-uemachi.comを開いてみると、やった~、お馴染みのDrupalのインストール画面になります。データベースを別のモノにするか、あるいは同じデータベースでPrefixを変えてインストール、sub.fool-uemachi.comの実体は空っぽですが、サイト構築できました。

この同期機能ですが、設定してから有効になるまで若干時間がかかります。画面では1時間くらいと出てくるものの、そんなには掛かりませんが、10分程度はかかりました。最初teratermでできなかったのも時間の問題だけだったのかも知れません。

これで同じシステムを使いながら、別データベースで別サイトが運営できます。

システムの更新には極めて便利です。あとは一部のテーブルだけが共有、例えばCCKやViewsのテーブルの共有、ができればかなり有効な方法になりそうですが、その辺は、勉強中です(^ ^);