当您准备将 Laravel 应用程序部署到生产环境时,您可以做一些重要的事情,以确保您的应用程序尽可能高效地运行。 在本文档中,我们将介绍一些很好的起点,以确保您的 Laravel 应用程序正确部署。
Laravel 框架有一些系统要求。您应确保您的 Web 服务器具备以下最低 PHP 版本和扩展:
如果你正在将应用程序部署到运行 Nginx 的服务器,你可以使用以下配置文件作为配置 Web 服务器的起点。大多数情况下,此文件需要根据你的服务器配置进行定制。如果你需要服务器管理方面的帮助,可以考虑使用像 Laravel Cloud 这样完全托管的 Laravel 平台。
请确保,如下方配置所示,您的网络服务器将所有请求指向您的应用程序的 public/index.php 文件。您绝不应尝试将 index.php 文件移动到项目根目录,因为从项目根目录提供应用程序会向公共互联网暴露许多敏感配置文件:
server {
listen 80;
listen [::]:80;
server_name example.com;
root /srv/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
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 ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_hide_header X-Powered-By;
}
location ~ /\.(?!well-known).* {
deny all;
}
}FrankenPHP 也可以用于服务您的 Laravel 应用程序。FrankenPHP 是一个用 Go 编写的现代化 PHP 应用程序服务器。要使用 FrankenPHP 服务 Laravel PHP 应用程序,您只需调用其 php-server 命令即可:
frankenphp php-server -r public/为了充分利用 FrankenPHP 支持的更强大功能,例如其 Laravel Octane 集成、HTTP/3、现代压缩,或将 Laravel 应用程序打包为独立二进制文件的能力,请查阅 FrankenPHP 的 Laravel 文档。
Laravel 需要写入 bootstrap/cache 和 storage 目录,因此您应该确保 Web 服务器进程所有者拥有对这些目录的写入权限。
当将您的应用程序部署到生产环境时,有多种文件应该被缓存,包括您的配置、事件、路由和视图。Laravel 提供了一个单一,便捷的 optimize Artisan 命令,它将缓存所有这些文件。此命令通常应作为应用程序部署过程的一部分进行调用:
php artisan optimizeoptimize:clear 方法可用于移除由 optimize 命令生成的所有缓存文件,以及默认缓存驱动器中的所有键:
php artisan optimize:clear在以下文档中,我们将讨论由 optimize 命令执行的每个细粒度优化命令。
当您将应用程序部署到生产环境时,您应该确保在部署过程中运行 config:cache Artisan 命令:
php artisan config:cache此命令会将 Laravel 的所有配置文件合并成一个单一的缓存文件,这将大大减少框架在加载您的配置值时必须对文件系统进行的访问次数。
[!警告]
如果在部署过程中执行config:cache命令, 应确保只在配置文件中调用env函数. 一旦配置被缓存,.env文件将不会被加载, 并且所有针对.env变量的env函数调用都将返回null.
您应该在部署过程中缓存您的应用程序自动发现的事件到监听器的映射。这可以通过在部署期间调用 event:cache Artisan 命令来实现:
php artisan event:cache如果你正在构建一个包含许多路由的大型应用程序,你应该确保在部署过程中运行 route:cache Artisan 命令:
php artisan route:cache此命令将您的所有路由注册缩减为一个缓存文件内的单个方法调用,从而在注册数百条路由时提升了路由注册的性能。
当您将应用程序部署到生产环境时,您应该确保在部署过程中运行 view:cache Artisan 命令:
php artisan view:cache此命令预编译所有 Blade 视图,这样它们就不会按需编译,从而提升了返回视图的每个请求的性能。
你的 config/app.php 配置文件中的调试选项决定了实际向用户显示多少有关错误的信息。默认情况下,此选项设置为遵循 APP_DEBUG 环境变量的值,该变量存储在你的应用程序的 .env 文件中。
[!WARNING]
在您的生产环境中,此值应始终为false。如果在生产环境中将APP_DEBUG变量设置为true,您将面临向应用程序的最终用户暴露敏感配置值的风险。
Laravel 包含一个内置的健康检查路由,可用于监控你的应用程序状态。在生产环境中,此路由可用于向正常运行时间监控器、负载均衡器或编排系统(例如 Kubernetes)报告你的应用程序状态。
默认情况下,健康检查路由位于 /up,并且在应用程序启动无异常时会返回 200 HTTP 响应。否则,将返回 500 HTTP 响应。您可以在应用程序的 bootstrap/app 文件中配置此路由的 URI:
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up', // [tl! remove]
health: '/status', // [tl! add]
)当向此路由发出 HTTP 请求时,Laravel 还会分发一个 Illuminate\Foundation\Events\DiagnosingHealth 事件,允许你执行与应用程序相关的额外健康检查。在此事件的 监听器 中,你可以检查应用程序的数据库或缓存状态。如果你检测到应用程序存在问题,你可以直接从监听器中抛出异常。
如果您想要一个完全托管、自动扩缩容且专为 Laravel 优化的部署平台,请查看 Laravel Cloud。Laravel Cloud 是一个强大的 Laravel 部署平台,提供托管计算、数据库、缓存和对象存储。
在 Cloud 上启动您的 Laravel 应用程序,并爱上其可扩展的简洁性。 Laravel Cloud 由 Laravel 的创建者进行精细调优,以与框架无缝协作,因此您可以继续编写您的 Laravel 应用程序,完全像您习惯的那样。
如果您倾向于管理自己的服务器但又不熟悉配置运行强大的 Laravel 应用程序所需的所有各种服务,Laravel Forge 是一个适用于 Laravel 应用程序的 VPS 服务器管理平台。
Laravel Forge 可以在各种基础设施提供商(例如 DigitalOcean、Linode、AWS 等)上创建服务器。此外,Forge 安装并管理构建健壮的 Laravel 应用程序所需的所有工具,例如 Nginx、MySQL、Redis、Memcached、Beanstalk 等。