部署
服务器要求
Laravel 框架有一些系统要求。你应该确保你的 Web 服务器具备以下最低 PHP 版本和扩展:
-
PHP >= 8.2
-
Ctype PHP 扩展
-
cURL PHP 扩展
-
DOM PHP 扩展
-
Fileinfo PHP 扩展
-
Filter PHP 扩展
-
Hash PHP 扩展
-
Mbstring PHP 扩展
-
OpenSSL PHP 扩展
-
PCRE PHP 扩展
-
PDO PHP 扩展
-
Session PHP 扩展
-
Tokenizer PHP 扩展
-
XML PHP 扩展
服务器配置
Nginx
如果你将应用程序部署到运行 Nginx 的服务器,可以使用以下配置文件作为配置 Web 服务器的起点。根据你的服务器配置,这个文件很可能需要进行自定义。如果你希望获得服务器管理的帮助,可以考虑使用官方的 Laravel 服务器管理和部署服务,例如 Laravel Forge。
请确保像下面的配置一样,Web 服务器将所有请求指向你应用程序的 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
FrankenPHP 也可以用于提供你的 Laravel 应用程序。FrankenPHP 是一个用 Go 编写的现代 PHP 应用程序服务器。要使用 FrankenPHP 提供 Laravel PHP 应用程序,你可以简单地调用它的 php-server
命令:
frankenphp php-server -r public/
要利用 FrankenPHP 支持的更强大功能,例如其 Laravel Octane 集成、HTTP/3、现代压缩,或者将 Laravel 应用程序打包为独立的二进制文件,请参考 FrankenPHP 的 Laravel 文档。
优化
在将应用程序部署到生产环境时,有多种文件应进行缓存,包括配置、事件、路由和视图。Laravel 提供了一个方便的 optimize
Artisan 命令来缓存所有这些文件。通常,应该在应用程序的部署过程中执行此命令:
php artisan optimize
optimize:clear
方法可用于删除 optimize
命令生成的所有缓存文件以及默认缓存驱动中的所有键:
php artisan optimize:clear
在以下文档中,我们将讨论 optimize
命令执行的每个具体优化命令。
缓存配置
在将应用程序部署到生产环境时,您应确保在部署过程中运行 config:cache
Artisan 命令:
php artisan config:cache
此命令将把所有 Laravel 配置文件合并为一个单一的缓存文件,这大大减少了框架在加载配置值时需要访问文件系统的次数。
如果您在部署过程中执行了 |
调试模式
config/app.php
配置文件中的 debug
选项决定了在发生错误时,实际显示给用户的错误信息量。默认情况下,该选项会根据存储在应用程序 .env
文件中的 APP_DEBUG
环境变量的值来设置。
在生产环境中,这个值应该始终设置为 |
健康检查路由
Laravel 包含一个内置的健康检查路由,可以用来监控应用程序的状态。在生产环境中,该路由可用于将应用程序的状态报告给正常运行时间监控工具、负载均衡器或类似 Kubernetes 的编排系统。
默认情况下,健康检查路由位于 /up
,如果应用程序已成功启动且没有异常,将返回 200 HTTP 响应。否则,将返回 500 HTTP 响应。您可以在应用程序的 bootstrap/app
文件中配置此路由的 URI:
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
health: '/status',
)
当 HTTP 请求发送到此路由时,Laravel 还会触发 Illuminate\Foundation\Events\DiagnosingHealth
事件,允许您执行与应用程序相关的额外健康检查。在该事件的 监听器 中,您可以检查应用程序的数据库或缓存状态。如果发现问题,您可以在监听器中抛出异常。
通过 Forge / Vapor 轻松部署
Laravel Forge
如果您还没有准备好管理自己的服务器配置,或者不太熟悉配置运行强大 Laravel 应用程序所需的各种服务,那么 Laravel Forge 是一个非常棒的替代方案。
Laravel Forge 可以在各种基础设施提供商上创建服务器,如 DigitalOcean、Linode、AWS 等。此外,Forge 还会安装和管理构建强大 Laravel 应用程序所需的所有工具,如 Nginx、MySQL、Redis、Memcached、Beanstalk 等。
想要了解更多使用 Laravel Forge 部署的完整指南?请查看 Laravel Bootcamp 和 Laracasts 上的 Forge 视频系列。 |
Laravel Vapor
如果您希望使用完全无服务器、自动扩展的部署平台,专为 Laravel 调优,您可以查看 Laravel Vapor。Laravel Vapor 是一个为 Laravel 提供的无服务器部署平台,基于 AWS。通过 Vapor 启动您的 Laravel 基础设施,并享受无服务器架构带来的可扩展简洁性。Laravel Vapor 由 Laravel 的创建者精心调优,与框架无缝配合,您可以继续按照惯常的方式编写 Laravel 应用程序。