轻松部署 Laravel 应用 | 《16. 初试 Envoy》
: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
即执行。
本作品采用《CC 协议》,转载必须注明作者和本文链接
要是部署内网服务器,用这个Envoy就不方便了吧
@zhaomengqiao 不太理解你的意思,内网服务器会对 Envoy 的正常运作有什么影响吗?
:heart:很棒的系列 请问后续文章何时发布呢?
@Toiu 感谢关注,由于最近工作调整,所以临时暂停编写计划。如果不出意外,6月会恢复缓慢更新,7月初左右恢复正常更新。再次感谢关注和支持。