Laravel 完整部署
简介
当准备将Laravel应用程序部署到生产环境时,我们可以做一些重要的事情来确保应用程序尽可能高效地运行。 在本文档中,我们将介绍一些确保Laravel应用程序正确部署的很好的方式。
服务配置
Nginx
如果要将应用程序部署到运行Nginx的服务器,则可以使用以下配置文件配置Web服务器。 通常情况下需要根据服务器的配置自定义此文件。
server {
listen 80;
server_name example.com;
root /srv/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
优化
自动加载器 优化
在部署到生产环境时,要确保我们正在优化Composer的类自动加载器映射,以便Composer可以快速找到指定类的加载文件:
$ composer install --optimize-autoloader --no-dev
除了优化自动加载器之外,还应始终确保在项目的源代码控制存储库中包含composer.lock文件。 存在composer.lock文件时,可以更快地安装项目的依赖项。
配置项加载优化
将应用程序部署到生产环境时,应确保在部署过程中运行 Artisan命令 config:cache
:
$ php artisan config:cache
此命令会将所有Laravel的配置文件组合到一个缓存文件中,这大大减少了框架在加载配置值时必须对文件系统进行的访问次数。
警告
: 如果在部署过程中使用config:cache命令,那么我们必须要保证只是在 配置文件中使用env()函数。因为一旦config:cache命令执行了,那.env文件将不会再被加载,这时所有的env()函数都将返回null。
路由加载优化
如果要构建具有许多路由的大型应用程序,则应确保在部署项目中运行 Artisan命令route:cache
:
$ php artisan route:cache
此命令将所有路由注册到一个缓存文件内的单个方法中,从而提高了注册数百条路由时的路由加载的性能。
警告
:由于此功能使用PHP序列化,因此只能为仅使用基于控制器的路由的应用程序缓存路由。 PHP无法序列化Closures。
视图加载优化
将应用程序部署到生产环境时,应确保在部署过程中运行Artisan命令view:cache :
$ php artisan view:cache
此命令将对所有Blade视图进行预编译,这样就不会按需编译它们,从而提高了为每个请求返回视图的速度。