WordPress – マルチサイト化してみる。

WordPress MU on FreeBSD」でWordPress MUを使用したマルチサイト用の構築をしてみた。

MU自体EOLだし、WordPress自体にはマルチサイト機能がマージされていると言う事なので、WordPressを使用してマルチサイト化してみるメモ。

基本的にWordPressが動くならマルチサイト化は難しい話ではなくて、何時もの流れでWordPressをインストールした後にマルチサイト化の手順を踏めばいいだけ。

今回もすっかり実験君サイト化しているさくらVPS+FreeBSDの環境で試してみる。

注意
さくらVPSでこのような使い方が許可されているかどうかは不明なので、運用する場合はさくらインターネットさんに問い合わせてみる事をお勧めします。

前提

  • WordPress 3.2.1を使用。
  • WordPressの動作する環境。(特にWordPress3.2以降はPHPやMySQLのバージョンに注意)
  • サブドメイン形式で設定する。(Apacheのmod_rewrite必須)

bindの設定

  • さくらVPS上のFreeBSDは「force.pdns.jp」を使用している。
  • WordPressマルチサイト化用に「blog.force.pdns..jp」を使用する(メインサイトが使用)。
  • 新規に作成するblogは「アカウント.force.blog.pdns.jp」を使用する。

を前提に該当ドメインのゾーンファイル(FreeBSD標準なら/etc/namedb/masterにゾーンファイルを置いてあるはず。)に

blog.force.pdns.jp.     IN      A       59.106.187.177
*.blog.force.pdns.jp.   IN      CNAME   blog.force.pdns.jp.

のように追記。肝はワイルドカードをCNAMEとする。これはネームベースのバーチャルホスト設定をしている場合は必須。

シリアルを更新してからkillコマンドなどでリロードさせる。

dns# ps ax | grep named
  572  ??  Is     2:10.55 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/run/log -s
  657  ??  Ss     0:44.50 /usr/sbin/named -t /var/named -u bind
24406   0  DL+    0:00.00 grep named
dns# kill -HUP 657

と言う感じ。後はdigなりnslookupなりで正しく引けるかどうか確認しておく。

dns# nslookup blog.force.pdns.jp
Server:         59.106.187.177
Address:        59.106.187.177#53

Name:   blog.force.pdns.jp
Address: 59.106.187.177

dns# nslookup test.blog.force.pdns.jp
Server:         59.106.187.177
Address:        59.106.187.177#53

test.blog.force.pdns.jp canonical name = blog.force.pdns.jp.
Name:   blog.force.pdns.jp
Address: 59.106.187.177

DNSでは「test.blog.force.pdns.jp」を定義していないけれど、ワイルドカードのおかげで正しく引けている。

実体は「blog.forece.pdns.jp」として認識されるけれど、これをmod_rewrite経由で切り替えるという寸法。

データベースの設定

MySQLにWordPress用のDBを作成する。

insert into mysql.user set user="ユーザ名", password=password("パスワード"), host="localhost";
insert into mysql.user set user="ユーザ名", password=password("パスワード"), host="127.0.0.1";
flush privileges;
create database データベース名 ;
GRANT ALL PRIVILEGES ON データベース名.* TO ユーザ名@localhost IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON データベース名.* TO ユーザ名@127.0.0.1 IDENTIFIED BY 'パスワード';

のようにSQLを実行。

WordPressファイルの導入

Apacheをportsから導入しているのであれば、コンテンツのルートは「/usr/local/www」。

自環境では大抵このディレクトリの下にドメイン名でディレクトリを切ってそこを使用するようにしている。ログなんかも同じ。

なので、下記のようなオペレーションでディレクトリを作成してWordPressのファイル群を展開する。

dns# cd /usr/local/www
dns# mkdir blog.force.pdns.jp
dns# cd blog.force.pdns.jp
dns# mkdir log
dns# fetch http://ja.wordpress.org/wordpress-3.2.1-ja.zip
dns# tar zxvf wordpress-3.2.1-ja.zip

