PHPFogでCakePHPアプリを動かしてみた

PHPFog(https://phpfog.com/)は、Ruby on RailsのPaaS HerokuのPHP版です。
PHPFogもHeroku同様にEC2上で提供されるサービスです。価格は、EC2をそのまま使うよりは割高ですが、運用の手間を考えるとプラットフォームのひとつとして検討したいところです。

以下、動かしてみたときのメモです。

サインアップ

右上の[SIGN UP]をクリックしてサインアップ開始、クレジットカードを登録しなくてもとりあえずアカウントは作成できます。

アプリケーションを作成する

サインナップ後、引き続きアプリケーション作成のウィザードが表示されます。

今回はCakePHPのアプリケーションを選択しました。
次の画面でインスタンスのプランを選択します。

SilverでMicroインスタンス相当29$、素でMicroインスタンス使った場合us-eastでも15$弱はするので十分安い気がする。
とりあえずFreeを選択しました。
次の画面では、CakePHPのユーザID/パスワードとドメインの設定をします。

ここで指定したユーザIDとパスワードはデータベースのユーザIDとパスワードになります(ユーザIDは、「<指定したユーザID>-<自動に割り振られる数値>」になります)。
ドメインを取得していない場合は[or, use a phpfogapp.com domain name]をクリックするとphpfogのサブドメインで動作するように設定されます。

アプリケーションの作成が終わって、indexページにアクセスするとオールグリーンです。楽だ。

アプリケーションのデプロイ方法

PHPFogに作成したアプリケーションを更新するにはgitのコマンドを利用します。
(以降のアプリケーション設定のスクリーンショットは古くなっています。)

SSHキーを生成し登録する。

以下のページの説明にしたがってSSHキーを生成します。
http://docs.phpfog.com/index.php/features/article/generating_a_ssh_key

$ cd ~/.ssh

「そのようなファイルやディレクトリはありません」と言われたらディレクトリを作ります。

$ mkdir ~/.ssh
$ cd ~/.ssh

.sshディレクトリの中身を表示して、id_rsaおよびis_rsa.pubファイルがあったらバックアップして削除します。

$ ls
id_rsa	id_rsa.pub	known_hosts
$ mkdir key_backup
$ cp id_rsa* key_backup
$rm id_rsa*

キーを生成します。ファイル名はデフォルト、パスワード無しだと以下のようにコンソールに表示されます。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hrendoh/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hrendoh/.ssh/id_rsa.
Your public key has been saved in /home/hrendoh/.ssh/id_rsa.pub.
The key fingerprint is:
a1:28:72:04:87:5c:9f:2c:a8:93:67:db:ed:8a:16:f9 hrendoh@hrendoh-PC
The key's randomart image is:
+--[ RSA 2048]----+
|o.o.             |
|.+. o .          |
| ... +  .        |
|.o  .. . .       |
|= =.. . S        |
| *o+ .           |
|  .o. .          |
|  ..E.           |
| .. ...          |
+-----------------+

[MyAccounts]の[SSH Keys]タブを開き[Add another SSH Key]をクリックし、生成された.ssh/id_rsa.pubファイルをテキストエディタで表示し全体をコピーして、[SSH Public Key]テキストエリアに貼り付け保存します。

Gitリポジトリを作成

AppConsoleの[Source code]タブを開くと作成したアプリケーションのリポジトリを確認できます。

gitが入っていない場合は

$ sudo apt-get install git
$ git clone git@git.phpfog.com:cakephp.phpfogapp.com

cakephp.phpfogapp.comディレクトリ以下にCakePHPのプロジェクトができる。
データベースの設定まで終わって居るので超簡単。

git cloneで以下のエラーが出た場合は

Agent admitted failure to sign using the key.
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

ssh-addしてみてください。

$ ssh-add ~/.ssh/id_rsa
データベースにテーブル定義

PHPMyAdminが使えます。
PHPMyAdminへのリンクはAppConsoleの[Source code]タブを開くとあります。

phpmyadminのパスワードは、CakePHPの場合はapp/config/database.phpでも確認できますが、アプリケーション作成のStep 3で指定したパスワードが設定されています。

アプリケーションのコミット
$ cd cakephp.phpfogapp.com/
$ git add .
$ git commit . -m "commit cakephp app"
$ git push

PHPFogの特徴

今回試してみて、気づいた点をいくつか

.htaccess ini_setを利用可能

PaaSですが、結構柔軟な設定が可能です。
http://docs.phpfog.com/index.php/features/article/set_php.ini_values_using_.htaccess_and_set_ini

外部ライブラリの利用について

PHPFogは、include_pathをアプリケーションで設定することはできないように設定されているようです。
http://help.phpfog.com/discussions/problems/729-open_basedir-restriction
CakePHPのvendorsはデフォルトでパスを通すとかして欲しい気もしますが、include_pathを出力してみると以下のパスが通っていることが分かります。

.:/usr/share/php:/usr/share/pear:/usr/share/php/libzend-framework-php:/var/fog/apps/app5868/tmp:/var/fog/apps/<アプリケーションID>/<アプリケーション名>.phpfogapp.com

PEARとZENDのライブラリとアプリケーションのルートディレクトリにパスが通って要るので、これでやりくりする必要があるようです。

メールも送信できる

メールの送信も行えます。
http://docs.phpfog.com/index.php/features/article/sending_email
実際に、mb_send_mailでメール送信するアプリケーションを動かして見ましたが、日本語も化けずに送信できました。
35通/秒くらいの量であれば可能だが信頼性のある方法では無いと書いてある。

アプリケーションログが見れない

これが無いとまだ運用は無理か

試使用の制限はおおきい

アカウントごとに、6ヶ月間1アプリケーションだけ無料で使えます。

以上、まだRubyのHerokuほどの機能はありあせんが今後に期待ですね。