บันทึกขั้นตอน วิธีอัพเกรด Drupal 8 ให้เป็น Drupal 9 ด้วยคำสั่ง Composer

เว็บไซต์ Drupal.org ได้กำหนดวันสิ้นอายุ End-of-life ของ Drupal 8.x คือวันที่ 2 พฤศจิกายน 2021 ที่จะถึงนี้ สำหรับผู้ที่ยังใช้งาน Drupal 8.x ควรอัพเกรดให้เป็น Drupal 9.x ให้เร็วที่สุดเท่าที่จะเป็นไปได้ เพื่อที่จะได้รับการอัพเดทความปลอดภัย และแก้ไขปัญหาการใช้งานอย่างต่อเนื่อง

ทั้งนี้ สำหรับ Drupal 7.x ที่เป็นรุ่นเสถียรก่อนหน้านี้ จะยังคงได้รับการอัพเดทความปลอดภัยและแก้ไขปัญหาการใช้งาน ยาวไปจนถึงเดือนพฤศจิกายน 2022 ให้เวลาเตรียมตัวใการอัพเกรดเป็น Drupal 9.x อีก 1 ปี

บันทึกขั้นตอน วิธีอัพเกรด Drupal 8.x ให้เป็น Drupal 9.x ด้วยคำสั่ง Composer

วิธีการอัพเกรดนี้ อ้างอิงจาก Upgrading from Drupal 8 to Drupal 9 (or later) - Drupal.org

เตรียมตัวก่อนการอัพเกรด Drupal 9.x

  • ให้ทำการอัพเดท Drupal 8.x ให้เป็นเวอร์ชั่นล่าสุดเสียก่อน (ข้อมูล ณ เดือนกรกฎาคม 2021 เวอร์ชั่นล่าสุดคือ 8.9.16)
  • อัพเกรด modules ส่วนเสริมที่ใช้ให้เป็นเวอร์ชั่นล่าสุด พร้อมกับตรวจสอบว่ารองรับ Drupal 9.x ด้วยหรือไม่
  • ตรวจสอบว่า PHP ในเซิร์ฟเวอร์ เป็นเวอร์ชั่น 7.3 หรือสูงกว่าหรือไม่

ขั้นตอนการอัพเกรด Druapl 8.x ให้เป็น Drupal 9.x ด้วยคำสั่ง Composer

1. แก้ไขสิทธิการเขียนไฟล์และโฟลเดอร์ Settings ดังนี้

chmod 777 sites/default
find sites/default -name "*settings.php" -exec chmod 777 {} \;
find sites/default -name "*services.yml" -exec chmod 777 {} \;

2. ดาวน์โหลดแพคเกจ Drupal 9

composer require drupal/core-recommended:^9 drupal/core-composer-scaffold:^9 drupal/core-project-message:^9 --update-with-dependencies --no-update

ในกรณีที่ติดตั้ง รุ่น Dev ให้ใช้คำสั่งนี้แทน

composer require drupal/core-dev:^9 --dev --update-with-dependencies --no-update

3. อัพเดทโค้ด Drupal Core

composer update

4. อัพเดทฐานข้อมูล

เปิดเว็บไซต์เข้าที่หน้าอัพเดท /update.php และสั่งอัพเดทตามปกติ

5. แก้ไขสิทธิการเขียนไฟล์และโฟลเดอร์ Settings ให้กลับเป็นเหมือนเดิม

chmod 755 sites/default
find sites/default -name "*settings.php" -exec chmod 644 {} \;
find sites/default -name "*services.yml" -exec chmod 644 {} \;

** หมายเหตุ : ก่อนการอัพเกรด Drupal 8.x ให้เป็น Drupal 9.x ควรสำรองข้อมูลไว้ก่อนเสมอ เผื่อว่าอัพเกรดไม่สำเร็จ จะได้ไม่พังทั้งหมด