คู่มือ aWhere
ติดตั้งและดูแลแพลตฟอร์ม

อัปเกรดจาก 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 จะเก็บไว้ทั้งหมด

ก่อนเริ่ม

  1. ฐานข้อมูลทั้งสี่ต้องตรงตามสิ่งที่ต้องมี คือใช้ MongoDB 4.2 ขึ้นไป (ฐานข้อมูลของ log ต้อง 5.0 ขึ้นไป) ฐานข้อมูล content เป็น replica set และผู้ใช้ของฐานข้อมูลนี้เขียน awhere-tiles ได้
  2. ถ้ามี proxy ของตัวเอง ให้เพิ่ม /api/file ชี้ไปที่ file-services โดยให้อยู่ก่อนกฎของ /api เพิ่ม /api/item/<id>/actions/getTile/ ชี้ไปที่ tile-services เปลี่ยน /api/log ให้ชี้ไปพอร์ต 3000 (v4 ใช้ 4000) ส่ง path ที่เหลือทั้งหมด รวมถึง / ไปที่ portal เป็นกฎที่มีลำดับต่ำสุด แล้วตั้งให้ลบ header X-Auth-* (ถ้าใช้ proxy ของคุณเอง)
  3. เตรียมพื้นที่ดิสก์สำหรับสำรองข้อมูล ให้พอกับขนาดของฐานข้อมูลทั้งสี่รวมกับอิมเมจของ 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 แทน

คำสั่งนี้ทำงานตามลำดับข้างล่าง และจะไม่หยุดหรือแก้อะไรในแพลตฟอร์มเดิม จนกว่าจะสำรองข้อมูลเสร็จครบ

  1. ตรวจโดยไม่แก้อะไร ว่าฐานข้อมูลทั้งสี่ตอบ และไม่มี OAuth client ตัวไหนใช้ id ซ้ำกับแอป ถ้าตรวจไม่ผ่าน คำสั่งจะหยุดและแสดงสิ่งที่ต้องแก้
  2. สำรองข้อมูลไปไว้ที่ --backup-dir ทั้ง dump ของฐานข้อมูลทั้งสี่ env file และอิมเมจของ v4 ทุกตัว ถ้าไม่ได้ใส่ --backup-dir คำสั่งจะสร้างโฟลเดอร์ v4-backup-<date> และพิมพ์ชื่อโฟลเดอร์ให้
  3. ถามยืนยัน แล้วหยุดคอนเทนเนอร์ของ v4 ที่ชื่อขึ้นต้นด้วยค่าของ --v4-prefix คำสั่งจะไม่แตะ MongoDB, NATS, Redis และ proxy ของ v4
  4. ตั้งค่า รัน Preflight แล้ว deploy แพลตฟอร์มใหม่ แพลตฟอร์มใหม่จะเริ่ม NATS และ Redis ของตัวเอง ส่วนฐานข้อมูลทั้งสี่ยังอยู่ที่เดิม

ถ้ามี OAuth client ใช้ id ซ้ำกับแอป ให้ถามเจ้าของ client ว่ายังใช้อยู่หรือไม่ ถ้ายังใช้ ให้เขาสร้าง client ใหม่ของตัวเอง แล้วลบตัวเดิมแบบถาวร เพราะ client ที่ลบแบบ soft delete ยังจอง id นั้นไว้

หลังอัปเกรด

  1. รัน awhere status และ awhere preflight แล้วเปิดหน้า ระบบ ใน Configuration ทุกโหนดต้องเป็นเวอร์ชัน 5.0.0 และทุก migration ต้องขึ้นว่า เสร็จแล้ว หรือ กำลังทำงาน บันทึกการตรวจสอบเก่าจะแสดงเมื่อ migration logging-copy-legacy-logs เสร็จ

  2. คืนสิทธิ์อ่านบันทึกการตรวจสอบให้ผู้ใช้ ใน v4 ทุกคนอ่านได้ แต่ตอนนี้อ่านได้เฉพาะบทบาท admin และบทบาทที่มีสิทธิ์ viewAuditLog ส่วนตัวเลขการใช้งานต้องมีสิทธิ์ viewUsage หน้า บทบาท ยังไม่มีช่องให้ติ๊กสิทธิ์ทั้งสองนี้ จึงต้องตั้งในฐานข้อมูลโดยตรงด้วยคำสั่งข้างล่าง (คำสั่งนี้แก้ข้อมูลจริง) แทน <role> ด้วย id ของบทบาท แล้วให้ผู้ใช้ในบทบาทนั้นลงชื่อเข้าใช้ใหม่

    mongosh "$DATASTORE_URL" --quiet --eval '
      printjson(db.roles.updateOne({ _id: "<role>" }, { $set: { "administration.viewAuditLog": true, "administration.viewUsage": true } }))'
  3. ที่หน้า แอป ตรวจว่าที่อยู่ของแต่ละแอปถูกต้อง คือ PLATFORM_URL ต่อด้วย path ของแอป แล้วเปิด Drive ดูว่าภาพย่อแสดงได้

อย่าเพิ่งลบอะไรของ v4 จนกว่าจะแน่ใจว่าแพลตฟอร์มใหม่ใช้งานได้

กลับไป v4

awhere rollback --to-v4 <backup-dir>

<backup-dir> คือโฟลเดอร์สำรองข้อมูลที่ awhere setup --from-v4 พิมพ์ไว้ คำสั่งนี้จะหยุดคอนเทนเนอร์ของแพลตฟอร์มใหม่ (ข้อมูลยังอยู่) แล้วเริ่มคอนเทนเนอร์ของ v4 จากที่สำรองไว้ แต่จะไม่กู้คืนฐานข้อมูลให้ จะพิมพ์คำสั่งกู้คืนไว้ให้รันเอง การตั้งค่า proxy ของ v4 ก็ต้องแก้กลับเอง บันทึกการตรวจสอบที่เกิดขึ้นหลังอัปเกรดจะยังอยู่ในฐานข้อมูล แต่ v4 อ่านไม่ได้

ในหน้านี้