部署
介绍
当你准备将 Laravel 应用程序部署到生产环境时,有一些重要的事情可以确保你的应用程序尽可能高效地运行。在本文档中,我们将介绍一些确保你的 Laravel 应用程序正确部署的良好起点。
服务器配置
Nginx
如果你将应用程序部署到运行 Nginx 的服务器上,可以使用以下配置文件作为配置 Web 服务器的起点。根据你的服务器配置,可能需要自定义此文件。如果你需要服务器管理方面的帮助,可以考虑使用 Laravel Forge 等服务:
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
文件时,可以更快地安装项目的依赖项。
优化配置加载
在将应用程序部署到生产环境时,确保在部署过程中运行 config:cache
Artisan 命令:
php artisan config:cache
此命令会将 Laravel 的所有配置文件合并为一个缓存文件,从而大大减少框架在加载配置值时访问文件系统的次数。
如果在部署过程中执行 config:cache
命令,确保只在配置文件中调用 env
函数。一旦配置被缓存,.env
文件将不会被加载,所有对 env
函数的调用将返回 null
。
优化路由加载
如果你正在构建一个具有许多路由的大型应用程序,确保在部署过程中运行 route:cache
Artisan 命令:
php artisan route:cache
此命令将所有路由注册减少为一个方法调用,并存储在缓存文件中,从而提高注册数百个路由时的路由注册性能。
由于此功能使用 PHP 序列化,因此只能缓存仅使用控制器路由的应用程序的路由。PHP 无法序列化闭包。
优化视图加载
在将应用程序部署到生产环境时,确保在部署过程中运行 view:cache
Artisan 命令:
php artisan view:cache
此命令会预编译所有 Blade 视图,因此它们不会按需编译,从而提高返回视图的每个请求的性能。
使用 Forge / Vapor 部署
如果你还没有准备好管理自己的服务器配置,或者不熟悉配置运行强大 Laravel 应用程序所需的各种服务,Laravel Forge 是一个很好的替代方案。
Laravel Forge 可以在各种基础设施提供商(如 DigitalOcean、Linode、AWS 等)上创建服务器。此外,Forge 安装并管理构建强大 Laravel 应用程序所需的所有工具,如 Nginx、MySQL、Redis、Memcached、Beanstalk 等。
Laravel Vapor
如果你想要一个完全无服务器、自动扩展的部署平台,专为 Laravel 调优,请查看 Laravel Vapor。Laravel Vapor 是一个由 AWS 提供支持的 Laravel 无服务器部署平台。在 Vapor 上启动你的 Laravel 基础设施,享受无服务器的可扩展性和简单性。Laravel Vapor 由 Laravel 的创建者精心调优,以便与框架无缝协作,因此你可以继续像往常一样编写 Laravel 应用程序。