部署
介绍
当您准备将 Laravel 应用程序部署到生产环境时,有一些重要的事情可以确保您的应用程序尽可能高效地运行。在本文档中,我们将介绍一些确保您的 Laravel 应用程序正确部署的良好起点。
服务器要求
Laravel 框架有一些系统要求。您应确保您的 Web 服务器具有以下最低 PHP 版本和扩展:
- PHP >= 8.1
- 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 ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-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
变量的 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
配置文件中的调试选项决定了向用户显示多少错误信息。默认情况下,此选项设置为遵循存储在应用程序的 .env
文件中的 APP_DEBUG
环境变量的值。
在生产环境中,此值应始终为 false
。如果在生产中将 APP_DEBUG
变量设置为 true
,您可能会将敏感的配置值暴露给应用程序的最终用户。
使用 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 是一个由 AWS 提供支持的 Laravel 无服务器部署平台。在 Vapor 上启动您的 Laravel 基础设施,爱上无服务器的可扩展简单性。Laravel Vapor 由 Laravel 的创建者精心调整,以便与框架无缝协作,因此您可以继续像习惯一样编写 Laravel 应用程序。