VCCWでサブドメインのマルチサイトを作る方法

wordpressをマルチサイト化するに至った経緯

以前、いくつかのwordpressサイト1つ1つにサブドメインを作ってdocumentrootを割り当ててwordpressを入れてみたいなことをしていました。
そして、ブログ熱に冷めて、1年程サイトを放置していました。
そして久々サイトを更新しようと思いアクセスしたところ、別のサイトが表示されてしまっていました。
どうやら、ドメインのお金を払うのを忘れていて、そのドメインをどっかの業者に買い取られていました。
その業者がドメインを売りに出して居ましたが、胡散臭いので買い戻すことはせず新しくドメインを作り直しました。
SEO的にも強くなっていたドメインだったのでもったいなかったですが…

ドメインを取得し直して借りていたレンタルサーバーに当てなおそうと思ったら、レンタルサーバーもお金を払うのを忘れていて閉じられて居ました。
今まで頑張って作ったサイトとかブログ記事がなくなってしまいました。
ただ、かろうじて作り途中みたいなwordpressのテーマと古めのDBのバックアップが残って居ました。
DBに入っていた記事を見ると、懐かしくなってきて復活させてあげたく思いました。
そこで新しくwordpressを設置してそこに入っていいた記事だけでも復活させようと思いました。
しかしそこには複数のブログがありました。
なので管理が大変なので1つのwordpressで運用したいと思いました。
そこで調べていたところwordpressにマルチサイトという機能があることを知り、使ってみることにしました。

長くなりましたが、悔しかったので経緯を書かせていただきました。

wordpressをマルチサイト化するメリット

  • 一つのwordpressアカウントで複数のサイトの管理画面に入れる。
  • wordpressのサイト1つ1つにプラグインを入れる必要がない。
  • ソースコードがすごい減る。
  • 1つのDB、または1つの接頭辞で良くなる。

デメリットは今のところ、学習コストが少しかかる程度です。

VCCWでサブドメインのマルチサイトを作る方法

今回は、VCCWを使ってサブドメインを使ったwordperssマルチサイト化の方法を説明します。

VCCWを使わないWordPressのマルチサイト化は以下のサイトを見れば分かります。
* 複数サイト運用方法(サブディレクトリ型)
* 複数サイト運用方法(複数ドメイン型)
* 複数サイト運用方法(サブドメイン型)←今回はコレ

ローカルに構築

VCCWの使い方は分かっているものとして話を進めます。

まずVCCWのplaybook(今回はsite.yml)のmultisite:の箇所をtrueにします。

multisite: true

それ以外のsite.ymlとvagrantfileの完了していると仮定します。

vagrant upで立ち上げます。

設定しているurlにアクセスして、管理画面にログインすると、サイトネットワーク管理の管理画面が表示されているかと思います。
そしたら「設定」の「ネットワークの設定」をクリックします。

/var/www/html/ にある wp-config.php ファイルと
/var/www/html/ にある .htaccessのファイルを編集します。

「ネットワークの設定」に記載されている内容を各、コピーするだけで良いのですが、
VCCWで’multisite: true’にしていればwp-config.phpの記述はすでにあると思います。
もしない記載があれば追加してあげればいいと思います。
ちなみに
define( 'SUBDOMAIN_INSTALL', true );をtrueにするとサブドメイン型になってfalseにするとサブディレクトリ型になります。
ただVCCWではサブドメイン型非推奨っぽいです。

.htaccessはまるっと上書きして問題無いと思います。

hostsにサブドメインを追加します。
macの場合

sudo vi /private/etc/hosts

立ち上げているvagrantで振り当てたIPと同じIPを使ってサブドメインも設定します。

 192.168.33.11 one.sitename.dev two.sitename.dev three.sitename.dev

追加するサブドメインを追加する。

そしたらサイトネットワーク管理の管理画面に戻り、「サイト」の「新規追加」をクリックします。
以下項目に入力していきます。
* サイトアドレス (URL)
hostsで設定したサブドメインをこちらにも設定する。
* サイトのタイトル
* サイトの言語
* 管理者メールアドレス

以上でローカルでの設定は完了です。

リモート(レンタルサーバーなど)に反映させる。

Movefileの設定をします。
詳細は以下のページをご参照ください。
VCCWでのWordMoveの概要と設定方法と使い方

wordmove push --allを実行した後、サイトにアクセスしてログインすると以下の画面が表示されます。

こちらにはMovefileで設定したDBの情報と同じものを入力してください。

うまく表示されない場合はwordmove push --allを何度か行ってください。

管理画面にログインすると普通の管理画面が表示されます。
しかしサイトネットワーク管理の管理画面(http://sitename.com/wp-admin/network/)にアクセスしようとしても「マルチサイトのサポートが有効ではありません。 」というエラーが出ます。

wordmove push –allではwp-config.phpは反映されないからです。
そこでローカルでwp-config.phpを修正した時と同じになります。
ただし以下の行は本番のURLに変更しましょう。
define( 'DOMAIN_CURRENT_SITE', 'sitename.dev' );

define( 'DOMAIN_CURRENT_SITE', 'sitename.com' );

更にDBにあるURLをリプレイスする必要があります。
sitename.dev→sitename.info

ただSQLで一括置換するのは良くないらしいです。

wp_options や wp_postmeta には、シリアライズされたデータが入っており、そのまま変換するとまずい

詳細はこちら
WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう

なのでSearch and Replace for WordPress Databases Scriptを使います。
こちらの使い方も「WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう」にかいてあります。

Search and Replace for WordPress Databases Scriptの使い方

  1. Search and Replace for WordPress Databases Script
    こちらから「DATABASE SEARCH AND REPLACE SCRIPT IN PHP」をダウンロードします。
  2. ダウンロードしたzipファイルを開いて、ローカルのwordpressディレクトリの直下に置きます。※ディレクトリは任意の名前に変更してよい。
  3. wordmove push --allを実行して本番にアップします。
  4. sitename.info/Search-Replace-DB-master にアクセス。 ※ディレクトリ名を変更していたらその名前に変更。
  5. フォームが出てくるので上の方にあるreplaceと書いてあるところに置換したいURLを、withのところに置換後のURLを入力する
  6. 「live run」をクリックする。

再度、サイトネットワーク管理の管理画面(http://sitename.com/wp-admin/network/)アクセスするちゃんと表示出来るはずです。

ただこのままだとセキュリティ上非常にまずいので、Search-Replace-DB-masterにはベーシック認証を設置などする、またはファイルを消すなどした方が良いと思います。

ただサイトネットワーク管理で設定した、サブドメインを当てたサイトにアクセスしても、表示されない。
これは、レンタルサーバー側からサブドメインのアクセス先も割り当てないといけない。
ロリポップの場合はこちら→WordPressでマルチサイト化@ロリポップ!

これでやっとローカルと同じようにサブドメインのURLにアクセスしてもちゃんと表示されるようになる。

まとめ

本来はローカルで記事とかも書いて、それをwordmove push --allコマンド一発で本番にアップみたいな流れにしたかったのだが、サブドメインを使ったマルチサイトでは、wordmove push --allをした後にDBのURLを変更しなければならない。
手順が増えるのは若干めんどくさい。
また新しくサイトを追加する際には、都度レンタルサーバーの管理画面側から追加しなければならない。

サブディレクトリ型にすればこういった手順は必要なくなるのか…
試すのめんどくさいので今回は検証するのは辞めておきます。

参考サイト

【ドはまり】VCCWローカル側をマルチサイトに対応させた話

コメントを残す