部署应用到生产环境


简介

当你准备部署 Laravel 应用到生产环境时,有一些重要的事情可以确保应用尽可能高效地运行,在本文档中我们就来探讨下这些要做的事情从而确保应用以最佳方式部署。

服务器配置

Nginx

如果部署应用的服务器运行的是 Nginx,可以使用下面的配置文件配置 Web 服务器。大部分情况下,这个文件需要根据服务器的配置做一些调整(如果你想要一个工具来协助管理服务器,可以考虑使用 Laravel Forge):

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 可以快速为给定类找到要加载的文件:

composer install --optimize-autoloader --no-dev

注:除了优化自动加载器之外,还要在项目代码仓库中包含 composer.lock 文件,这样的话项目依赖可以更快安装。

优化配置加载

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

php artisan config:cache

这个命令会将所有 Laravel 配置文件合并成一个缓存文件,从而极大减少框架在加载配置值时对文件系统的 IO 操作。

注:如果你在部署过程中执行了 config:cache 命令,需要确保只在配置文件中调用了 env 函数。一旦配置被缓存后,就不会再加载 .env 文件,因此所有对 env 函数的调用都会返回 null

优化路由加载

如果你正在构建一个包含大量路由的大型应用,需要确保在部署过程中运行了 Artisan 命令 route:cache

php artisan route:cache

这个命令会生成一个缓存文件将所有路由注册浓缩到单个方法调用,从而在注册大量路由时提升路由注册性能。

优化视图加载

当部署应用到生产环境时,需要确保在部署期间运行 view:cache Artisan 命令:

php artisan view:cache

该命令会预编译所有 Blade 视图,从而提升每个返回视图请求的性能。

使用 Forge/Vapor 部署

如果你对自己管理服务器配置、安装各种工具软件以及维护大型应用所需服务没有信心,或者觉得这些操作过于繁琐,那么 Laravel Forge 是一个不错的选择。

Laravel Forge 可以在不同的云服务供应商(例如 DigitalOcean、Linode、AWS 等)中创建服务器,此外,Forge 还会帮你安装并管理构建大型 Laravel 应用所需的所有工具,例如 Nginx、MySQL、Redis、Memcached、Beanstalk 等等。

Laravel Vapor

如果你想要实现 Laravel 应用的无服务器(Serverless)、自动伸缩部署,可以使用 Laravel Vapor。Laravel Vapor 是一个基于 AWS 开发的、适用于 Laravel 项目的无服务器部署平台,它是由 Laravel 框架的创建者开发的,因此可以和 Laravel 框架无缝融合,因此,你只需要负责编写 Laravel 业务代码,部署的事情交给 Vapor 就好了。

实例教程


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: 入门套件

>> 下一篇: 一次请求的生命周期