跳至内容

部署

介绍

当您准备将 Laravel 应用程序部署到生产环境时,您可以采取一些重要措施来确保应用程序尽可能高效地运行。在本文档中,我们将介绍一些确保您的 Laravel 应用程序正确部署的良好起点。

服务器要求

Laravel 框架有一些系统要求。您应该确保您的 Web 服务器具有以下最低 PHP 版本和扩展:

  • PHP >= 8.2
  • Ctype PHP扩展
  • cURL PHP 扩展
  • DOM PHP 扩展
  • Fileinfo PHP 扩展
  • 过滤 PHP 扩展
  • 哈希 PHP 扩展
  • Mbstring PHP 扩展
  • OpenSSL PHP 扩展
  • PCRE PHP 扩展
  • PDO PHP 扩展
  • 会话 PHP 扩展
  • Tokenizer PHP扩展
  • XML PHP 扩展

服务器配置

Nginx

如果您要将应用程序部署到运行 Nginx 的服务器,可以使用以下配置文件作为配置 Web 服务器的起点。此文件很可能需要根据服务器的配置进行自定义。如果您需要服务器管理方面的帮助,可以考虑使用完全托管的 Laravel 平台,例如Laravel Cloud

请确保您的 Web 服务器将所有请求定向到应用程序文件,就像下面的配置一样public/index.php。切勿尝试将index.php文件移动到项目根目录,因为从项目根目录访问应用程序会将许多敏感的配置文件暴露到公共互联网上:

1server {
2 listen 80;
3 listen [::]:80;
4 server_name example.com;
5 root /srv/example.com/public;
6 
7 add_header X-Frame-Options "SAMEORIGIN";
8 add_header X-Content-Type-Options "nosniff";
9 
10 index index.php;
11 
12 charset utf-8;
13 
14 location / {
15 try_files $uri $uri/ /index.php?$query_string;
16 }
17 
18 location = /favicon.ico { access_log off; log_not_found off; }
19 location = /robots.txt { access_log off; log_not_found off; }
20 
21 error_page 404 /index.php;
22 
23 location ~ ^/index\.php(/|$) {
24 fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
25 fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
26 include fastcgi_params;
27 fastcgi_hide_header X-Powered-By;
28 }
29 
30 location ~ /\.(?!well-known).* {
31 deny all;
32 }
33}

FrankenPHP

FrankenPHP也可用于为你的 Laravel 应用程序提供服务。FrankenPHP 是一个用 Go 编写的现代 PHP 应用服务器。要使用 FrankenPHP 为 Laravel PHP 应用程序提供服务,你只需调用其php-server命令即可:

1frankenphp php-server -r public/

要利用 FrankenPHP 支持的更强大的功能,例如其Laravel Octane集成、HTTP/3、现代压缩或将 Laravel 应用程序打包为独立二进制文件的能力,请查阅 FrankenPHP 的Laravel 文档

目录权限

Laravel 需要写入bootstrap/cachestorage目录,因此您应该确保 Web 服务器进程所有者有权写入这些目录。

优化

将应用程序部署到生产环境时,需要缓存各种文件,包括配置、事件、路由和视图。Laravel 提供了一个便捷的optimizeArtisan 命令来缓存所有这些文件。此命令通常应在应用程序部署过程中调用:

1php artisan optimize

optimize:clear方法可用于删除optimize命令生成的所有缓存文件以及默认缓存驱动程序中的所有键:

1php artisan optimize:clear

在下面的文档中,我们将讨论该命令执行的每个粒度优化命令optimize

缓存配置

将应用程序部署到生产环境时,应确保config:cache在部署过程中运行 Artisan 命令:

1php artisan config:cache

此命令将 Laravel 的所有配置文件合并为一个缓存文件,这大大减少了框架在加载配置值时必须对文件系统进行的访问次数。

如果在部署过程中执行该config:cache命令,则应确保仅env在配置文件中调用该函数。一旦配置被缓存,该.env文件将不会被加载,并且所有对该env函数的.env变量调用都将返回null

缓存事件

您应该在部署过程中将应用程序自动发现的事件缓存到侦听器映射中。这可以通过event:cache在部署期间调用 Artisan 命令来实现:

1php artisan event:cache

缓存路由

如果您正在构建具有多条路由的大型应用程序,则应确保route:cache在部署过程中运行 Artisan 命令:

1php artisan route:cache

此命令将所有路由注册简化为缓存文件中的单个方法调用,从而提高了注册数百条路由时的路由注册性能。

缓存视图

将应用程序部署到生产环境时,应确保view:cache在部署过程中运行 Artisan 命令:

1php artisan view:cache

此命令预编译所有 Blade 视图,因此它们不会按需编译,从而提高返回视图的每个请求的性能。

调试模式

配置文件中的 debug 选项config/app.php决定了实际向用户显示多少错误信息。默认情况下,此选项设置为遵循APP_DEBUG存储在应用程序.env文件中的环境变量的值。

在生产环境中,此值应始终为false。如果在生产环境APP_DEBUG中将变量设置为true,则可能会将敏感配置值暴露给应用程序的最终用户。

健康之路

Laravel 内置了一个健康检查路由,可用于监控应用程序的状态。在生产环境中,此路由可用于将应用程序的状态报告给正常运行时间监控器、负载均衡器或 Kubernetes 等编排系统。

默认情况下,健康检查路由会提供服务/up,如果应用程序启动正常且无异常,则会返回 200 HTTP 响应。否则,将返回 500 HTTP 响应。您可以在应用程序文件中配置此路由的 URI bootstrap/app

1->withRouting(
2 web: __DIR__.'/../routes/web.php',
3 commands: __DIR__.'/../routes/console.php',
4 health: '/up',
5 health: '/status',
6)

当 HTTP 请求发送到此路由时,Laravel 还会调度一个Illuminate\Foundation\Events\DiagnosingHealth事件,允许您执行与应用程序相关的其他健康检查。在此事件的监听器中,您可以检查应用程序的数据库或缓存状态。如果检测到应用程序存在问题,您可以直接在监听器中抛出异常。

使用 Laravel Cloud 或 Forge 进行部署

Laravel 云

如果你想要一个完全托管、自动扩展且专为 Laravel 设计的部署平台,不妨看看Laravel Cloud。Laravel Cloud 是一个强大的 Laravel 部署平台,提供托管计算、数据库、缓存和对象存储。

在云端启动您的 Laravel 应用程序,体验其可扩展的便捷性。Laravel Cloud 由 Laravel 的创建者精心调校,可与框架无缝协作,让您可以像往常一样编写 Laravel 应用程序。

Laravel Forge

如果您更喜欢管理自己的服务器,但又不习惯配置运行强大的 Laravel 应用程序所需的各种服务,Laravel Forge是一个用于 Laravel 应用程序的 VPS 服务器管理平台。

Laravel Forge 可以在各种基础设施提供商(例如 DigitalOcean、Linode、AWS 等)上创建服务器。此外,Forge 还安装和管理构建强大的 Laravel 应用程序所需的所有工具,例如 Nginx、MySQL、Redis、Memcached、Beanstalk 等。