轻松部署 Laravel 应用 | 《14. 代码更新时的注意事项》

:clap: 本系列持续更新中,欢迎关注:https://github.com/wi1dcard/laravel-deploy...

由于课程上下文关联比较紧密,在开始前请先阅读 本文

你的支持是我写作的动力;关注我的客官们,请在右上角点个赞,将会让文章在首页展示,帮助更多人。

感谢 :clap: !

在上一节中,我们使用 git reset 命令轻易地实现了代码文件的更新和回滚。然而,对于大多数 Laravel 应用来说,版本升级并非「更新代码」那么简单。本小节列出一部分常见注意事项,请仔细阅读。

Artisan down

在更新代码之前,建议使用 artisan down 命令,使 Laravel 进入维护模式:

$ cd /var/www/deployment
$ php artisan down

命令行将会输出:

Application is now in maintenance mode.

此时 Laravel 将会暂停所有任务(包括 Queue、Schedule 等),并拒绝请求流量进入正常的处理逻辑。你可以尝试在浏览器内查看,将会看到 503 Service Unavailable 而非正常的应用页面,例如:

接下来你可以执行正常的更新逻辑,而不必担心用户访问得到错误的响应了。

Composer install

在代码更新后,必不可少的一步操作便是同步「更新」依赖。再次运行安装依赖时使用的命令即可:

$ composer install --optimize-autoloader --no-dev

注意:此处并非使用 composer update,切勿混淆。composer update 将会忽略 composer.lock 文件,将依赖包更新至与版本约束相兼容的最新版本;因此该操作应当确保仅在本地执行。更多细节请阅读 Composer 中文文档

清理缓存

此处提到的缓存分为两类:

  1. Laravel 框架缓存(配置缓存、路由缓存、视图缓存等)
  2. OPCache 缓存

对于第一类,可直接使用以下命令:

$ php artisan optimize:clear

注意:清理缓存后,请务必使用之前小节中提到的 php artisan config:cachephp artisan route:cache 再次重建缓存,避免影响性能。

对于第二类,其中一种方法是重载 PHP-FPM 服务:

$ service php-fpm reload

另一种更加优雅且无需重启服务的方法是通过 PHP 的 opcache_reset 函数。在命令行中,可使用一款名为 CacheTool 的小工具,它提供了用于管理缓存的 CLI 命令:


$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool.phar

$ chmod +x cachetool.phar

$ php cachetool.phar opcache:reset --fcgi

其实,CacheTool 还支持 APC、APCu,且具备查询和统计功能,你可以阅读它的文档获取更多用法。

数据迁移

若你的应用依赖于 Laravel 提供的 Migration 功能,那么还需要执行迁移命令,将变更应用到数据库:

$ php artisan migrate

文件权限

又是文件权限。是的,没错。

由于我们使用 Git 部署应用代码,而 Git 仅存储「文件所有者是否具备运行权限」,对于读、写以及其它身份的权限,Git 并不关心。

提示:有兴趣了解 Git 如何处理文件权限,可阅读 这篇博客(英文)。

因此,保险起见,务必在每次更新或回滚后,使用 chmodchown 等命令,重置文件权限。

提示:其实这是直接使用 Git 更新代码的「缺点」之一,在后续课程中将会解决,欢迎继续关注。

Artisan up

artisan down 的对应操作是 artisan up,在升级完毕、确认无误后,最后一步操作便是执行此命令,使你的站点恢复正常访问:

$ php artisan up
本作品采用《CC 协议》,转载必须注明作者和本文链接
Former WinForm and PHP engineer. Now prefer Golang and Rust, and mainly working on DevSecOps and Kubernetes.
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

重建缓存写了两个 php artisan route:cache

5年前 评论

@KongWeiMin 感谢提醒,稍候修复。

5年前 评论

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