您在這裡

如何在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. 記錄更新的內容

在更新前,有個良好的習慣看看更新的內容是很重要的,可以看看核心的版本筆記,或每個模組或模板的專案頁面,來確認更新的內容,決定是否要進行更新。

  1. 更換為維護模式

    避免更新的時候,讀寫資料庫造成問題,因此切換為維護模式較為安全

使用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