Deployerでrsyncを使う
昨日の記事「PHPプロジェクトを簡単にデプロイするならDeployerがお薦め」が思ったより「はてブ」されたので、フォローの記事を書いておきます。
昨日のまとめに書きましたが、
- Deployerは非常にシンプルなツールで必要最低限の機能も不足しているかも知れません。
なので、自分の要求に足りない機能というのが、たぶん出てくると思います。
標準のワークフローでは、デプロイ先のサーバからgit clone
してソースを取得してデプロイします。
PHPプロジェクトを簡単にデプロイするならDeployerがお薦め — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something試してみたけど、デプロイ先のサーバー側でgit cloneコマンド実行するからcloneできる設定をいちいちするのがめんどいな。git cloneはデプロイサーバーの1回で済ませたい。.gitもついちゃうし。。
2015/06/02 22:12
というような感想も出てきます。
- でも大丈夫。Deployerは簡単にレシピを拡張できます。
足りないものや合わないものは自分で書いていけばいいじゃん、ということです。で、それが簡単に書けるのがDeployerです。
なんとなくUnix的な感じです。機能が多い方がいいという人には今のところ向きません。
rsyncを使ってみる
ということで、例えば、rsyncを使うようなタスクを書いてみます。
標準のワークフローに乗っかりやすいように、
- ローカルからデプロイ先にGitリポジトリをrsync
- デプロイ先ではrsyncしたGitリポジトリからgitでデプロイ
というフローにします。これだと標準のワークフローに追加するだけで使えます。
rsync元(rsync_from
)とリポジトリ(repository
)を定義します。
set('rsync_from', '/home/deploy/your-project'); // rsync元(ローカル)
set('repository', '/var/www/repository/your-project'); // rsync先(サーバ上)
rsyncするタスクrsync
を定義します。
task('rsync', function () {
$server = \Deployer\Task\Context::get()->getServer()->getConfiguration();
$host = $server->getHost();
$port = $server->getPort();
$user = $server->getUser();
// rsync to server
$rsync_from = get('rsync_from');
$rsync_to = get('repository');
runLocally(
"rsync -e \"ssh -p $port\" -avz --delete \
--exclude 'vendor' --exclude '*~' --exclude '*.bak' \
\"$rsync_from/\" \"$user@$host:$rsync_to\""
);
})->desc('Rsync repository to server');
タスクrsync
をタスクdeploy
の前に実行するように設定します。
before('deploy', 'rsync');
これで完了です。
別にgitいらないという場合は、common.php
で定義されているタスクdeploy:update_code
をオーバーライドして、rsyncで直接ソースを更新するようにすればOKです。
まとめ
- Deployerを使うとPHPプロジェクトを簡単にデプロイできます。
- Deployerは非常にシンプルなツールで必要最低限の機能も不足しているかも知れません。
- でも大丈夫。Deployerは簡単にレシピを拡張できます。
関連
Date: 2015/06/03