laravel怎么通过Envoy实现自动化和零停机部署_laravel Envoy自动化部署方法

发布时间 - 2025-10-15 00:00:00    点击率:
首先配置 Laravel Envoy 实现自动化部署,通过 Envoy.blade.php 定义服务器和任务;接着编写零停机部署流程,包括进入维护模式、拉取代码、安装依赖、数据库迁移和恢复服务;采用符号链接指向当前版本实现原子发布,确保切换瞬间完成;配置 SSH 免密登录保障脚本无交互执行;最后集成 Git Hook 自动触发部署,推送代码后自动运行部署任务并记录日志。

如果您正在使用 Laravel 开发应用,并希望在更新代码时避免服务中断,可以通过 Laravel Envoy 实现自动化部署流程。Envoy 提供了一种简洁的 Blade 风格语法来定义部署任务,使您能够在远程服务器上自动执行 Git 拉取、Composer 安装、队列重启等操作。

本文运行环境:Dell XPS 13,Ubuntu 22.04

一、配置 Envoy.blade.php 脚本

Envoy 的核心是 Envoy.blade.php 文件,它定义了所有远程服务器要执行的任务。通过该文件可以组织多个部署步骤,确保部署过程标准化。

1、在项目根目录创建 Envoy.blade.php 文件。

2、使用 Blade 语法定义 @servers 分组,指定目标服务器的 IP 和 SSH 用户,例如:
@servers(['web' => 'user@192.168.1.100'])

3、使用 @task 定义具体任务,如部署代码、重启队列等。

二、编写零停机部署任务

为了实现零停机,需要在部署过程中保持服务可用性,通常采用维护模式切换和原子化发布策略。

1、在 @task 中进入维护模式:
php artisan down --render="maintenance" --retry=60

2、拉取最新代码:
cd /var/www/html && git pull origin main

3、安装依赖:
composer install --optimize-autoloader --no-dev

4、执行数据库迁移:
php artisan migrate --force

5、退出维护模式:
php artisan up

三、使用符号链接实现原子发布

通过符号链接指向当前版本目录,可确保代码切换瞬间完成,从而避免部分文件加载旧版本的问题。

1、每次部署时创建新版本目录,如 /var/www/html/releases/202505101200

2、将代码克隆或复制到该目录中。

3、执行 Composer 和 NPM 构建命令。

4、更新符号链接:
ln -sfn /var/www/html/releases/202505101200 /var/www/html/current

5、重启队列和缓存:
php artisan queue:restart && php artisan config:cache

四、设置 SSH 免密登录

自动化部署要求本地机器能无交互登录远程服务器,否则脚本会卡在密码输入环节。

1、生成本地 SSH 密钥:
ssh-keygen -t rsa -b 4096 -C "deploy@example.com"

2、将公钥上传至服务器的 ~/.ssh/authorized_keys 文件中。

3、测试连接:
ssh user@server-ip "ls /var/www"

4、确保远程服务器的 SSH 服务已启用且端口开放。

五、集成 Git Hook 触发部署

通过 Git 的 post-receive 钩子自动触发 Envoy 部署任务,减少人工干预。

1、在远程服务器上设置裸仓库作为接收端。

2、编辑 hooks/post-receive 文件,加入触发 Envoy 执行的命令。

3、推送代码后,钩子自动拉取并部署到目标路径。

4、可通过日志记录每次部署时间与提交哈希,便于追踪问题。


# php  # laravel  # html  # git  # composer  # npm  # 端口  # ubuntu  # ai  # var  # 数据库  # ssh  # 自动化  # 重启  # 器上  # 瞬间  # 运行环境  # 如果您  # 多个  # 可用性  # 可以通过  # 可通过  # 使您 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel定时任务怎么设置_Laravel Crontab调度器配置  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel如何使用Eloquent进行子查询  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Android自定义listview布局实现上拉加载下拉刷新功能  网站制作免费,什么网站能看正片电影?  手机网站制作与建设方案,手机网站如何建设?  昵图网官网入口 昵图网素材平台官方入口  如何为不同团队 ID 动态生成多个“认领值班”按钮  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  phpredis提高消息队列的实时性方法(推荐)  浅谈javascript alert和confirm的美化  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何获取免费开源的自助建站系统源码?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何在云主机快速搭建网站站点?  如何用PHP工具快速搭建高效网站?  Laravel如何使用.env文件管理环境变量?(最佳实践)  如何安全更换建站之星模板并保留数据?  利用python获取某年中每个月的第一天和最后一天  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel怎么使用Intervention Image库处理图片上传和缩放  iOS正则表达式验证手机号、邮箱、身份证号等  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  如何在橙子建站中快速调整背景颜色?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  南京网站制作费用,南京远驱官方网站?  如何快速生成橙子建站落地页链接?  如何在宝塔面板中创建新站点?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  如何快速使用云服务器搭建个人网站?  Laravel如何处理和验证JSON类型的数据库字段  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Laravel storage目录权限问题_Laravel文件写入权限设置  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  node.js报错:Cannot find module 'ejs'的解决办法  iOS UIView常见属性方法小结  jquery插件bootstrapValidator表单验证详解  焦点电影公司作品,电影焦点结局是什么?