部署
簡介
當您準備好將 Laravel 應用程式部署到生產環境時,您可以採取一些重要的措施,以確保您的應用程式盡可能高效地運行。在本文檔中,我們將介紹一些確保 Laravel 應用程式正確部署的良好起點。
伺服器需求
Laravel 框架有一些系統需求。您應確保您的 Web 伺服器具有以下最低 PHP 版本和擴展
- PHP >= 8.2
- Ctype PHP 擴展
- cURL PHP 擴展
- DOM PHP 擴展
- Fileinfo PHP 擴展
- Filter PHP 擴展
- Hash PHP 擴展
- Mbstring PHP 擴展
- OpenSSL PHP 擴展
- PCRE PHP 擴展
- PDO PHP 擴展
- Session PHP 擴展
- Tokenizer PHP 擴展
- XML PHP 擴展
伺服器設定
Nginx
如果您要將應用程式部署到運行 Nginx 的伺服器,則可以使用以下設定檔作為設定 Web 伺服器的起點。此檔案很可能需要根據伺服器的配置進行自訂。如果您需要伺服器管理方面的協助,請考慮使用完全託管的 Laravel 平台,例如 Laravel Cloud。
請確保,如下面的設定所示,您的 Web 伺服器將所有請求導向到應用程式的 public/index.php
檔案。您絕不應嘗試將 index.php
檔案移動到專案的根目錄,因為從專案根目錄提供應用程式會將許多敏感的設定檔暴露於公共網際網路
1server { 2 listen 80; 3 listen [::]:80; 4 server_name example.com; 5 root /srv/example.com/public; 6 7 add_header X-Frame-Options "SAMEORIGIN"; 8 add_header X-Content-Type-Options "nosniff"; 9 10 index index.php;11 12 charset utf-8;13 14 location / {15 try_files $uri $uri/ /index.php?$query_string;16 }17 18 location = /favicon.ico { access_log off; log_not_found off; }19 location = /robots.txt { access_log off; log_not_found off; }20 21 error_page 404 /index.php;22 23 location ~ ^/index\.php(/|$) {24 fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;25 fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;26 include fastcgi_params;27 fastcgi_hide_header X-Powered-By;28 }29 30 location ~ /\.(?!well-known).* {31 deny all;32 }33}
FrankenPHP
FrankenPHP 也可用於服務您的 Laravel 應用程式。FrankenPHP 是一個現代 PHP 應用程式伺服器,用 Go 語言編寫。要使用 FrankenPHP 服務 Laravel PHP 應用程式,您可以簡單地調用其 php-server
命令
1frankenphp php-server -r public/
要利用 FrankenPHP 支援的更強大功能,例如其 Laravel Octane 集成、HTTP/3、現代壓縮或將 Laravel 應用程式打包為獨立二進制檔案的能力,請查閱 FrankenPHP 的 Laravel 文件。
目錄權限
Laravel 需要寫入 bootstrap/cache
和 storage
目錄,因此您應確保 Web 伺服器進程所有者具有寫入這些目錄的權限。
最佳化
將應用程式部署到生產環境時,應快取各種檔案,包括您的設定、事件、路由和視圖。Laravel 提供了一個方便的 optimize
Artisan 命令,可以快取所有這些檔案。此命令通常應作為應用程式部署過程的一部分調用
1php artisan optimize
optimize:clear
方法可用於刪除 optimize
命令生成的所有快取檔案,以及預設快取驅動程式中的所有鍵
1php artisan optimize:clear
在以下文件中,我們將討論 optimize
命令執行的每個細化的最佳化命令。
快取設定
將應用程式部署到生產環境時,應確保在部署過程中運行 config:cache
Artisan 命令
1php artisan config:cache
此命令會將 Laravel 的所有設定檔合併到單個快取檔案中,這大大減少了框架在載入設定值時必須訪問檔案系統的次數。
如果在部署過程中執行 config:cache
命令,則應確保僅從設定檔中調用 env
函數。設定快取後,.env
檔案將不會被載入,並且對 .env
變數的所有 env
函數調用都將返回 null
。
快取事件
您應在部署過程中快取應用程式自動發現的事件到監聽器的映射。這可以通過在部署期間調用 event:cache
Artisan 命令來完成
1php artisan event:cache
快取路由
如果您正在構建具有許多路由的大型應用程式,則應確保在部署過程中運行 route:cache
Artisan 命令
1php artisan route:cache
此命令將所有路由註冊簡化為快取檔案中的單個方法調用,從而在註冊數百個路由時提高路由註冊的效能。
快取視圖
將應用程式部署到生產環境時,應確保在部署過程中運行 view:cache
Artisan 命令
1php artisan view:cache
此命令會預編譯所有 Blade 視圖,以便它們不會按需編譯,從而提高每個返回視圖的請求的效能。
偵錯模式
config/app.php
設定檔中的 debug 選項決定了實際向用戶顯示的錯誤資訊量。預設情況下,此選項設定為遵循 APP_DEBUG
環境變數的值,該變數儲存在應用程式的 .env
檔案中。
在您的生產環境中,此值應始終為 false
。如果 APP_DEBUG
變數在生產環境中設定為 true
,您將面臨將敏感設定值暴露給應用程式最終用户的風險。
健康檢查路由
Laravel 包含一個內建的健康檢查路由,可用於監控應用程式的狀態。在生產環境中,此路由可用於向運行時間監控器、負載平衡器或 Kubernetes 等協調系統報告應用程式的狀態。
預設情況下,健康檢查路由在 /up
提供服務,如果應用程式在沒有異常的情況下啟動,將返回 200 HTTP 回應。否則,將返回 500 HTTP 回應。您可以在應用程式的 bootstrap/app
檔案中設定此路由的 URI
1->withRouting(2 web: __DIR__.'/../routes/web.php',3 commands: __DIR__.'/../routes/console.php',4 health: '/up', 5 health: '/status', 6)
當向此路由發出 HTTP 請求時,Laravel 還將分派 Illuminate\Foundation\Events\DiagnosingHealth
事件,允許您執行與應用程式相關的其他健康檢查。在此事件的監聽器中,您可以檢查應用程式的資料庫或快取狀態。如果檢測到應用程式存在問題,您只需從監聽器中拋出異常即可。
使用 Laravel Cloud 或 Forge 部署
Laravel Cloud
如果您想要一個完全託管、自動擴展的部署平台,專為 Laravel 調校,請查看 Laravel Cloud。Laravel Cloud 是一個強大的 Laravel 部署平台,提供託管計算、資料庫、快取和物件儲存。
在 Cloud 上啟動您的 Laravel 應用程式,並愛上其可擴展的簡約性。Laravel Cloud 由 Laravel 的創建者微調,可與框架無縫協作,因此您可以像平常一樣繼續編寫 Laravel 應用程式。
Laravel Forge
如果您偏好管理自己的伺服器,但不熟悉設定運行穩健的 Laravel 應用程式所需的所有各種服務,Laravel Forge 是一個適用於 Laravel 應用程式的 VPS 伺服器管理平台。
Laravel Forge 可以在各種基礎架構提供商(如 DigitalOcean、Linode、AWS 等)上創建伺服器。此外,Forge 安裝和管理構建穩健的 Laravel 應用程式所需的所有工具,例如 Nginx、MySQL、Redis、Memcached、Beanstalk 等。