PHPFog + Symfony2 でステージング環境を作る方法:Symfony Advent Calender 2011 JP - 13日目 -
こんにちは!「Symfony Advent Calendar JP 2011」 13日目です。
昨日の @77webさんからバトンタッチで、今日は「PHPFog + Symfony2 でステージング環境を作る方法」をご紹介します。
さて、今日のブログのテーマですが、タイトル通り PHPFog に Symfony2 が動作する環境を作る手順をめっちゃ丁寧に書いていきたいと思います。
みんな大好き Symfony については説明するまでもありません、PHP5向けのウェブアプリケーションフレームワークです。
・公式:High Performance PHP Framework for Web Development - Symfony
「PHP fog」はPHPの実行環境を提供しているPaaS型クラウドです。先日、3つのアプリケーションまで永久無料にすると発表されたPHPerに優しいサービスなのです。
・詳しくはこちらの記事を参考:ずっと無料で使えるPaaS型クラウドのまとめ。2011年版 - Publickey
・公式:PHP Fog — Rock Solid Cloud Platform for PHP
ところで、皆さんステージング環境ってどうされていますか?
色々とあると思います。
僕は少し前から、Heroku + Ruby on Rails でも開発しているのですが、本番環境だけでなくステージング環境も簡単に作れることに感動しておりました。
じゃあ、Symfony2 でもPaas使えばできるんじゃない?
ということでやってみました。
(Heroku + Rails でステージング環境を作りたいって方はこちらの記事もどうぞ)
・参考:Heroku + Rails の認証付きステージング(staging)環境を構築する方法 | CodeNote.net
あまり知られていないようですが、少し前からHerokuでもPHPが動作するようになりました。
なので、使い慣れた Heroku でやってみよう!と思い Try しましたが、Symfony2 の動作環境としては以下の通り無理でした。
・http://symfony2.herokuapp.com/
Heroku が使えないので、他の Paas を検討することに。
Symfony2 は PHP製のフレームワークですし、お寿司。
PHP Fog を使ってみよう!
ということで、名前に惹かれて PHP Fog に決定。
他の候補は、fluxflex とかも日本人がやってて、かなり良さそうだったけどまた別の機会に。
さて、やっと手順です。
ここから飛ばしていきます!
まず、PHP Fog で新しくアプリケーションを作成します。
次に、アプリケーション選択の画面で、「Custom App」をクリックします。
(Cake、Zend、CodeIgniterとかあるのにSymfonyがないじゃないか!)
”MySQLのパスワード”と”ドメインの設定”をします。
独自ドメインを使わない場合は、phpfogapp.com のサブドメインが使えます。
PHP Fog 上でのアプリ作成完了です。
最後に、SSH公開鍵の設定をします。
PHP Fog上にアプリを作って、次はいよいよ Symfony2 アプリケーションを設置します。
まず、git clone で PHP Fog からローカルにリポジトリを複製して、初期ファイルを削除します。
$ git clone [email protected]:symfony2.phpfogapp.com
Cloning into symfony2.phpfogapp.com...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd symfony2.phpfogapp.com
$ git rm index.php
また、新しいリモート Git リポジトリにアクセスしやすいように phpfog という名前をつけて追加します。
$ git remote add phpfog [email protected]:symfony2.phpfogapp.com
次に、Symfony2 のファイル一式を設置して、app_dev.php, config.php を編集して、IPアクセス制限の部分をコメントします。
$ vim web/app_dev.php
$ vim web/config.php
・参考:Symfony2 ドキュメント日本語版 | Symfony2日本語ドキュメント
編集したら、PHP Fog 上に Symfony2 アプリを設置します。
$ git add .
$ git commit -m 'symfony2 init'
$ git push phpfog master
Counting objects: 3975, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3781/3781), done.
Writing objects: 100% (3974/3974), 3.75 MiB | 290 KiB/s, done.
Total 3974 (delta 1060), reused 0 (delta 0)
remote: -----> Deploying to the cloud
To [email protected]:symfony2.phpfogapp.com
5708d64..adab3a0 master -> master
Symfony2 の動作環境を /config.php から確認します。
タイムゾーンの設定を app/AppKernel.php に書きます。
ini_set('date.timezone', 'Asia/Tokyo');
PHP アクセラレータはインストールできないのでスルーします。
同様に、short_open_tag の設定も変更できないのでスルー。
PHP Fog では console からコマンドを叩くことができないので、cache:clear などのコマンドをWebアプリ経由で実行できるようにする必要があります。
$ vim web/clean_prod_cache.php
また、ドキュメントルートの設定もしておきます。
これにより、http://symfony2.phpfogapp.com/web/app_dev.php/ というURLが
http://symfony2.phpfogapp.com/app_dev.php/
と web を省略できるので、やっておきましょう。
最後に、cache, logs ディレクトリに書込み権限を与えておきます。
ステージング環境ということで、Basic認証ぐらいは設定しておきたいですよね。
security.yml にサクッと書いてしまいましょう。
$ vim app/config/security.yml
security:
encoders:
Symfony\\Component\\Security\\Core\\User\\User: plaintext
providers:
in_memory:
users:
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
firewalls:
secured_area:
pattern: ^/
http_basic:
realm: "Secured Area"
access_control:
- { path: ^/, roles: ROLE_ADMIN }
ここまでで作ったアプリは下記のリンクから ID: admin / PASS: adminpass でアクセスできます。
http://symfony2.phpfogapp.com/app_dev.php/
以上です。
MVCのどれも全く作ってないのでアレな感じはしますが、とりあえず今日はここまでということで。
「Symfony2のステージング環境ならこれがオススメ!」というのがあれば是非、Twitterやブコメでアドバイス頂ければ嬉しいです。
他の言語でも、「ステージング環境はこうしてるよ!」というアドバイスも絶賛募集中でございます。
さて、明日、2011/12/14(水)は@ganchiku こと、大野さんです。
・大野さんのプロフィールページ:GANCHIKU.com
きっと、めっちゃためになる内容だと思うので乞うご期待です!