Edited at

LaravelにEnvoyタスクランナーを導入する手順

More than 1 year has passed since last update.


Envoyタスクランナーって何?

デプロイ作業などをする際に、指定したサーバにsshで接続して、

コマンドを打ち込むなどの手作業を自動的にコマンド1発でやってくれる便利なツール。

コマンド一発で複数サーバに一気にデプロイできたり、さらに平行してコマンドを叩いてくれたりする。

コマンドはローカルから実行すればいいので、すごく楽。


まずはEnvoyをcomposerでglobalインストール

composer global require "laravel/envoy=~1.0"


globalインストールしたのにenvoyコマンドが見つかりませんと言われた場合

PATHが通ってないので設定する

zshの人は.bash_profileじゃなくて.zshrcに設定する。

echo 'export PATH=$HOME/.composer/vendor/bin:$PATH' >> .bash_profile

source .bash_profile


Laravelのアプリrootで以下を実行し、雛形を作成

envoy init {user_name}@{server ip}


アプリ直下のEnvoy.blade.phpを編集

Laravelのbladeシンタックスで書けばいいのでLaravelerにとって学習コストはゼロに近い。

@servers(['web' => '{user_name}@{server ip}'])

// サーバルートにあるhogeというフォルダの中身を見る
@task('hoge')
cd ~/hoge/
ls -la
@endtask

// cronに設定されてるバッチを確認する
@task('cron')
crontab -l
@endtask

// コンファーム付きで本番環境にデプロイする
@task('prod', ['on' => 'web', 'confirm' => true])
cd /var/www/honban/
git pull origin master
php artisan migrate --force
composer dump-autoload
gulp --production
@endtask

// コンファーム付きでstaging環境にデプロイする
@task('staging', ['on' => 'web', 'confirm' => true])
cd /var/www/staging/
git pull origin staging
php artisan migrate
composer dump-autoload
gulp --production
@endtask


実行コマンドは開発環境のアプリrootから叩く


  • ~/hogeのファイルリスト表示

envoy run hoge


  • crontabリスト表示

envoy run cron


  • 本番デプロイ

envoy run prod


  • stagingデプロイ

envoy run staging


プチ情報

sshを鍵認証にしておくとpasswordなども打ち込まなくていいので、非常に気持ちいい。


メリット


  • デプロイ手順を覚えなくていい。

  • 手順をミスって本番のコードを開発のbranchで上書きしてしまったなどの事故がなくなる。

  • コマンドを貼り付けていくだけなので、とにかく学習コストがゼロ。

  • 何をやってるのか、設定ファイルを見れば一目瞭然。

  • Laravelじゃなくても使える

  • 何をやるコマンドなのかしっかり理解していれば、細かい手順が分かっていなくてもデプロイが可能


まとめ

導入も簡単で、書くのも簡単でメリットいっぱい。Laravelありがとう。