轻松部署 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

我感谢自己平凡,敢爱敢恨没负担。
我感谢自己不凡,可爱可恨都包揽。

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

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

7个月前 评论

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

7个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!