Skip to content

部署

介绍

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

服务器要求

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

  • PHP >= 7.3
  • BCMath PHP 扩展
  • Ctype PHP 扩展
  • Fileinfo PHP 扩展
  • JSON PHP 扩展
  • Mbstring PHP 扩展
  • OpenSSL PHP 扩展
  • PDO PHP 扩展
  • Tokenizer PHP 扩展
  • XML PHP 扩展

服务器配置

Nginx

如果你将应用程序部署到运行 Nginx 的服务器上,可以使用以下配置文件作为配置 Web 服务器的起点。很可能,这个文件需要根据你的服务器配置进行定制。如果你需要服务器管理方面的帮助,可以考虑使用 Laravel 的第一方服务器管理和部署服务,如 Laravel Forge

请确保像下面的配置一样,你的 Web 服务器将所有请求指向应用程序的 public/index.php 文件。你不应该尝试将 index.php 文件移动到项目的根目录,因为从项目根目录提供应用程序将会将许多敏感的配置文件暴露给公共互联网:

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/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

优化

自动加载器优化

在部署到生产环境时,请确保优化 Composer 的类自动加载器映射,以便 Composer 可以快速找到要加载的类的正确文件:

php
composer install --optimize-autoloader --no-dev
lightbulb

除了优化自动加载器外,你还应该确保在项目的源代码控制库中包含 composer.lock 文件。当存在 composer.lock 文件时,项目的依赖项可以更快地安装。

优化配置加载

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

php
php artisan config:cache

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

exclamation

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

优化路由加载

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

php
php artisan route:cache

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

优化视图加载

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

php
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 Vapor

如果你想要一个完全无服务器、自动扩展的部署平台,专为 Laravel 调优,请查看 Laravel Vapor。Laravel Vapor 是一个由 AWS 提供支持的 Laravel 无服务器部署平台。在 Vapor 上启动你的 Laravel 基础设施,享受无服务器的可扩展性和简单性。Laravel Vapor 由 Laravel 的创建者精心调优,以便与框架无缝协作,因此你可以继续像往常一样编写 Laravel 应用程序。