FuelPHPをRocketeerで簡単にデプロイする

FuelPHP & CodeIgniter ユーザの集い #3 on February 15, 2014

Mamoru Otsuka (@madmamor)

Outline

  1. About Me
  2. 旧来のデプロイ
  3. Rocketeer
  4. Rocketeerのデプロイイメージ
  5. FuelPHPでRocketeer
  6. デモ

About Me

Name : Mamoru Otsuka
WEB : http://madroom.net/
Twitter : @madmamor
Facebook : mamoru.otsuka
Blog : madroom project
GitHub : @mamor
Android Apps : madroom project
Location : TAMACEN & SYIBUYA

旧来のデプロイ

  • FTPで手動アップロード
    • ヒューマンエラーが出やすくなる
    • 最新の状態がレポジトリとズレる
  • 独自スクリプトで自動化
    • スクリプトのメンテナンスが大変になる
    • 作った人がいなくなるとよくわからなくなる

そこで

  • Capistranoを使う
    • 最も使われていると思われるデプロイツール(Ruby製)
    • 簡単な手順なら設定だけでデプロイを自動化できる
    • でも、ComposerやPHPUnitを実行するにはカスタムタスクが必要
    • カスタムタスクはRubyで書く(そんなに難しくはないけど)
    • (PHPプロジェクトにこっそり導入するとチーム内で文句が出そう)

PHPプロジェクト向けに特化したCapistranoっぽいツールはないの?

Rocketeer

  • PHPプロジェクト向けに特化したCapistranoっぽいツール
  • PHP製
  • MITライセンス
  • 読み方は「ろけってぃあ」意味は「ロケットを飛ばす人」みたいな
  • 公式: http://rocketeer.autopergamene.eu/
  • GitHub: https://github.com/Anahkiasen/rocketeer
  • ComposerやPHPUnitの実行にも標準対応
  • カスタムタスクもPHPで書ける
  • GitHubのスター数691(2014/02/14現在)
  • Maxime Fabre氏が開発
  • 2013年6月、v0.1がリリース
  • 2014年1月、v1.0がリリース
  • 2014年2月14日現在、v1.1.2

Rocketeerのデプロイイメージ

  1. 手元(ローカル)で発射ボタンを押す(コマンドを打つ)
  2. ミサイル(レポジトリのソース)が飛ぶ
  3. 遠隔地(リモート)に着弾(デプロイ)する

精度の高い弾道ミサイルみたいな感じ?

同名のSF漫画もあったみたいです。http://bit.ly/1fc8wAi

(ウ◯トラマン)

具体的には

  1. デプロイ先にSSHでログイン
  2. 実行したいカスタムタスクがあれば、実行 (before deploy)
  3. git clone (サブモジュール含む)
  4. composer install (composer.lockはバージョン管理しておきましょう)
  5. PHPUnitを実行したければ、実行。失敗したらデプロイ中止
  6. ログディレクトリ等のパーミッションを調整
  7. ログディレクトリ等、デプロイを跨いでの共有化
  8. 実行したいカスタムタスクがあれば、実行 (before symlink)
    カスタムタスクが false を返せばデプロイ中止(v1.1から)
    grunt + jasmine とか組み込めます
  9. symlink を張り替えて、デプロイ完了
  10. 実行したいカスタムタスクがあれば、実行 (after deploy)
    このタイミングで grunt + jasmine とかやってもデプロイは既に完了しているのであまり意味無いです

FuelPHPでRocketeer

下準備

ローカルでやっておくこと

  1. php.ini で "phar.readonly = Off"
  2. デプロイしたいFuelPHPプロジェクトをGitHubやBitbucketにコミット

リモート(デプロイ先)でやっておくこと

  1. Git, PHP(とmcrypt extension), Composerのインストール (Composer はプロジェクト直下の composer.phar でも良いかも)
  2. ~/.ssh/config に "StrictHostKeyChecking no" (あるいは、一度手動でcloneして、ホストの登録をしておく)
  3. デプロイ先のpublicディレクトリへのsymlink

RocketeerのDLと設定ファイルの生成

  1. http://rocketeer.autopergamene.eu/versions/rocketeer.phar から rocketeer.phar をDL (rocketeer.phar は自身に認証情報をキャッシュするので .gitignore でバージョン管理しないようにした方が良いかも)
  2. コマンドで "php rocketeer.phar ignite" と打ち、設定ファイルを生成

以下の設定ファイルが生成されます。(rocketeer/tasks.phpを除く)

  • .rocketeer/config.php ... リモートの接続情報等を設定する
  • .rocketeer/hooks.php ... 今日のデモでは使っていません
  • .rocketeer/paths.php ... PHP, PHPUnit, Composer 等のパスを設定する
  • .rocketeer/remote.php ... デプロイに関する様々な設定をする
  • .rocketeer/scm.php ... レポジトリの設定をする
  • .rocketeer/stages.php ... 今日のデモでは使っていません
  • .rocketeer/tasks.php ... カスタムタスクを登録する

これらの設定ファイルとカスタムタスクを組み合わせてデプロイします

デモ

https://github.com/mamor/fuelphp-advent-calendar-2013-rocketeer-sample を使って

http://madroom-project.blogspot.jp/2013/12/fac20131221.html のようなことをデモしてみます。

ご清聴ありがとうございました。