轻松部署 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.
本帖由系统于 2年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4

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

5年前 评论

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

5年前 评论
Toiu

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

5年前 评论

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

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

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