Laravel部署后代码更新怎么操作_Laravel零停机部署流程【教程】

夜枫酱_1572

夜枫酱_1572

2026-03-26

319人浏览

原创

线上部署必须分步执行:先拉取新代码到带时间戳目录,再执行迁移和缓存重建,最后原子切换current软链;同时需重启supervisord托管的队列/定时任务进程,并确保nginx root指向public子目录及storage软链正确。

laravel部署后代码更新怎么操作_laravel零停机部署流程【教程】

更新代码时服务中断,是因为没用 git pull + php artisan migrate 的顺序控制

直接在生产环境 git pull 后立刻跑 php artisan migrate,极大概率触发数据库结构变更与旧代码逻辑不匹配——比如新迁移加了非空字段,但旧代码还在往该表插入数据,请求直接 500。真实线上不是本地,没回滚按钮。

必须把「代码就位」和「结构就位」拆开:先切到新代码(但不激活),再安全执行迁移,最后原子切换。Laravel 自身不提供零停机能力,得靠部署层配合。

  • 每次发布前,在新目录拉取代码:git clone 或 git archive 到带时间戳的目录(如 /var/www/myapp/releases/20241105-1422)
  • 在该目录内执行 composer install --no-dev --optimize-autoloader 和 php artisan migrate --force
  • 确保 .env 是软链到共享目录(/var/www/myapp/shared/.env),不随 release 变动
  • 最后用原子操作切换 current 软链:ln -sf /var/www/myapp/releases/20241105-1422 /var/www/myapp/current

队列、定时任务、WebSocket 进程没重启,导致新代码不生效

Web 请求走 Nginx → PHP-FPM,切了 current 就立即生效;但 php artisan queue:work、php artisan schedule:run 或 php artisan websockets:serve 这些是长进程,它们加载的是启动时的代码路径,不会自动感知 current 变更。

常见现象:页面显示新功能,但队列任务仍执行旧逻辑,或 Cron 报错找不到新模型里的方法。

laravel-specialist
laravel-specialist

精通 Laravel 10+,遵循现代 PHP 实践的 Laravel 专家。擅长优雅语法、Eloquent ORM、队列系统及企业级特性...

下载
  • 所有后台进程必须用进程管理器(如 supervisord)托管,且其配置中 command 指向 /var/www/myapp/current/artisan
  • 每次部署后,强制重启相关进程:sudo supervisorctl restart myapp-queue、sudo supervisorctl restart myapp-schedule
  • 别用 nohup php artisan queue:work & 这种裸启方式——它永远卡在第一次启动的 release 目录里

php artisan config:cache 和 view:cache 在部署后必须重生成

缓存文件(bootstrap/cache/config.php、storage/framework/views/xxx.php)是硬编码路径+内容的 PHP 文件,一旦 release 目录变了,缓存里还记着旧路径下的配置或视图,轻则配置读错,重则 include(): Failed opening 致命错误。

尤其当 .env 有变动(如 APP_ENV=production → APP_ENV=staging),不重刷 config cache,环境变量根本不会生效。

  • 部署脚本末尾必须加:php /var/www/myapp/current/artisan config:clear && php /var/www/myapp/current/artisan config:cache
  • 如果用了 Blade 编译视图(非开发模式),顺手清 view cache:php /var/www/myapp/current/artisan view:clear && php /var/www/myapp/current/artisan view:cache
  • 注意:不要在 config:cache 前运行 config:clear ——后者会删掉 config.php,但前者依赖它存在才能合并,直接报错

Nginx 静态资源 404,因为没更新 root 或漏了 public 子目录

很多人把 Nginx 的 root 指向 /var/www/myapp/current,但 Laravel 的入口是 public/,结果所有 CSS/JS/图片全 404,连登录页都打不开。

另一个坑是:部署脚本复制了整个 release 目录,但忘了把 public/storage 软链重新指向 ../shared/storage/app/public,导致用户上传的图片丢失。

  • Nginx 配置里 root 必须设为 /var/www/myapp/current/public,不是 current 根目录
  • 每次部署后检查软链:ls -l /var/www/myapp/current/public/storage,应指向 ../../shared/storage/app/public
  • 如果用了 php artisan storage:link,它只在当前目录建链,不能替代手动维护共享存储链
部署最难的不是命令怎么写,是记住哪些东西「不随代码一起换」:环境配置、进程状态、缓存文件、静态资源链。漏一个,就等于没真正切过去。

相关专题

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

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

2024.04.09

857

10

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

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

2024.04.09

855

9

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

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

2024.04.09

2508

10

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

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

2024.04.10

4361

7

laravel入门教程
laravel入门教程

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

2025.08.05

6310

22

laravel实战教程
laravel实战教程

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

2025.08.05

4176

13

laravel面试题
laravel面试题

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

2025.08.05

7829

7

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

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

2026.03.04

1496

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

215

6

热门下载

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

精品课程

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

共1课时 | 213人学习

Composer手册
Composer手册

共0课时 | 0人学习