Vagrant で手軽に CakePHP 開発環境が作れる Cakebox に WordPress を同居させる
『仮面ライダードライブ』44話や45話みたいなお話にはめっぽう弱い kagata です。王道の展開だよなあと思いつつも、今月いっぱいは目が離せません。
さて、今回は開発環境構築のお話です。Vagrant を使って CakePHP の開発環境を立ち上げるのにたいへん便利な Cakebox というツールがあります。その環境に WordPress を同居させて動かしたいと思うことがあり、今回はその手順をまとめてみました。CakePHP と WordPress を連携させるシステムをつくりたい方、あるいは Cakebox のちょっと細かい Tips が知りたい方のお役に立てばさいわいです。
きっかけ
Cakebox 上で WordPress を動かそうと思ったきっかけは次の記事です。
- CakePHPとWordPressを連携するメリットとその方法 Vol.1 - KAI-YOU Lab
- CakePHPとWordPressを連携するメリットとその方法 Vol.2 - KAI-YOU Lab
「うさぎ」のラーメン、いいですよね!ちょうど開店のころに近所で仕事をしていて、よく利用していました。なつかしい。
WordPress で作成したデータを CakePHP はじめ別の Web アプリケーションから利用したいという要望はちょくちょくあります。これはぜひとも試してみたい…けど、てっとりばやく試せる方法はないかな?ということで、Cakebox に白羽の矢を立ててみることにしました。
Cakebox のインストールと CakePHP アプリケーションの立ち上げ
まずは Cakebox 本体と CakePHP アプリケーションを準備しましょう。
Cakebox を設置する
Cakebox 設置の手順は公式マニュアル “Quickstart” のページにあります。おおまかには次のとおりです:
- GitHub から Cakebox 一式をクローンする
Cakebox.yaml.default
をひな形にして設定ファイルCakebox.yaml
を作成するvagrant up
する
Cakebox.yaml
は、まずはひな形をコピーするだけで ok です。
Cakebox が立ち上がったら、ブラウザから http://10.33.10.10/ を開いてみましょう。
Cakebox ダッシュボードのログイン画面が見えたら成功です。
Cakebox に SSH でログインする
Cakebox が動かせるようになったら、以降の作業は Cakebox に SSH でログインしてコマンドラインで進めていきます。SSH でログインするには vagrant ssh
が使えればいちばん簡単です。使えない環境では、別途 SSH コンソールからログインしましょう。
Cakebox の初期状態では、SSH 接続に公開鍵認証が必須となっており、 パスワードで SSH ログインすることはできません 。秘密鍵のありかは vagrant ssh-config
で “IdentityFile” の行に表示されます。おそらく [Cakebox を設置したディレクトリ]/.vagrant/machines/default/virtualbox/private_key
が使われているはずです。
>vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile C:/Users/kagata/cakebox/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL
ForwardAgent yes
Cakebox.yaml
でお好みのキーペアを使うよう設定することもできるようです。詳しくは公式マニュアルをご参照ください。
Cakebox コマンドラインツールで CakePHP アプリケーションを立ち上げる
Cakebox 上に開発物のひな形となる CakePHP アプリケーションを立ち上げます。Cakebox に同梱の cakebox
コマンド一発でデータベースやバーチャルホストの設定ができてしまいます。便利。
$ cakebox application add mycake3.app
わたしの環境では1~2分くらい処理に時間がかかりました。気長に待ちましょう。
処理が終わったら、次のようなメッセージが表示されます。
Remember to update your hosts file with: 10.33.10.10 mycake3.app
ホスト側の hosts ファイルに指示どおりドメイン情報を追記してやります。そしてブラウザから http://mycake3.app/ を開くと…
CakePHP3の初期画面が表示されました。
そういえば、KAI-YOU Lab さんの記事では CakePHP2を使っているようでした。コマンドラインオプションで CakePHP のメジャーバージョンを指定することで、CakePHP2のアプリケーションも同じように立ち上げられます。
cakebox application add mycake2.app -f cakephp -m 2
はいこのとおり。
理由は深く追求していないのですが、CakePHP3 アプリの立ち上げよりも若干時間がかかるようです。
Cakebox に WordPress をインストールする
いよいよ今回の本題である、Cakebox に WordPress をインストールする手順に移ります。せっかく Cakebox に SSH ログインしているところなので、このままコマンドラインで一気に進めてしまいます。
WordPress のためのバーチャルホストを作成する
KAI-YOU Lab さんの記事では CakePHP の webroot ディレクトリに WordPress を設置していました。もちろんこれでもかまわないのですが、webroot がゴチャッとするのはなんとなくアレなので(?)今回は専用のバーチャルホストを作ってみました。
CakePHP アプリケーションと同様、空のバーチャルホストも cakebox
コマンドで作れます。
$ mkdir /home/vagrant/Apps/wordpress.app
$ cakebox vhost add wordpress.app /home/vagrant/Apps/wordpress.app
ゲスト側の /home/vagrant/Apps/wordpress.app/
ないしホスト側の [Cakebox を設置したディレクトリ]/Apps/wordpress.app/
が http://wordpress.app/ のドキュメントルートになっているはずです。ホストとゲストの間でのファイル同期も、これだけで動作します。ホスト側の hosts ファイルだけは忘れずに追記しておきましょう。
WordPress が使うデータベースを準備する
続いて、WordPress 用のデータベースを準備します。コマンドラインから MySQL に root ユーザでログインします。cakebox というユーザも作られていますが、こちらにはデータベースを作成する権限がありません。
$ mysql -uroot -p
パスワードは “secret” です。コマンドラインから生成した CakePHP3アプリケーションの app.php に記入されるので、それで確認できると思います。
ログインできたら、WordPress が使うデータベースとそのユーザを作成します。
mysql> CREATE DATABASE wordpress;
mysql> GRANT ALL ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'secret';
WP-CLI をインストールする
ここまでできてしまえば、WordPress 用ドキュメントルートに WordPress のファイル一式を展開して、ブラウザからいつものインストーラを動かして WordPress を設置することももちろんできます。ただ今回はせっかくコマンドラインでログインしているところなので、WordPress もコマンドラインだけでインストールしてしまいましょう。
そのために、WordPress のコマンドラインツール WP-CLI をインストールします。Cakebox には Composer が標準でインストールされています。せっかくなので、WP-CLI インストールにも活用させてもらいましょう。
$ sudo composer create-project wp-cli/wp-cli /usr/share/wp-cli --no-dev
$ sudo ln -s /usr/share/wp-cli/bin/wp /usr/bin/wp
$ wp cli version
WP-CLI のバージョン情報が表示されたら、インストール成功です。
それにしても、今回は「せっかくなので」ばかりですね。
参考:Alternative Install Methods · wp-cli/wp-cli Wiki · GitHub
WordPress をインストールする
それでは満を持して、WordPress 本体をインストールします。
WordPress 一式をダウンロードします。文字エンコーディングで何かあるとめんどうなので、とりあえず英語版にしておきました。
$ wp core download --path=/home/vagrant/Apps/wordpress.app/
wp-config.php を作成します。先に準備しておいたデータベース情報を参照しながら進めましょう。
$ wp core config --dbname=wordpress --dbuser=wordpress --dbpass=secret --path=/home/vagrant/Apps/wordpress.app/
WordPress をインストールします。sendmail
が見つからないとメッセージが出ますが、今回はよしとしましょう。
$ wp core install --url=http://wordpress.app/ --title="WordPress in the Cakebox" --admin_user=cakebox --admin_password=secret --admin_email=test@example.com --path=/home/vagrant/Apps/wordpress.app/
ここまでできたら、ブラウザで http://wordpress.app/ を開きます。
WordPress のフロント画面が表示されたら成功です。
WordPress のリダイレクトループを解消する
もうちょっとだけ続きます。上で表示できた WordPress フロント画面の左メニューからログイン画面に進み、ログインするとリダイレクトループが発生します。
これを解消するために、バーチャルホストの設定ファイルを WordPress にあわせて書き換えましょう。
まずは設定ファイル(cakebox vbox add
コマンドで生成されたもの)を vi で開いて…
$ vi /etc/nginx/sites-available/wordpress.app
この部分を…
location / {
try_files $uri \$uri /index.php?$args;
}
このように書き換えます。
location / {
try_files $uri $uri/ /index.php?$args;
}
最後に、Nginx を再起動すると…
$ sudo nginx -s reload
このとおり、リダイレクトループが解消しました。
まとめ
Cakebox を使って、CakePHP と WordPress を連携させるアプリケーションの開発環境を作ってみました。手数は案外かかりましたが、Cakebox.yaml をいろいろカスタマイズすればプロビジョニングの完全自動化、コマンド一発で環境立ち上げの展望も開けてきます。そのときには WP-CLI を導入しておいたのが生きてくるでしょう。