Skip to content

部署

介绍

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

服务器配置

Nginx

如果你将应用程序部署到运行 Nginx 的服务器上,可以使用以下配置文件作为配置 Web 服务器的起点。根据你的服务器配置,可能需要自定义此文件。如果你需要服务器管理方面的帮助,可以考虑使用 Laravel Forge 等服务:

php
server {
    listen 80;
    server_name example.com;
    root /srv/example.com/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    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 函数的调用将返回 null

优化路由加载

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

php
php artisan route:cache

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

exclamation

由于此功能使用 PHP 序列化,因此只能缓存仅使用控制器路由的应用程序的路由。PHP 无法序列化闭包。

优化视图加载

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

php
php artisan view:cache

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

使用 Forge / Vapor 部署

如果你还没有准备好管理自己的服务器配置,或者不熟悉配置运行强大 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 应用程序。