八月 19, 2017 | 後端和Drupal
如何在Drupal8的環境下,安全的更新core與module?
前言
不得不說,更新這一檔事看起來很簡單,但是真的出事起來,也會煩死人的,尤其在D8的更新,不像D7這麼的單純,只是把檔案換掉而已,之前就曾經發生過,只是把更新檔拉進來,就整個網站炸掉的例子(我也搞不清楚到底發生什麼事情了)。所以,該如何才能在D8安全的更新(update)呢? 以下將來分享一些步驟。
前置作業
當開始要進行更新作業時,需要做的動作與步驟。 1. 備份整個網站檔案與資料庫
備份是最簡單也最重要的事情,較簡易的作法是使用模組 Backup and Migrate。若對Mysql語法熟悉的人,同樣可以使用mysqldump來進行資料庫的備份。
今天若你是有做版本控制version control的,當然又更容易了,在D8尤其重要的檔案composer.json還有composer.lock也請務必commit起來,來確保在更新過後,這個檔案不會被覆蓋,如果檔案被覆蓋了,就代表有一堆相依的php套件,之後安裝上面可能會出問題囉。
當然,如果熟悉Drush,也可以用下面指令將全部的檔案資料庫一次打包。 drush archive-dump
2. 記錄更新的內容
在更新前,有個良好的習慣看看更新的內容是很重要的,可以看看核心的版本筆記,或每個模組或模板的專案頁面,來確認更新的內容,決定是否要進行更新。
更換為維護模式
避免更新的時候,讀寫資料庫造成問題,因此切換為維護模式較為安全
使用Composer做自動更新
如果之前是D7的用戶,Composer應該不太熟悉,呃~其實我也是。不過這裡有官方的一些文件,應該可以加減看看,蠻有用的。當然,如果沒有興趣使用Composer來做更新,當然也可以直接跳過這一段囉。
STEP1: 檢查看看什麼需要更新
可以使用Composer指令
$ composer outdated
可以使用Drush指令
$ drush ups
STEP2: 更新模組
將modulename更換成要更新模組的機器名稱即可
$ composer update drupal/modulename --with-dependencies
STEP3: 更新資料庫 && 清除快取
更新資料庫
$ drush updb
清除快取
$ drush cr
STEP4: 檢查全部相關設定是否正常 * 檢查狀態報告是否正常 * 測試整個網站功能是否正常 * 關閉維護模式
STEP5: 如果有區分Dev/Stage/Production,Production 要更新
如果是在正式環境上面要再執行更新,切記只需要把composer.json與compose.lock commit起來,並且到線上端執行下列command就大功告成啦
$ composer install --no-dev
使用Drush來進行自動更新
STEP1: 將網站設定為維護模式
drush sset system.maintenance_mode 1
drush cr
STEP2: 更新核心/模組/安全性更新
//更新核心
$ drush up drupal
//更新特定模組
$ drush up module_name
//更新所有安全性更新
$ drush up --security-only
STEP3: 更新資料庫/Entity 更新
drush updb
drush entup
STEP4: 檢查全部相關設定是否正常
- 檢查狀態報告是否正常
- 測試整個網站功能是否正常
- 關閉維護模式
如果沒有問題,執行下面指令,完成更新作業
drush sset system.maintenance_mode 0
drush cr
結論
D8在整體來說,更新的部分主要是多了Composer的更新方法,而整個網站的元件都會記錄在composer.json裡面。這個部分是之前D7沒有的,而使用composer來管理整個網站的核心、模組與環境更新看起來是一個勢在必行的舉動,不僅方便乾淨,更能夠通過composer的設定檔案一目了然。
當然,對於初學者來說,更新是很重要的事情,有更安全的更新,才能夠讓網站走得更遠,誰都不希望自己的網站到時候被Hack吧:)
Enjoy