Vagrant で手軽に CakePHP 開発環境が作れる Cakebox に WordPress を同居させる

Vagrant で手軽に CakePHP 開発環境が作れる Cakebox に WordPress を同居させる

『仮面ライダードライブ』44話や45話みたいなお話にはめっぽう弱い kagata です。王道の展開だよなあと思いつつも、今月いっぱいは目が離せません。

さて、今回は開発環境構築のお話です。Vagrant を使って CakePHP の開発環境を立ち上げるのにたいへん便利な Cakebox というツールがあります。その環境に WordPress を同居させて動かしたいと思うことがあり、今回はその手順をまとめてみました。CakePHP と WordPress を連携させるシステムをつくりたい方、あるいは Cakebox のちょっと細かい Tips が知りたい方のお役に立てばさいわいです。

きっかけ

Cakebox 上で WordPress を動かそうと思ったきっかけは次の記事です。

「うさぎ」のラーメン、いいですよね!ちょうど開店のころに近所で仕事をしていて、よく利用していました。なつかしい。

WordPress で作成したデータを CakePHP はじめ別の Web アプリケーションから利用したいという要望はちょくちょくあります。これはぜひとも試してみたい…けど、てっとりばやく試せる方法はないかな?ということで、Cakebox に白羽の矢を立ててみることにしました。

Cakebox のインストールと CakePHP アプリケーションの立ち上げ

まずは Cakebox 本体と CakePHP アプリケーションを準備しましょう。

Cakebox を設置する

Cakebox 設置の手順は公式マニュアル “Quickstart” のページにあります。おおまかには次のとおりです:

  1. GitHub から Cakebox 一式をクローンする
  2. Cakebox.yaml.default をひな形にして設定ファイル Cakebox.yaml を作成する
  3. vagrant up する

Cakebox.yaml は、まずはひな形をコピーするだけで ok です。

Cakebox が立ち上がったら、ブラウザから http://10.33.10.10/ を開いてみましょう。

20150910-1.png

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/ を開くと…

20150910-2.png

CakePHP3の初期画面が表示されました。

そういえば、KAI-YOU Lab さんの記事では CakePHP2を使っているようでした。コマンドラインオプションで CakePHP のメジャーバージョンを指定することで、CakePHP2のアプリケーションも同じように立ち上げられます。

cakebox application add mycake2.app -f cakephp -m 2

はいこのとおり。

20150910-3.png

理由は深く追求していないのですが、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/ を開きます。

20150910-4.png

WordPress のフロント画面が表示されたら成功です。

WordPress のリダイレクトループを解消する

もうちょっとだけ続きます。上で表示できた WordPress フロント画面の左メニューからログイン画面に進み、ログインするとリダイレクトループが発生します。

20150910-5.png

これを解消するために、バーチャルホストの設定ファイルを 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

このとおり、リダイレクトループが解消しました。

20150910-6.png

参考:Nginx « WordPress Codex

まとめ

Cakebox を使って、CakePHP と WordPress を連携させるアプリケーションの開発環境を作ってみました。手数は案外かかりましたが、Cakebox.yaml をいろいろカスタマイズすればプロビジョニングの完全自動化、コマンド一発で環境立ち上げの展望も開けてきます。そのときには WP-CLI を導入しておいたのが生きてくるでしょう。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