讲师中心 微信公众号
AI工具推荐 视频效率加速

Envoyer如何实现零停机_LaravelEnvoyer无缝部署策略【实战】

落雪君_7029

落雪君_7029

发布时间:2026-04-29 16:06:36

|

904人浏览过

|

来源于php中文网

原创

Envoyer 实现零停机部署依赖符号链接切换、独立发布目录和共享路径隔离三者协同;迁移须在 current 切换前完成且向前兼容,.env 和 storage 必须设为共享路径,队列与定时任务需手动重启或更新。

envoyer如何实现零停机_laravelenvoyer无缝部署策略【实战】

Envoyer 本身不提供“零停机”的魔法开关,它只是把一套已被验证的原子化发布流程封装成了图形界面。真正起作用的是符号链接切换 + 独立发布目录 + 共享路径隔离 —— 这三者缺一不可。如果你在 Envoyer 面板里勾了“Zero Downtime Deployment”但没配对共享目录或迁移仍在新代码加载后执行,那还是会有请求失败。

为什么 current 软链切换能实现零停机

PHP-FPM 处理每个请求时,会根据 Nginx 的 root /home/forge/example.com/current/public 去加载文件。只要 current 指向的是一个完整、已安装依赖、已运行迁移、已生成缓存的目录,切换动作(ln -nfs releases/20260429123456 current)就是纳秒级的。用户不会感知到任何中断,因为旧进程还在处理完手头请求,新请求立刻落到新代码上。

容易踩的坑:

  • 没把 .env 和 storage/ 设为共享路径 → 新 release 目录读不到配置或上传文件,直接报错
  • 在 Envoyer 的“After”阶段才跑 php artisan migrate → 此时 current 已切过去,旧代码可能还在执行,而新迁移已改表结构,导致 500
  • 启用了“Run migrations in queue”,但队列进程没配置为优雅重启 → 迁移卡在队列里,或者旧 worker 仍用老代码执行任务

php artisan migrate 必须在 current 切换前完成

Envoyer 默认把迁移放在“Deploy”阶段末尾,也就是新目录准备就绪但尚未激活时。这是安全窗口:代码已就位,数据库还没动,旧服务照常运行。你必须确认这个阶段确实执行了迁移,并且迁移本身是向前兼容的。

关键检查点:

Laravel Cloud
Laravel Cloud

Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。

下载
  • 打开项目设置 → “Deployment Scripts” → 找到 “Before” 或 “Deploy” 区块,确认有 php artisan migrate --force 且不在 “After”
  • 如果迁移含破坏性操作(如删字段、改类型),务必拆成两步:先加字段并兼容旧逻辑,上线后再删;Envoyer 不会帮你做语义分析
  • 避免在迁移里写 DB::table(...)->get() 加载大量数据 —— 这会阻塞部署,超时后 Envoyer 可能标记失败并回滚

共享路径(shared)不是可选项,是强制项

Envoyer 在服务器上自动创建 /home/forge/example.com/shared,但不会自动把你的 .env 或 storage 放进去。你得手动上传并配置路径映射,否则每次部署都会覆盖掉这些运行时必需的数据。

正确做法:

  • 首次部署前,把生产 .env 上传到 /home/forge/example.com/shared/.env
  • 在 Envoyer 设置页 → “Shared Files” 里填入:.env, storage(注意不带斜杠)
  • 确保 storage 目录权限为 775,属主是 forge:www-data,否则新 release 下的 php artisan storage:link 会失败
  • 不要在 “Deployment Script” 里写 cp -r shared/storage ./storage —— Envoyer 会在每次部署时自动软链,重复操作反而可能破坏结构

队列与定时任务不随 current 自动更新

Nginx 请求走的是 PHP-FPM,它每次请求都重新加载 current 下的代码;但 php artisan queue:work 是长进程,启动后就锁死了当时的代码路径。你切了 current,它还跑在上个 release 里。

解决方案只有两个:

  • 在 Envoyer 的 “After” 脚本里加:sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl restart myapp-queue(假设你用 Supervisor 管理)
  • 或者更稳妥地,在 “Before” 阶段就停掉旧队列:sudo supervisorctl stop myapp-queue,再在 “After” 启动新队列
  • 同理,php artisan schedule:run 如果是用 Cron 调用的,需确认 Cron 条目里路径写的是 /home/forge/example.com/current/artisan,而不是固定死的某个 release 目录

最常被忽略的一点:Envoyer 的“健康检查”默认只访问 / 返回 200 就算成功。但它不校验数据库连接、缓存是否生效、队列是否已重启。一次看似成功的部署,可能让后台任务静默失效数小时——直到你发现邮件没发、通知没推、统计漏了数据。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

877

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

855

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2508

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4741

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

6950

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

4556

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

8569

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

1516

2026.03.04

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 221人学习

Composer手册
Composer手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn