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表单验证详解
焦点电影公司作品,电影焦点结局是什么?

