phpのデプロイメントツールにDeployerというものがあります。
最近のphpプロジェクトでは、アプリケーションのデプロイメントでcomposerによるパッケージのインストールや、キャッシュのクリアなど行うべき作業が色々増えてきています。Deployerを使うことで、これらのよくあるデプロイメント時の作業を、特に細かな指定をしなくても自動で行ってくれるので非常に便利です。
ですが、phpのプロジェクトをgitリポジ問いのサブディレクトリで管理している場合、デフォルトの設定ではデプロイメントが正しく行えません。
これはDeployerがgitリポジトリからプロジェクトのソースを持ってくる場合、phpのプロジェクトがリポジトリのルートディレクトリにあることを想定しているためです。
このような場合はデプロイ定義ファイルであるdeploy.php
にディレクトリ移動のカスタムタスクを追加すると良いです。
deploy.phpにカスタムタスクを追加する
Deployerでプロジェクトのディレクトリをrelease_path
変数で管理しています。
また、gitリポジトリからphpプロジェクトのソースをcloneしているのはdeploy:update_codeタスクなので、このタスクが終わった時にrelease_path
変数を書き換えるとうまく行きます。
タスクは以下のように追加できます。
// deploy.phpに追記
// deploy:update_codeを実行後にプロジェクトのディレクトリを変更
task('change_dir', function () {
set('release_path', get('release_path') . DIRECTORY_SEPARATOR . 'path/to/project/dir');
run('cd {{release_path}}');
});
after('deploy:update_code', 'change_dir');
カスタムタスク追加のdeploy実行結果を確認
deployer.phar deploy
によるデプロイを行うと、以下のように先ほど追加したカスタムのタスクが実行していることがわかります。
$ php deployer.phar deploy
Deploying master on test-server
Executing task deploy:prepare
Executing task deploy:lock
Executing task deploy:release
Executing task deploy:update_code
Executing task change_dir <-- 追加したタスクがここで実行されている
Executing task deploy:shared
Executing task deploy:vendors
Executing task deploy:writable
Executing task artisan:storage:link
Executing task artisan:view:clear
Executing task artisan:cache:clear
Executing task artisan:config:cache
Executing task artisan:optimize
Executing task deploy:symlink
Executing task deploy:unlock
Executing task cleanup
Successfully deployed!
これでもうまく行かないとは、php deployer.phar deploy -vvv
のように、depoloyerコマンドに対して-vvv
オプションをつけると、deployerが内部で実行しているコマンドを確認できるので問題の調査が行えます。