部署
简介
当你准备好将 Laravel 应用程序部署到生产环境时,你可以做一些重要的事情来确保你的应用程序尽可能高效地运行。 在本文档中,我们将介绍一些很好的出发点,以确保您的 Laravel 应用程序正确部署。
服务器要求
Laravel框架有一些系统要求. 你应该确保你的网络服务器有以下的最低PHP版本和扩展:
- PHP >= 8.0
- BCMath PHP 扩展
- Ctype PHP 扩展
- DOM PHP 扩展
- Fileinfo PHP 扩展
- JSON PHP 扩展
- Mbstring PHP 扩展
- OpenSSL PHP 扩展
- PCRE PHP 扩展
- PDO PHP 扩展
- Tokenizer PHP 扩展
- XML PHP 扩展
服务器配置
Nginx
如果你要将你的应用程序部署到运行Nginx的服务器上,你可以使用下面的配置文件作为配置Web服务器的起点。最有可能的是,这个文件需要根据你的服务器的配置来定制。**如果你想在管理服务器方面得到帮助, 可以考虑使用官方的Laravel服务器管理和部署服务,如Laravel Forge. **
请确保, 像下面的配置, 你的网络服务器将所有的请求指向你的应用程序的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.0-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
{tip} 除了优化自动加载器之外,您应该始终确保在项目的源代码控制存储库中包含一个
composer.lock
文件。 当存在composer.lock
文件时,可以更快地安装项目的依赖项。
优化配置加载
将应用程序部署到生产环境时,应确保在部署过程中运行 config:cache
Artisan 命令:
php artisan config:cache
该命令会将 Laravel 的所有配置文件合并到一个缓存文件中,这大大减少了框架在加载配置值时必须访问文件系统的次数。
{note} 如果您在部署过程中执行
config:cache
命令,则应确保仅从配置文件中调用env
函数。 一旦配置被缓存,.env
文件将不会被加载,所有对.env
变量的env
函数的调用都将返回null
。
优化路由加载
如果您正在构建具有许多路由的大型应用程序,则应确保在部署过程中运行 route:cache
Artisan 命令:
php artisan route:cache
这个命令将你所有的路由注册缩小到缓存文件中的一个方法调用中,提高了注册数百条路由时的路由注册性能。
优化视图加载
当把你的应用程序部署到生产中时,你应该确保在部署过程中运行view:cache
Artisan命令。
php artisan view:cache
该命令预编译你所有的Blade视图,这样它们就不会在请求时被临时编译,提高了每个返回视图的请求的性能。
调试模式
在你的config/app.php配置文件中的debug选项决定是否将错误信息显示给用户。默认情况下,该项的值取决于 .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 Vapor
如果你想要一个适配 Laravel 的、完全 Serverless、自动扩展的部署平台,可以看看[Laravel Vapor](https://vapor.laravel.com)。Laravel Vapor是一个Laravel的无服务器部署平台, 由AWS提供支持. 在Vapor上启动你的Laravel基础设施,并习惯于无服务器的可扩展的简单性。Laravel Vapor是由Laravel的创造者开发的,与框架无缝连接,所以你可以继续编写你的Laravel应用程序,就像你习惯的那样。