อัปเกรดจาก v4
ย้ายแพลตฟอร์ม v4 มาเป็นเวอร์ชัน 5.0.0 ด้วย awhere setup --from-v4 ตรวจผลหลังย้าย และวิธีกลับไป v4
หน้านี้อธิบายการย้ายแพลตฟอร์ม v4 มาเป็นเวอร์ชัน 5.0.0 ด้วยคำสั่งเดียว ระหว่างย้ายแพลตฟอร์มจะใช้งานไม่ได้ จึงต้องนัดช่วงปิดปรับปรุงไว้ ตอนนี้ยังไม่มีตัวเลขว่าใช้เวลานานเท่าไร ควรซ้อมกับสำเนาข้อมูลและจับเวลาไว้ก่อน
สิ่งที่เปลี่ยนไปจาก v4
- ไม่มี
datastore-servicesแล้ว ทุกโหนดเชื่อมต่อฐานข้อมูลเองผ่าน connection string และมีโหนดใหม่สองตัวคือfile-servicesกับtile-indexer - คอนเทนเนอร์ของทุกโหนดและทุกแอปจะเปลี่ยนเป็นตัวใหม่ทั้งหมด ผู้ใช้เดิมยังอยู่ครบ และระบบจะไม่สร้างผู้ดูแลระบบเพิ่ม
- การยืนยันตัวตนกับ API ใช้ได้แค่ Bearer token หรือ API key
- มีคอนเทนเนอร์ใหม่ชื่อ
portalทำหน้าแรกของแพลตฟอร์มที่/และการลงชื่อเข้าใช้โดยตรงจะพาไปที่นั่น แทนที่จะเป็น 404 หรือ Drive การเข้าถึงสาธารณะปิดอยู่ จึงไม่มีอะไรเปิดให้คนที่ไม่ได้ลงชื่อเข้าใช้อ่านจนกว่าผู้ดูแลจะเปิดเอง (การเข้าถึงสาธารณะ) - ระบบจะคัดลอก log เก่าของ v4 เข้าบันทึกการตรวจสอบ เมื่อคัดลอกเสร็จ จะลบกิจกรรมที่เก่ากว่า
AUDIT_RETENTION_DAYS(ค่าเริ่มต้น 365 วัน) ถ้าต้องการเก็บนานกว่านี้ ให้ตั้งค่านี้ก่อนเริ่มระบบครั้งแรก ถ้าตั้งเป็น0จะเก็บไว้ทั้งหมด
ก่อนเริ่ม
- ฐานข้อมูลทั้งสี่ต้องตรงตามสิ่งที่ต้องมี คือใช้ MongoDB 4.2 ขึ้นไป (ฐานข้อมูลของ log ต้อง 5.0 ขึ้นไป) ฐานข้อมูล content เป็น replica set และผู้ใช้ของฐานข้อมูลนี้เขียน
awhere-tilesได้ - ถ้ามี proxy ของตัวเอง ให้เพิ่ม
/api/fileชี้ไปที่file-servicesโดยให้อยู่ก่อนกฎของ/apiเพิ่ม/api/item/<id>/actions/getTile/ชี้ไปที่tile-servicesเปลี่ยน/api/logให้ชี้ไปพอร์ต 3000 (v4 ใช้ 4000) ส่ง path ที่เหลือทั้งหมด รวมถึง/ไปที่portalเป็นกฎที่มีลำดับต่ำสุด แล้วตั้งให้ลบ headerX-Auth-*(ถ้าใช้ proxy ของคุณเอง) - เตรียมพื้นที่ดิสก์สำหรับสำรองข้อมูล ให้พอกับขนาดของฐานข้อมูลทั้งสี่รวมกับอิมเมจของ v4
ย้ายแพลตฟอร์ม
awhere setup --from-v4 /path/to/v4-env --v4-prefix v4-/path/to/v4-envคือโฟลเดอร์ที่เก็บ env file ของ v4 หรือจะชี้ไปที่ไฟล์เดียวก็ได้ เช่น.envของ compose ถ้า v4 รันบน Docker ไฟล์มักอยู่ข้างcompose.yamlถ้ารันบน Apple Container จะอยู่ใน/etc/awhere--v4-prefixคือคำขึ้นต้นของชื่อคอนเทนเนอร์ของ v4 ต้องใส่ทุกครั้ง- คำสั่งจะอ่านที่อยู่ฐานข้อมูล
PLATFORM_URLและNAMESPACEจากไฟล์ของ v4 ให้เอง ถ้าใส่ค่าเหล่านี้เป็น flag ไว้ จะใช้ค่าจาก flag แทน
คำสั่งนี้ทำงานตามลำดับข้างล่าง และจะไม่หยุดหรือแก้อะไรในแพลตฟอร์มเดิม จนกว่าจะสำรองข้อมูลเสร็จครบ
- ตรวจโดยไม่แก้อะไร ว่าฐานข้อมูลทั้งสี่ตอบ และไม่มี OAuth client ตัวไหนใช้ id ซ้ำกับแอป ถ้าตรวจไม่ผ่าน คำสั่งจะหยุดและแสดงสิ่งที่ต้องแก้
- สำรองข้อมูลไปไว้ที่
--backup-dirทั้ง dump ของฐานข้อมูลทั้งสี่ env file และอิมเมจของ v4 ทุกตัว ถ้าไม่ได้ใส่--backup-dirคำสั่งจะสร้างโฟลเดอร์v4-backup-<date>และพิมพ์ชื่อโฟลเดอร์ให้ - ถามยืนยัน แล้วหยุดคอนเทนเนอร์ของ v4 ที่ชื่อขึ้นต้นด้วยค่าของ
--v4-prefixคำสั่งจะไม่แตะ MongoDB, NATS, Redis และ proxy ของ v4 - ตั้งค่า รัน Preflight แล้ว deploy แพลตฟอร์มใหม่ แพลตฟอร์มใหม่จะเริ่ม NATS และ Redis ของตัวเอง ส่วนฐานข้อมูลทั้งสี่ยังอยู่ที่เดิม
ถ้ามี OAuth client ใช้ id ซ้ำกับแอป ให้ถามเจ้าของ client ว่ายังใช้อยู่หรือไม่ ถ้ายังใช้ ให้เขาสร้าง client ใหม่ของตัวเอง แล้วลบตัวเดิมแบบถาวร เพราะ client ที่ลบแบบ soft delete ยังจอง id นั้นไว้
หลังอัปเกรด
-
รัน
awhere statusและawhere preflightแล้วเปิดหน้า ระบบ ใน Configuration ทุกโหนดต้องเป็นเวอร์ชัน 5.0.0 และทุก migration ต้องขึ้นว่า เสร็จแล้ว หรือ กำลังทำงาน บันทึกการตรวจสอบเก่าจะแสดงเมื่อ migrationlogging-copy-legacy-logsเสร็จ -
คืนสิทธิ์อ่านบันทึกการตรวจสอบให้ผู้ใช้ ใน v4 ทุกคนอ่านได้ แต่ตอนนี้อ่านได้เฉพาะบทบาท
adminและบทบาทที่มีสิทธิ์viewAuditLogส่วนตัวเลขการใช้งานต้องมีสิทธิ์viewUsageหน้า บทบาท ยังไม่มีช่องให้ติ๊กสิทธิ์ทั้งสองนี้ จึงต้องตั้งในฐานข้อมูลโดยตรงด้วยคำสั่งข้างล่าง (คำสั่งนี้แก้ข้อมูลจริง) แทน<role>ด้วย id ของบทบาท แล้วให้ผู้ใช้ในบทบาทนั้นลงชื่อเข้าใช้ใหม่mongosh "$DATASTORE_URL" --quiet --eval ' printjson(db.roles.updateOne({ _id: "<role>" }, { $set: { "administration.viewAuditLog": true, "administration.viewUsage": true } }))' -
ที่หน้า แอป ตรวจว่าที่อยู่ของแต่ละแอปถูกต้อง คือ
PLATFORM_URLต่อด้วย path ของแอป แล้วเปิด Drive ดูว่าภาพย่อแสดงได้
อย่าเพิ่งลบอะไรของ v4 จนกว่าจะแน่ใจว่าแพลตฟอร์มใหม่ใช้งานได้
กลับไป v4
awhere rollback --to-v4 <backup-dir><backup-dir> คือโฟลเดอร์สำรองข้อมูลที่ awhere setup --from-v4 พิมพ์ไว้ คำสั่งนี้จะหยุดคอนเทนเนอร์ของแพลตฟอร์มใหม่ (ข้อมูลยังอยู่) แล้วเริ่มคอนเทนเนอร์ของ v4 จากที่สำรองไว้ แต่จะไม่กู้คืนฐานข้อมูลให้ จะพิมพ์คำสั่งกู้คืนไว้ให้รันเอง การตั้งค่า proxy ของ v4 ก็ต้องแก้กลับเอง บันทึกการตรวจสอบที่เกิดขึ้นหลังอัปเกรดจะยังอยู่ในฐานข้อมูล แต่ v4 อ่านไม่ได้