轻松部署 Laravel 应用 | 《10. 手动部署 - 生产环境的必要优化》

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

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

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

感谢 :clap: !

在上一节中,我们成功地以手动的方式完成了部署。不过,在生产环境下,我们还需要针对 Laravel 进行一些必要的优化。

本篇内容部分摘选自 Laravel 5.8 部署文档,你可以阅读该文档获取更多信息。

Nginx 配置

对于 Laravel 应用来说,优化 Nginx 配置所带来的性能提升可谓微不足道。因此不建议在中小型项目中花费较多精力调优 Nginx。

不过,有一点值得注意:

server {
    # ...
    location ~* \.(js|css)$ {
        expires 24h;
    }
    #...
}

通过以上配置,可使 Nginx 匹配请求 URI,若以 jscss 结尾,则将响应头 Expires 的值设置为 24h 返回。客户端浏览器将根据该值建立资源缓存,并在指定时间后过期,因此可节省部分服务器静态资源流量。24h 可根据需要调整,若使用 CDN 服务分发静态资源,则不必配置此项。

Laravel 的配置缓存与路由缓存

开启 配置缓存路由缓存 能够在一定程度上提升 Laravel 的性能。

$ php artisan config:cache # 生成配置缓存

注意:当开启配置缓存后,env() 函数将会失效;它将会永远返回 null;因此务必确保在非配置文件内,未直接调用该函数。

$ php artisan route:cache # 生成路由缓存

注意:路由缓存仅支持控制器风格;若路由注册时存在闭包(Closures),则无法使用该功能。

注意:生成缓存后,对配置和路由的修改将不会生效,需再次执行缓存命令,或使用 php artisan cache:clear 命令清除它们。

Composer

在安装依赖时,建议使用以下命令:

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

其中,--optimize-autoloader 表示生成优化后的自动加载器,虽然生成过程可能较慢,但换来的是提高运行时的效率。--no-dev 表示不安装 composer.json 中 require-dev 声明的扩展包,在生产环境中我们不需要这些开发依赖。

再谈文件权限

文件权限直接关系到服务器安全与否。通常情况下,我们应当遵循「最小权限原则」,即权限越小越好。对于 Laravel 来说,我个人比较倾向的权限配置为 750

$ chmod -R 750 /var/www/deployment

你可以通过在线工具 Chmod Calculator 来解析八进制权限数字:

以上是 750 所代表的权限,即文件所有者可 读、写、执行,文件所有组可 读、执行,其余用户 均不可

也就是说,运行 Nginx 和 PHP-FPM 的 www-data 用户,可读、写、执行;www-data 用户组内的用户可读、执行。

更加严格安全的另一个权限推荐是 640,不过务必确保 www-data 用户具备 bootstrap/cachestorage 目录的 读、写 权限,在 Laravel 应用运行过程中是需要读写它们的。

杂项

根据应用本身的逻辑不同,涉及的 Laravel 功能也不一样。针对部分项目,你有可能还需要执行以下 Artisan 命令:

$ php artisan storage:link # 软链接 app/storage 到 public 目录,以便公开访问
$ php artisan migrate # 执行迁移
$ php artisan db:seed # 执行数据填充
本作品采用《CC 协议》,转载必须注明作者和本文链接
Former WinForm and PHP engineer. Now prefer Golang and Rust, and mainly working on DevSecOps and Kubernetes.
本帖由系统于 5年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

感觉这些东西很有用,收藏了~

6年前 评论

请问老师,在手动部署04-10的系列文章里面,怎么没看到安装MYSQL数据库这一过程?

5年前 评论

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