IBM Bluemix 上で CakePHP を動かす」。実はこれ、自分が Bluemix に携わるようになった直後くらいから挑戦しては跳ね返されて、少し環境が変わってはまた挑戦して挫折して・・・を繰り返してきたテーマでした。実は意外と難しいんです。

が、先日のランタイムアップデートで PHP ランタイムの環境も変わり、その後の環境であればなんとか動せることが分かりました。その手順を紹介します。


まずは Bluemix に PHP ランタイムと MySQL データベースを用意します。その辺りの手順はこちらのエントリを参照してください。このエントリでは WordPress の導入方法を紹介していますが、そこまで行う必要はなく、PHP ランタイムと MySQL データベースサービスを作成して、接続情報の環境変数を確認して、cf ツールをインストールするところまでを参考にしてください:
IBM Bluemix 上に WordPress 環境を構築する(2015/06/28)


では改めて Bluemix 上に構築した PHP + MySQL 環境上に CakePHP と、データベース管理目的で phpMyAdmin をインストールしてみましょう。


まずは専用の空フォルダを1つ用意します。この例では C:\tmp\cake というフォルダを新たに作りました。このフォルダが PHP サーバーのドキュメントルートになるイメージです:
2015062900


次に CakePHP のコードを入手します。公式ページに移動し、2.x 系の最新バージョンをダウンロードします(3.x でも動くかもしれませんが未検証です)。この図では 2.6.7 が最新バージョンになっており、ダウンロードするファイルは cakephp-2.6.7.zip というものでした:
2015062901


この zip ファイルを展開して、特定のフォルダに保存します。この例では C:\tmp\cake フォルダに cakephp というフォルダ名で保存しています:
2015062902


次に CakePHP の設定ファイルをこの環境に合わせて2ファイル変更します。まずは app\Config\core.php ファイルをテキストエディタで開き、以下の2箇所を変更して保存します:
/**
 * A random string used in security hashing methods. Security.salt を適当な文字列に変更
 */
	Configure::write('Security.salt', 'ABCDabcd1234');

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings. Security.cipherSeed を適当な数値文字列に変更
 */
	Configure::write('Security.cipherSeed', '1234567890');

続いて app\Config\database.php.default を app\Config\database.php にリネームし、更に以下の箇所を変更して保存します:
class DATABASE_CONFIG {

  public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => '(接続情報の host の値)',
    'port' => '(接続情報の port の値)',
    'login' => '(接続情報の username の値)',
    'password' => '(接続情報の password の値)',
    'database' => '(接続情報の name の値)',
    'prefix' => '',
    //'encoding' => 'utf8',
  );
: :

(補足)
この後 cf コマンドでデプロイする場合の CakePHP 側の作業はここまでですが、IDS(IBM DevOps Services) を使ってデプロイする場合は、更にもう1ファイルの変更が必要です。

CakePHP の zip ファイルを展開したフォルダ直下に .gitignore というファイルがあります。この中で /app/Config/database.php ファイルが指定されています。このままだと(リネーム後の) database.php の存在が認識されないため、.gitignore を編集して、この一行の先頭に # を入れコメント行扱いにしてください:
# User specific & automatically generated files #
#################################################
#/app/Config/database.php
/app/tmp
/lib/Cake/Console/Templates/skel/tmp/
  :
  :
(補足終わり)


これで CakePHP の準備ができました。このままデプロイすれば CakePHP 環境としては使えるのですが、MySQL データベースの管理が不便なので、phpMyAdmin 環境も合わせて用意することにします。

まずは phpMyAdmin のコードを入手します。公式ページにアクセスし、最新版モジュール(この図では 4.4.10 でファイル名は phpMyAdmin-4.4.10-all-languages.zip)をダウンロードします:
2015062903


この zip ファイルを展開して、上記で CakePHP を保存したのと同じフォルダに保存します。この例では展開先フォルダを phpMyAdmin としています:
2015062904


次に phpMyAdmin の設定ファイルをこの環境に合わせて変更します。展開先フォルダ直下の config.sample.inc.php を config.inc.php にリネームしてからテキストエディタで開き、以下を変更して保存します('port'の方は一行丸ごと追加してください)。:
  :
  :
$cfg['Servers'][$i]['host'] = '(接続情報の host の値)';
$cfg['Servers'][$i]['port'] = '(接続情報の port の値)';  # この行は追加
  :
  :


これで phpMyAdmin の設定も完了しました。最後に Bluemix 上の PHP ランタイムで mbstring や MySQL, PDO を有効にするための設定を追加します。 CakePHP や phpMyAdmin を保存したフォルダ(ドキュメントルートにするフォルダ)に .bp-config というフォルダを作ります:
2015062905


そしてこの .bp-config フォルダの中に options.json というテキストファイルを以下の内容で新規に作成して保存します:
{
  "PHP_EXTENSIONS": [ "bz2", "zlib", "curl", "mcrypt", "mbstring", "mysql", "pdo", "pdo_mysql" ]
}
2015062906


更に、ドキュメントルート直下に composer.json というファイルを以下の({} だけの)内容で作成します:
{}
2015062907


これで全ての準備が整いました。ではこのフォルダ(cakephp や phpMyAdmin, .bp-config のあるフォルダ)をカレントフォルダにして、Bluemix 上の PHP アプリケーションに cf ツールでプッシュします:
> cd c:\tmp\cake (目的のフォルダ)

> cf login -a https://api.ng.bluemix.net/ -u (Bluemix のログインID)

※データセンターが英国を使っている場合は https://api.eu-gb.bluemix.net を指定する

(パスワード入力を求められるので指定)

> cf push (Bluemix で作成時に指定したアプリ名)

cf push コマンドが成功すると Bluemix 上に CakePHP および phpMyAdmin の環境ができているはずです:

(CakePHP 環境)
2015062908

(phpMyAdmin 環境)
2015062909


念願の CakePHP on Bluemix 環境の作り方が分かりました!