部署
简介
当您准备将 Laravel 应用部署到生产环境时,可以执行一些操作让应用尽可能高效地运行。在本文档中,我们来介绍一些确保正确部署 Laravel 应用的重点。
服务器配置
Nginx
如果您将应用部署到运行 Nginx 的服务器上,可以使用下面的内容配置 Web 服务器。该文件很可能要根据服务器配置进行修改。如果您喜欢借助工具管理服务器,可以考虑使用 Laravel Forge 服务:
server {
listen 80;
server_name example.com;
root /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.html index.htm 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_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
优化
优化自动加载
当部署应用到生产环境时,请确保优化了 Composer 类自动加载映射,以便 Composer 可以快速找到指定类对应的文件:
composer install --optimize-autoloader --no-dev
除了优化自动加载外,还应该确保项目的源代码仓库中包含了
composer.lock
文件。当composer.lock
文件存在时,可以更快地安装项目依赖。
优化配置加载
当部署应用到生产环境时,请确保运行了 Artisan 命令 config:cache
:
php artisan config:cache
该命令会将所有 Laravel 的配置文件合并到单个文件并缓存起来,大大减少框架加载配置值时读取文件系统的次数。
如果部署过程中执行
config:cache
命令,应该确保只在配置文件中调用env
函数。配置缓存后,不会加载.env
文件,并且所有env
函数调用都会返回null
。
优化路由加载
如果构建的大型应用包含很多路由,请确保在部署时运行了 Artisan 命令 route:cache
:
php artisan route:cache
该命令会将所有路由注册精简为在一个缓存文件中调用单个方法,在注册上百条路由时提升路由注册性能。
由于该功能使用了 PHP 的序列化,而 PHP 无法序列化闭包,因此只能为基于控制器路由的应用缓存路由。
使用 Forge 部署
如果您还没有准备好管理自己的服务器配置,或者不喜欢配置 Laravel 应用所需的各种服务,Laravel Forge 是一个不错的选择。
Laravel Forge 可以在各种基础服务提供商(如 DigitalOcean,Linode,AWS 等)上创建服务器。此外,Forge 还能安装和管理构建 Laravel 应用所需的所有工具,如 Nginx、MySQL、Redis、Memcached、Beanstalk 等。