轻松部署 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 协议》,转载必须注明作者和本文链接
Former WinForm and PHP engineer. Now prefer Golang and Rust, and mainly working on DevSecOps and Kubernetes.
本帖由系统于 1年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

要是部署内网服务器,用这个Envoy就不方便了吧

4年前 评论

@zhaomengqiao 不太理解你的意思,内网服务器会对 Envoy 的正常运作有什么影响吗?

4年前 评论
Toiu

:heart:很棒的系列 请问后续文章何时发布呢?

4年前 评论

@Toiu 感谢关注,由于最近工作调整,所以临时暂停编写计划。如果不出意外,6月会恢复缓慢更新,7月初左右恢复正常更新。再次感谢关注和支持。

4年前 评论
hustnzj 4年前
Mengwei 4年前
Mengwei 4年前
Wi1dcard (作者) (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
67
粉丝
590
喜欢
1236
收藏
1133
排名:13
访问:32.4 万
私信
所有博文
社区赞助商