:clap: 本系列持續更新中,歡迎關注:https://github.com/wi1dcard/laravel-deployment。
由於課程上下文關聯比較緊密,在開始前請先閱讀 本文。
你的支援是我寫作的動力;關注我的客官們,請在右上角點個贊,將會讓文章在首頁展示,幫助更多人。
感謝 :clap: !
在上一節中,我們使用 git reset
命令輕易地實現了程式碼檔案的更新和回滾。然而,對於大多數 Laravel 應用來說,版本升級並非「更新程式碼」那麼簡單。本小節列出一部分常見注意事項,請仔細閱讀。
Artisan down
在更新程式碼之前,建議使用 artisan down
命令,使 Laravel 進入維護模式:
$ cd /var/www/deployment
$ php artisan down
命令列將會輸出:
Application is now in maintenance mode.
此時 Laravel 將會暫停所有任務(包括 Queue、Schedule 等),並拒絕請求流量進入正常的處理邏輯。你可以嘗試在瀏覽器內檢視,將會看到 503 Service Unavailable
而非正常的應用頁面,例如:
接下來你可以執行正常的更新邏輯,而不必擔心使用者訪問得到錯誤的響應了。
Composer install
在程式碼更新後,必不可少的一步操作便是同步「更新」依賴。再次執行安裝依賴時使用的命令即可:
$ composer install --optimize-autoloader --no-dev
注意:此處並非使用
composer update
,切勿混淆。composer update
將會忽略composer.lock
檔案,將依賴包更新至與版本約束相相容的最新版本;因此該操作應當確保僅在本地執行。更多細節請閱讀 Composer 中文文件。
清理快取
此處提到的快取分為兩類:
- Laravel 框架快取(配置快取、路由快取、檢視快取等)
- OPCache 快取
對於第一類,可直接使用以下命令:
$ php artisan optimize:clear
注意:清理快取後,請務必使用之前小節中提到的
php artisan config:cache
和php artisan route:cache
再次重建快取,避免影響效能。
對於第二類,其中一種方法是過載 PHP-FPM 服務:
$ service php-fpm reload
另一種更加優雅且無需重啟服務的方法是通過 PHP 的 opcache_reset
函式。在命令列中,可使用一款名為 CacheTool 的小工具,它提供了用於管理快取的 CLI 命令:
$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool.phar
$ chmod +x cachetool.phar
$ php cachetool.phar opcache:reset --fcgi
其實,CacheTool 還支援 APC、APCu,且具備查詢和統計功能,你可以閱讀它的文件獲取更多用法。
資料遷移
若你的應用依賴於 Laravel 提供的 Migration 功能,那麼還需要執行遷移命令,將變更應用到資料庫:
$ php artisan migrate
檔案許可權
又是檔案許可權。是的,沒錯。
由於我們使用 Git 部署應用程式碼,而 Git 僅儲存「檔案所有者是否具備執行許可權」,對於讀、寫以及其它身份的許可權,Git 並不關心。
提示:有興趣瞭解 Git 如何處理檔案許可權,可閱讀 這篇部落格(英文)。
因此,保險起見,務必在每次更新或回滾後,使用 chmod
和 chown
等命令,重置檔案許可權。
提示:其實這是直接使用 Git 更新程式碼的「缺點」之一,在後續課程中將會解決,歡迎繼續關注。
Artisan up
artisan down
的對應操作是 artisan up
,在升級完畢、確認無誤後,最後一步操作便是執行此命令,使你的站點恢復正常訪問:
$ php artisan up