laravel5
envoy

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

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ありがとう。