Deployer

DeployerはPHP製のデプロイツールです。
基本動作はCapistrano3に似ていますが、
Deployerはもっと機能を絞った、シンプルな印象です。
2016年1月18日現在、3.0.10がリリースされています(公式サイト


基本動作

大まかなデプロイの流れとしては
・ホスト(CIサーバ等)からデプロイ先のサーバへSSH接続時
・デプロイ先にてリリース用ディレクトリを作成
・gitからソースをclone
・currentディレクトリのシンボリックリンクを最新のリリースディレクトリへ貼り直し
という流れになります。

ただ、それだとアプリケーションによってアップされた画像ファイルやログファイルが
リリースのたびに消えてしまいます。
そのためsharedというディレクトリが用意されており、
デプロイ時に対象ディレクトリを指定できるようになっています。

デプロイ先での配置例
deploy_path/
 ├── current -> /deploy_path/releases/20160117145103(最新のリリースフォルダ)
 ├── shared/
 |       └── fw/
 |           └── logs/(リリースフォルダ/fw/logsから参照されている)
 └── releases/
         ├── 20160117145103/
         ├── 20160117144938/
         └── 20160117134101/



インストール

下記のコマンドでpharファイル(約2.6MB)を1つダウンロードしてくるだけです。
curl -L http://deployer.org/deployer.phar -o deployer.phar
CentOSなどでコマンドとして使用するのであれば
chmod +x /usr/local/bin/dep
mv deployer.phar /usr/local/bin/dep
としておきましょう。


設定ファイルを用意

deploy.phpという名前でデプロイのための設定を記述します。
具体的にはPHPで下記のように、使用するタスクとサーバ情報、
gitのリポジトリ情報等を記述します。
設置場所はオプションで指定できます。
/usr/local/bin/dep --file=/your/server/path/deploy.php deploy stage_name -vvv
また、deployer.phpと同階層に設置するのであれば指定を省略できます。
php deployer.phar deploy sandbox -vvv


SSH接続設定

接続元サーバからデプロイ先サーバへSSH接続できるよう設定しておきます。
今回は両方のサーバに同名のユーザを作り、SSH公開鍵認証方式で接続できるよう設定
していました。
(deploy.phpのserver設定でパスワードも指定できるようですが未確認です)


実行方法

■デプロイ実行
php deployer.phar deploy stagename -vvv
実行するたびYYYYMMDDHHIISS形式でリリースフォルダを作成。
デフォルトで3世代管理されます。

■ロールバック実行
php deployer.phar rollback stagename -vvv
実行するたび1世代切り戻します。
最新のリリースフォルダは削除されます。
切り戻れるリリースフォルダが無い場合、ロールバックに失敗します。


所感

シンプルながら必要なデプロイ機能は最初から用意されている印象。
また、今回は紹介できませんでしたが、タスクの追加 / 拡張がやりやすそうなので、
プロジェクトごとの細かい対応や、migrationの実行設定なども問題なさそう。
あと、PHP製というところが地味に大事。
PHPプロジェクトにそのままdeployer.pharを含めてしまえばいいし、
エンジニアがメンテナンスに参加できるため属人化せずに済みそう。