fuelphpで開発したサービスをリリースする手順

はじめに

一般的に開発環境、ステージング環境、本番環境などを用意してプロジェクトを進めるやり方はけっこうあると思います。
僕もだいたいこの構成で作業を進めています。とくに支障を感じた事もないのでまぁ問題ないやり方なのではないのでしょうか。
今年の目標としてはphpunitを導入してみたいと考えているのでこれにテスト環境も加えられたらベストなのですが、、、なかなか難しくて導入できていません。勉強不足ですね、、、

>本番環境
一般ユーザが実際に使用する環境

>ステージング環境
本番環境に反映する前に最終的に確認する環境

>開発環境
言葉のとおり、ここでガシガシ開発してゆく。
まぁこれは案件によって進め方も変わると思うのですが、開発人数が増える場合は各々がローカルPCに環境を作ってgitやsvnでコミット時にフックスクリプトが走るようにしておいて自動的に開発環境へ反映される。という進め方も多いのかなと思います。最近は1人、多くて2人の開発がほとんどなので直接開発サーバで作業してコミットしてっていう形が多いのですが、、、各々がローカルPCで作業するやり方についてはそのうちまとめてみたいと思います

fuelphpでの本番、ステージング、開発環境ごとの設定ファイルについて

基本的に環境によってスクリプトがかわるということはないと思います。環境によってかわりそうなものをざっとあげてみると
・サイトに表示するサービス名
・Emailの設定(タイトル、送信者など)
・dbの接続設定(ホスト名、アカウント、パスワード、データベース名など)
・外部連携がある場合はAPIのURLなど

とかでしょうか。
fuelphpではあらかじめ
fuel/app/config/development
fuel/app/config/staging
fuel/app/config/production
といったフォルダが用意されているのでそれぞれの環境用のファイルを用意する形になります。
db.phpは最初から用意されているので、それぞれにdbの設定を書けばいいと思います。が個人的にはあまりファイルがバラバラになるのが嫌なので、それ以外に環境によってかわるものはもう1ファイルくらい用意しておいてそれに全て書いてしまえばいいと思ってます

vi fuel/app/config/developement/app.php

return array(
  "service" => array(
    "title" => "[開発環境]サービス名",
  ),
  "mail" => array(
    "alert_to" => "alert@exmaple.com"
    "alert_title" => "[開発環境][アラート]システムエラー",
    "alert_from" => "alert@exmaple.com",
  ),
  "api" => array(
    "login_url" => "http://example.com/api/login",
    "payment_url" => "http://example.com/api/payment",
  ),
);

環境を識別するためのファイル

これはいくつかやり方あるみたいなんですけど、ざっくり以下みたいになると思います
1. fuel/app/bootstrap.phpで指定する
2. public_html/.htaccessで指定する
3. httpd.confで指定する

で、僕は2か3で指定するのがいいと思います。1では「Autoloader::add_classes」メソッドに追記することがけっこうあると思うのでリリース対象になることもままあるからです。それをいったら.htaccessもいじることはあると思うので、httpd.confに指定するのがベストな気もしますが。

デプロイしないファイルをまとめておく

ざっと
・バージョン管理関連のファイルなど(.gitや.gitignoreとか)
・logやtmpフォルダ
・ユーザがアップロードする画像などなど

これらは開発環境のものをステージングや本番環境へあげてしまうとダメなのであらかじめまとめておくと良いと思います。
で、僕の場合はrsyncでデプロイするのでこれらをrsyncの--exclude-fromオプションで指定するファイルに追記しておきます

rsync_exclude.txt

#git
.git
.gitignore
.gitkeep

#log
fuel/app/logs/*

#tmp
fuel/app/tmp/*

#user upload images
public_html/assets/img/users/*

#.htaccessで「SetEnv FUEL_ENV ***」を指定する場合
# public_html/.htaccess

ここまで準備できたら実際にrsyncで開発からステージング、ステージングから本番へとrysyncを実行するだけです

rsync -avc --exclude-from=rsync_exclude.txt 開発環境へのパス -e ssh username@hostname:ステージング環境へのパス
rsync -avc --exclude-from=rsync_exclude.txt ステージング環境へのパス -e ssh username@hostname:本番環境へのパス

こんな感じになると思います

以上です