PHPFog + Symfony2 でステージング環境を作る方法:Symfony Advent Calender 2011 JP – 13日目 –

こんにちは!「Symfony Advent Calendar JP 2011」 13日目です。

昨日の @77webさんからバトンタッチで、今日は「PHPFog + Symfony2 でステージング環境を作る方法」をご紹介します。

PHPFog と Symfony2 って何?

さて、今日のブログのテーマですが、タイトル通り PHPFog に Symfony2 が動作する環境を作る手順をめっちゃ丁寧に書いていきたいと思います。

みんな大好き Symfony については説明するまでもありません、PHP5向けのウェブアプリケーションフレームワークです。

・公式:High Performance PHP Framework for Web Development – Symfony はてなブックマーク - High Performance PHP Framework for Web Development - Symfony
 

「PHP fog」はPHPの実行環境を提供しているPaaS型クラウドです。先日、3つのアプリケーションまで永久無料にすると発表されたPHPerに優しいサービスなのです。

・詳しくはこちらの記事を参考:ずっと無料で使えるPaaS型クラウドのまとめ。2011年版 - Publickey はてなブックマーク - ずっと無料で使えるPaaS型クラウドのまとめ。2011年版 - Publickey

・公式:PHP Fog — Rock Solid Cloud Platform for PHP はてなブックマーク - PHP Fog — Rock Solid Cloud Platform for PHP
 

Heroku を使うとステージング環境がカンタンに作れて素敵だったから、Symfony2 用のステージング環境をサクッと作りたかったんだ。

ところで、皆さんステージング環境ってどうされていますか?

  • ステージング用の VPS を契約してる
  • 開発環境で確認したら、即、本番アップだぜ!
  • ステージング環境なにそれ?おいしいの?

色々とあると思います。

僕は少し前から、Heroku + Ruby on Rails でも開発しているのですが、本番環境だけでなくステージング環境も簡単に作れることに感動しておりました。

じゃあ、Symfony2 でもPaas使えばできるんじゃない?

ということでやってみました。

(Heroku + Rails でステージング環境を作りたいって方はこちらの記事もどうぞ)

・参考:Heroku + Rails の認証付きステージング(staging)環境を構築する方法 | CodeNote.net はてなブックマーク - Heroku + Rails の認証付きステージング(staging)環境を構築する方法 | CodeNote.net
 

最初は、Heroku で最近 PHP も使えるようになったし、Herokuで作るか!と思ったけど無理でした

あまり知られていないようですが、少し前からHerokuでもPHPが動作するようになりました。

なので、使い慣れた Heroku でやってみよう!と思い Try しましたが、Symfony2 の動作環境としては以下の通り無理でした。

http://symfony2.herokuapp.com/
 

Symfony2 なんだし PHP Fog を使ってみよう!

Heroku が使えないので、他の Paas を検討することに。

Symfony2 は PHP製のフレームワークですし、お寿司。

PHP Fog を使ってみよう!

ということで、名前に惹かれて PHP Fog に決定。

他の候補は、fluxflex はてなブックマーク - fluxflexとかも日本人がやってて、かなり良さそうだったけどまた別の機会に。
 

PHP Fog + Symfony2 でステージング環境を作る手順

さて、やっと手順です。

  1. PHP Fog で新規アプリ作成
  2. Symfony2 アプリケーションを PHP Fog に Pushする
  3. PHP Fog App を Symfony2 用に設定する
  4. Symfony2 に Basic認証を設定する

ここから飛ばしていきます!
 

1. PHP Fog で新規アプリ作成

まず、PHP Fog で新しくアプリケーションを作成します。


 

次に、アプリケーション選択の画面で、「Custom App」をクリックします。

(Cake、Zend、CodeIgniterとかあるのにSymfonyがないじゃないか!)


 

”MySQLのパスワード”と”ドメインの設定”をします。

独自ドメインを使わない場合は、phpfogapp.com のサブドメインが使えます。


 

PHP Fog 上でのアプリ作成完了です。


 

最後に、SSH公開鍵の設定をします。


 

2. Symfony2 アプリケーションを PHP Fog に Pushする

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日本語ドキュメント はてなブックマーク - 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 の設定も変更できないのでスルー。
 

3. PHP Fog App を Symfony2 用に設定する

PHP Fog では console からコマンドを叩くことができないので、cache:clear などのコマンドをWebアプリ経由で実行できるようにする必要があります。

$ vim web/clean_prod_cache.php
<?php
system('php ../app/console env=prod cache:clear');
system('php ../app/console env=prod cache:warm');
?>

 

また、ドキュメントルートの設定もしておきます。

これにより、http://symfony2.phpfogapp.com/web/app_dev.php/ というURLが

http://symfony2.phpfogapp.com/app_dev.php/

と web を省略できるので、やっておきましょう。
 

最後に、cache, logs ディレクトリに書込み権限を与えておきます。


 

Symfony2 に Basic認証を設定する

ステージング環境ということで、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

きっと、めっちゃためになる内容だと思うので乞うご期待です!

参考情報