Apacheの設定

同様にportsでApacheを導入しているのであれば、Apacheの設定ファイルは「/usr/local/etc/apache22」の下に存在する。

いつもネームベースのバーチャルホストで設定をするのだけれど、自環境ではバーチャルホスト関連の設定は「httpd-vhosts.conf」に書かずに、「/usr/local/etc/apache22/Includes」の下に「FQDN名.conf」のようにファイルを作成してそこにバーチャルホスト毎の設定を記述している。

これはhttpd.confに

Include etc/apache22/Includes/*.conf

と言う記述がある(末尾辺りにあるはず)おかげで、Apacheの起動時に「/usr/local/etc/apache22/Includes」の下にあるファイル名末尾に「.conf」と付いているファイルも同時に読み込んでくれるためだ。

こうしておけば動作済みのファイルを弄る必要が無くなる。

該当ホストの設定は

<VirtualHost *:80>
    ServerAdmin サーバ管理者のメールアドレス
    DocumentRoot /usr/local/www/blog.force.pdns.jp/wordpress
    ServerName  blog.force.pdns.jp
    ServerAlias *.blog.force.pdns.jp
    UserDir     disabled
    HostNameLookups     ON
    ErrorLog /usr/local/www/blog.force.pdns.jp/log/httpd-error.log
    CustomLog /usr/local/www/blog.force.pdns.jp/log/httpd-access.log combined

    <Directory /usr/local/www/blog.force.pdns.jp/wordpress>
        AllowOverride All
        Allow from all
        Order allow,deny
    </Directory>

</VirtualHost>

とした。

ワイルドカードを「Server Alias」として定義するのを忘れない。あわせて「.htaccess」でmod_rewriteによるアドレス書き換えを設定するので、オーバーライドを許可しておくこと。

設定ファイルの作成が終わったら

dns# /usr/local/etc/rc.d/apache22 restart

を実行してApacheを再起動する。(エラーが出ないか確認)

WordPressの設定 – その1

ここまでの設定でブラウザから該当URLにアクセスすればWordPressの導入が行えるはず。

「設定ファイルを作成する」ボタンをクリック。

「次に進みましょう!」ボタンをクリック。

この画面が表示されたらデータベース設定時のデータベース名・ユーザ名・パスワードを各欄にそれぞれ設定する。データベースのホスト名及びテーブル接頭辞はそのままで構わない。

設定が終わったら「作成する」ボタンをクリック。

「インストールを実行」ボタンをクリック。

必要事項を入力して「WordPressをインストール」ボタンをクリック。

「成功しました!」が表示されればインストールOK。

ログインはせずに(してもいいけれど)このまま次のステップに進む。

WordPressの設定 – その2

WordPressをマルチサイト化するためには、WordPressのファイルを手動で編集する必要がある。

前述の通り、今回WordPressは「/usr/local/www/blog.force.pdns.jp/wordpress」に展開した。この下にある「wp-config.php」をvi等で開き、

define ('WP_ALLOW_MULTISITE', true);

の一文を追記する。これにより、WordPress上のマルチサイト設定が可能となる。

※ファイルの改行がCR+LFなので注意

追記後、ブラウザからログインしてコントロールパネルの左サイドメニューから「ツール」を見てみると

「ネットワークの設定」という項目があるはずだ。ここをクリックすると、

「WordPressサイトのネットワークを作成」という画面が表示されたはずだ。

WordPressでは今回のサブドメイン形式のほかにサブディレクトリ形式でのマルチサイト化も可能だ。この設定は1回限りの設定となるので、サブドメインからサブディレクトリ、或いはその逆で設定しなおすことは出来ない。

個人的にはサブドメイン形式の方がなんとなくサイトのオーナーと言う感じがしてよさげと思うので、サブドメインの方法はここでは触れない。(単にワイルドカードがらみの設定が必要ないだけなので)

どちらを利用するかはサイトの状況や利用する方々とご相談と言う事で。

今回はサブドメイン形式と言う事で「サブドメイン」にチェックが入っている事を確認して「インストール」ボタンをクリックする。

残りの手順が詳しく表示されるので、書いてある通りに作業をするだけ。

今回のケースだと、

dns# cd /usr/local/www/blog.force.pdns.jp/wordpress/wp-content
dns# mkdir blogs.dir
dns# chmod 777 blogs.dir

としてアップロード用のディレクトリを作成。

次に「/usr/local/www/blog.force.pdns.jp/wordpress/wp-config.php」に

define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'blog.force.pdns.jp' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

を追記(「define (‘WP_ALLOW_MULTISITE’, true);」の下でOK)する。

最後に「/usr/local/www/blog.force.pdns.jp/wordpress」の下に下記内容で「.htaccess」ファイルを作成。

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]

この作業終了後、再度WordPressにログインするとマルチサイト化されてるはず。

以降、管理者(マルチサイト化以降はサイトネットワーク管理者)でログインしても、テンプレートやプラグインの導入は出来なくなっている。

サイトやユーザの管理やテンプレート・プラグインの導入を行いたい場合はコントロールパネル右上部にある「ようこそ~」の部分からコンパネを「サイトネットワーク管理者」に切り替える必要がある。

コンパネを「サイトネットワーク管理者」に切り替えると

のような感じになる。

新規Blogの開設

「サイトネットワーク管理者」コンパネの設定で「登録の設定→新規サイトおよびユーザアカウントの登録をどちらも許可する」にチェックを入れてあると、管理者のモデレート無しにサイトの開設が行える。

当然誰でもブログの開設が行えてしまうので、「登録メールアドレスの制限」等を併用する必要がある。

サイト開設後、有効化するための方法を記載した通知が登録したメールアドレスに送られてくる。有効化は2日以内に行わなければ無効となる。

従って、今回なら「force.pdns.jp」を「登録メールアドレスの制限」に設定しておけば、サイトのユーザしかブログを開設できなくなるわけだ。

但し、同一のメールアドレスで複数のブログを開設する事が出来ないため、無効化されるまで同じメールアドレスで登録出来なくなってしまう。この辺はポリシー次第としか言えない。

未ログイン状態で、WordPressのログイン画面にアクセスすると、

通常のログイン画面に「登録」というリンクが追加されている(Twenty-Elevenのようにメニュー等にメタ情報が貼られている場合はそこにも表示される)。ここをクリックすると

のように新規登録画面が表示される。

※キャプチャコードが表示されているのは「SI CAPTCHA Anti-Spam」を導入しているため。

必要な情報を入力して「サインアップ」ボタンをクリックすると、有効化の方法が登録したメールアドレスに送られてくる。

有効化した時点でログインパスワードが表示され、ブログが使用できるようになるわけだ。(ログイン情報として登録したメールアドレスにも送られてくる)

WordPressをマルチサイトしてみて

結局、一つのWordPressを複数の人間で使用するということで、個々でWordPressを導入する場合に比べると自由度は低い。

例えば、プラグインやテンプレートが自由に適用できない(サイトネットワーク管理者のみ可能)など。

テンプレートによっては外観がある程度変更する事が出来るが、オリジナルのテンプレートを使用したい場合はサイトネットワーク管理者に頼む他無い。例えインストールしてもらったとしても他のユーザも使用できてしまうから、オリジナルを使用したい場合は弊害も予想される。

プラグインにしてもマルチサイトを考慮していないプラグインだと、折角導入しても使えないと言うケースもあるようだ。(例えばWassUp辺り)

その他は通常のWordPressと変わりないのでこの辺が何とかなるとすごいなーと思うけれど、じゃあお前がやれとか言われて泣く羽目になったら嫌なので黙っておくことにする(ぉぃ。

ちなみに、今回構築したサンプルサイトを後悔しておきます(メイン新規)。(但し、新規サイト登録は出来ません。)


コメント

タイトルとURLをコピーしました