轻松部署 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.
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

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

5年前 评论

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

5年前 评论

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