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

サーバー側でマルチサイト完了させたので、ローカルに持ってきて色々試したいなーと思いました。ローカル側(VCCW)に反映させるために戦ったログです。

前提

・本番環境はhttps://hoge.comとする。

・本番環境にはサブドメイン型で、

one.hoge.com , two.hoge.com, three.hoge.comを作成してある。

・ローカル側はhttp://hoge.devとする。

・ローカル側はマルチドメインの設定はしてない。

手順

エラーとの戦いが始まる

ローカルとかんたんに同期できるwordmove機能を使います。

マルチサイト化する前の環境からpullして色々やってみたが、エラー頻発だったのでも~最初からやる!にしました。
こういう時かんたんに出来るので良いですよね。

vccw環境を再構築

site.ymlに以下の修正をして

multisite: true //マルチサイトの許可

$ vagrant destroy

$ vagrant up

暫し待つ

で、wpさんから指示されるマルチサイトの記述をwp-config.phpに追加し.htaccessにも指定通りの記述をして、ログアウト→ログイン。

ローカル側のマルチサイト化はできた。

しかし、何故か英語環境なっている

なのでphpMyAdminから設定をいじる

wp_sitemetaテーブルの WPLANG を、en_US → jaに修正。

site.ymlのlangはjaにしてあるんだけどなあ。

ここで、db情報だけ引っ張ってくる。

–allしてもいいと思うがエラー出たとき問題切り分けの自信が持てなさそうなのでdbだけにした汗

$ vagrant ssh
$cd /vagrant
$wordmove pull --db

SSHのAuthエラー。もうなにこれ! ※1

/home/vagrant/.gem/ruby/2.3.0/gems/net-ssh-3.2.0/lib/net/ssh.rb:249:in `start’: Authentication failed for user [サーバーアドレス] (Net::SSH::AuthenticationFailed)

-Kオプション使って、キーチェーンに登録していなかった。

macを再起動などすると-Kしとかないと忘れちゃうらしい

$ ssh-add -K ~/.ssh/xserver/id_rsa

エックスサーバーの秘密鍵用にディレクトリを作ってある
再度挑戦。本番環境のDB引っ張ってこれました。馬鹿です私は。

内部的にはidが振られていてwp_(各サブドメインのID)_xxxのようになっていたのですね。

各サブドメインのIDの部分はblog_idと名付けられてるようです。

で、動作確認。

多分動かないと思うんだよなー汗 再度アクセスすると、

はい、そうですよね。
なんだかよくわからないループを起こしています。

pullしたので当たり前ですが、それぞれのsiteurlが本番環境のままになってます。テーブル情報にそのまま書き込まれてます。

wordmoveさんがうまくやってくれるかと思ったけど、流石にむりですよね。※参考3

書き換え

このあたりの設定情報を全部書き換えなければいけません。

全部のレコードみて修正してられない!ってなるので、
wpコマンドを使のsearch-replaceをしようと試みる。※参考2

wp search-replace 'https://hoge.com' 'http://hoge.dev'

はいまたエラー

site hoge.dev not found と怒られる。

vi /home/vagrant/.wp-cli/config.yml して設定の中身を見てみる。

path: /var/www/html/http://hoge.dev

っていうよくわかんない記述になってたので,

path: /var/www/htmlに修正

更に以下を追加。※参考3
この記述はもしかしたら要らないかもしれないです。

url:http://hoge.dev

改めて、以下コマンド実行

wp search-replace 'https://hoge.com' 'http://hoge.dev'

エラー。site hoge.dev not found と怒られる。なんでや!

先に変更しとかないと行けない部分があった

DBのwp_siteテーブルのdomainカラムがhoge.com(本番domain)になってたので先にhoge.devに変更。

再度wp search-replace実行。。。いけた(泣)

one.hoge.com → one.hoge.devなど変更すべきところはすべて上記コマンドを実行。

以下のような感じでテーブルごとに変換ステータスくれる。

改めてhttp://hoge.dev/wp-admin/へアクセスしてみる。

よし!トップレベルのはアクセスできたぞ!

こここでとりあえずdb以外の情報すべて引っ張ってくる

wordmove pull -w -p -t -u

コアファイル(-w) プラグイン(-p) テーマ(-t) アップロードファイル(-u)をpullします。
※わたしの本番環境では常時SSL用

に.htaccessをいじってたので、pullしたあと前の記述に戻した。

DNSの設定

vccwはサブドメイン型のマルチサイトは完全対応してないのでDNS解決する必要があります。※参考4

/etc/hostsに以下を記述してアクセスを同じdocument rootに向けます

#192.168.33.11はsite.ymlで設定したip
 192.168.33.11 one.hoge.dev two.hoge.dev three.hoge.dev
 192.168.33.11  hoge.dev  # VAGRANT: 8d636...

でone.hoge.dev/wp-admin/にアクセス。いけた!

何日もかかったorz

注意点

・これもまあ当然だが、wordmove pull –db し直すと。改めてDBの修正が必要。

・vagrant provision するとdb情報も変わるみたいなので、改めて修正が必要。

まとめ

・vccwのマルチサイト化はdatabaseの書き換えが必要。

・サブドメイン型は/etc/hostsでトップレベルと同じところ向くように修正する。

・わけわかんなっくなったら一旦壊して再構築しちゃえがあるので良かった。

自動化しないと気軽にDBはpullできないな汗

デザインとかロジックだけならいいけど。

ここまでお読み頂きありがとうございました。

PR:WordPress特化型サーバー

ありがたや:

※参考1

※参考2

※参考3

https://discourse.roots.io/t/wp-cli-doesnt-work-on-multisite-subfolders/5002

※参考4