輕鬆部署 Laravel 應用 | 《14. 程式碼更新時的注意事項》

Wi1dcard發表於2019-03-29

: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 中文文件

清理快取

此處提到的快取分為兩類:

  1. Laravel 框架快取(配置快取、路由快取、檢視快取等)
  2. OPCache 快取

對於第一類,可直接使用以下命令:

$ php artisan optimize:clear

注意:清理快取後,請務必使用之前小節中提到的 php artisan config:cachephp 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 如何處理檔案許可權,可閱讀 這篇部落格(英文)。

因此,保險起見,務必在每次更新或回滾後,使用 chmodchown 等命令,重置檔案許可權。

提示:其實這是直接使用 Git 更新程式碼的「缺點」之一,在後續課程中將會解決,歡迎繼續關注。

Artisan up

artisan down 的對應操作是 artisan up,在升級完畢、確認無誤後,最後一步操作便是執行此命令,使你的站點恢復正常訪問:

$ php artisan up

我感謝自己平凡,敢愛敢恨沒負擔。
我感謝自己不凡,可愛可恨都包攬。

相關文章