輕鬆部署 Laravel 應用 | 《16. 初試 Envoy》

Wi1dcard發表於2019-04-05

:clap: 本系列持續更新中,歡迎關注:https://github.com/wi1dcard/laravel-deploy...

由於課程上下文關聯比較緊密,在開始前請先閱讀 本文

你的支援是我寫作的動力;關注我的客官們,請在右上角點個贊,將會讓文章在首頁展示,幫助更多人。

感謝 :clap: !

上一小節中,我們成功在本地全域性安裝了 Laravel Envoy;在這一小節,我將帶領大家初步嘗試使用 Envoy。

注意:本小節涉及命令均在本地執行。

編寫 Envoy.blade.php

與 Envoy 打交道,接觸最頻繁的當屬 Envoy.blade.php 檔案了。Envoy 將會按照該檔案內編寫的任務指令在遠端伺服器上執行。

提示:為方便描述,隨後課程中統稱它為「Envoy 檔案」。

首先,執行以下命令,Envoy 會為我們生成一個初始的模板:

$ envoy init laravel-deployment.wi1dcard.cn

請將 laravel-deployment.wi1dcard.cn 替換為你的伺服器公網 IP 或域名;開啟新建立的 Envoy 檔案,內容將會類似:

@servers(['web' => 'laravel-deployment.wi1dcard.cn'])

@task('deploy')
    cd /path/to/site
    git pull origin master
@endtask

可以看到,與 Blade 模板語法類似 —— 包含名為 @servers@task 的兩條指令。其中:

  • @servers 指令帶有一陣列引數,用於定義遠端伺服器;由於我們需要使用之前建立的「部署專用使用者(deployer)」,因此需要將其修改為:deployer@...
  • @task 指令帶有一字串引數,用於定義任務名稱;你可以給它換個名字,例如 update。隨後的兩行(直到 @endtask)可用於定義該任務在伺服器上執行的命令。
  • /path/to/site 需修改為伺服器中的站點根目錄,即 /var/www/deployment

經過一番修改後,結果如下:

@servers(['web' => 'deployer@laravel-deployment.wi1dcard.cn'])

@task('update')
    cd /var/www/deployment
    git pull origin master
@endtask

別忘記儲存。接下來,在命令列內執行以下命令:

$ envoy run update

你將會看到類似這樣的輸出:

[deployer@laravel-deployment.wi1dcard.cn]: From github.com:wi1dcard/hello-deployment
[deployer@laravel-deployment.wi1dcard.cn]: * branch            master     -> FETCH_HEAD
[deployer@laravel-deployment.wi1dcard.cn]: Already up-to-date.

是的,Envoy 自動登入到遠端伺服器、執行了 update 任務內定義的命令,並將輸出展示在了你面前。

提示:由於先前小節我們配置了金鑰登入,因而此時無需輸入密碼,十分方便。

任務執行前確認

部分關鍵任務可能具備一定「破壞性」,例如 php artisan migrate 等;為了防止手滑,需要確認無誤後再開始執行。

@task 指令支援第二個引數,可用於配置一些選項。例如,我們修改 Envoy 檔案,將 confirm 設定為 true


@task('update', ['confirm' => true])

再次執行 envoy run update 命令,將會出現以下提示:

Are you sure you want to run the [update] task? [y/N]:

提示:有沒有覺得神似 Laravel Console 內常用的 $input->confirm() 方法?

意為詢問你是否確認執行 update 任務;一如先前小節所提到的,預設選項為 N(不執行),輸入 y 即執行。

我感謝自己平凡,敢愛敢恨沒負擔。
我感謝自己不凡,可愛可恨都包攬。

相關文章