# 部署
## 介紹
當你準備好將 Laravel 應用部署到生產環境時,你可以執行一些操作來確保應用程序盡可能高效地運行。在本文檔中,我們將介紹一些確保 Laravel 應用被正確部署。
## 服務器配置
### Nginx
如果你將應用程序部署到運行 Nginx 的服務器,可以使用下面的內容來配置 Web 服務器。這個文件可能需要根據你的服務器配置進行自定義。你可以考慮使用 「[Laravel Forge](https://forge.laravel.com/)」等服務協助管理你的服務器:
~~~php
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 可以快速找到正確文件為給定類加載:
~~~php
composer install --optimize-autoloader --no-dev
~~~
> {tip} 除了優化自動加載之外,還應該確保項目的源代碼管理庫中包含了`composer.lock`文件。因為當`composer.lock`文件存在時,項目的依賴項可以被更快地安裝。
### 優化配置加載
當你將應用部署到生產環境時,請確保在部署過程中運行 Artisan 命令:
~~~php
php artisan config:cache
~~~
這個命令可以將所有 Laravel 的配置文件合并到單個文件中緩存,此舉能大大減少框架在加載配置值時必須執行的系統文件的數量。
> {note} 如果你在部署過程中執行了`config:cache`命令,那么你應該確保僅在配置文件中調用了`env`函數,一旦配置被緩存了,將不會加載`.env`文件,(除配置文件外)對`env`函數的所有調用都將返回`null`。
### 優化路由加載
如果你構建的是具有許多路由的大型應用程序,那你應該在部署過程中運行 Artisan 命令`route:cache`:
~~~php
php artisan route:cache
~~~
這個命令可以將所有路由注冊減少為緩存文件中的單個方法調用,以達到當應用程序在注冊數百條路由時,提高路由注冊的性能。
> {note} 由于此功能使用 PHP 序列化,而 PHP 無法序列化閉包,因此只能緩存應用程序中基于控制器的路由。
## Forge 部署
如果你還沒有準備好管理自己的服務器配置,或者你的服務器沒有配置 Laravel 應用程序所需的各種服務,「[Laravel Forge](https://forge.laravel.com/)」是一個不錯的選擇。
Laravel Forge 可以在各種基礎設施提供商(如 DigitalOcean、Linode、AWS 等)上創建服務器。此外,Forge 還能安裝和管理構建 Laravel 應用程序所需的所有工具,如 Nginx、MySQL、Redis、Memcached、Beanstalk 等。