Laravelアプリケーションのデプロイに deployer を使い始めました。deployerにはLaravel用のレシピがあるのですぐに始められました。キューワーカーの再起動も1行追加すれば動きます。
サブディレクトリのデプロイができない
標準のdeployerはGitリポジトリのルートにアプリケーションが配置されていることが前提になっています。composer.jsonがルートに存在しないとエラーでデプロイできませんでした。
以下の構成のように webapp/ にアプリケーションを配置しているとき、deployerの標準設定ではエラーになります。
git@grohiro.github.com/myapp/
webapp/ # ウェブ用のアプリ
coposer.json
app/
...
api/ # API用のアプリ
composer.json
app/
docs/ # 開発ドキュメントなど
README.md
...
myappの階層でcomposer install
を実行してエラーになる。webapp/の下で実行したい。
release_path 変数を書き換える
deployerのワーキングディレクトリは変数 release_path
で定義されています。composer コマンドもここで実行されるのでエラーになります。
では release_path
を書き換えればいいじゃないかと考えるんですが、ここを書き換えるとGitリポジトリからcloneしてくるディレクトリも変わってしまうので別の箇所がエラーになります。
git cloneが正常に動くようにしたままサブディレクトリをデプロイするため、git cloneが実行されたあとにrelease_path
を書き換えてしまいましょう。deplyerではafter()
関数を使用します。
// deployer.php
task('change_cwd', function () {
$subdir = get('release_path') . DIRECTORY_SEPARATOR . 'webapp';
set('release_path', $subdir);
run('cd {{release_path}}');
});
after('deploy:update_code', 'change_cwd');
deploy:update_code
タスクの後にディレクトリを変更することでcomposer install
も動くようになりました。
参考
リポジトリに登録されているレシピは以下のようなものがあります(2017年6月)。
- CakePHP
- CodeIgniter
- FuelPHP
- Laravel
- Symfony
- Wordpress
- Yii