轻松部署 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.
本帖由系统于 4年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

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

5年前 评论

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

4年前 评论

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