轻松部署 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 中文文档。
清理缓存
此处提到的缓存分为两类:
- Laravel 框架缓存(配置缓存、路由缓存、视图缓存等)
- OPCache 缓存
对于第一类,可直接使用以下命令:
$ php artisan optimize:clear
注意:清理缓存后,请务必使用之前小节中提到的
php artisan config:cache
和php 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 如何处理文件权限,可阅读 这篇博客(英文)。
因此,保险起见,务必在每次更新或回滚后,使用 chmod
和 chown
等命令,重置文件权限。
提示:其实这是直接使用 Git 更新代码的「缺点」之一,在后续课程中将会解决,欢迎继续关注。
Artisan up
artisan down
的对应操作是 artisan up
,在升级完毕、确认无误后,最后一步操作便是执行此命令,使你的站点恢复正常访问:
$ php artisan up
本作品采用《CC 协议》,转载必须注明作者和本文链接
重建缓存写了两个
php artisan route:cache
哦@KongWeiMin 感谢提醒,稍候修复。