ทำความเข้าใจ App Hosting และวิธีการทำงาน

โฮสติ้งแอปมีชุดงานที่ซับซ้อนอยู่เบื้องหลังเพื่อให้ทำให้แอปใช้งานได้ง่ายขึ้น โดยหน้านี้จะอธิบายส่วนสำคัญของโฟลว์งานนั้น โดยให้ข้อมูลเกี่ยวกับจุดที่คุณอาจต้องการปรับแต่งขั้นตอนดังกล่าว ทั้งนี้ขึ้นอยู่กับความต้องการของแอป

การสนับสนุนเฟรมเวิร์ก

โฮสติ้งแอปมีบิลด์ที่ไม่ต้องกำหนดค่า และรองรับการใช้งานสำหรับเว็บแอปที่พัฒนาในเฟรมเวิร์กเหล่านี้

  • Next.js 13 ขึ้นไป
  • Angular 17.2 ขึ้นไป

โฮสติ้งแอปจะระบุเฟรมเวิร์กที่คุณใช้อยู่โดยตรวจสอบไฟล์ package-lock.json หรือไฟล์ล็อกอื่นๆ ในที่เก็บ หากคุณพยายามทำให้แอป Node.js ที่ไม่มีไฟล์ล็อกใช้งานได้ โฮสติ้งของแอปจะสร้างและเรียกใช้แอปไม่สำเร็จ คุณสร้าง package-lock.json ได้โดยเรียกใช้ npm install ในไดเรกทอรีราก

อะแดปเตอร์เฟรมเวิร์กการโฮสต์แอปมีบทบาทสำคัญ 2 บทบาทดังนี้

  1. โดยจะแยกวิเคราะห์ซอร์สโค้ดและไฟล์การกำหนดค่าเฉพาะเฟรมเวิร์ก (เช่น next.config.js) เพื่อทำความเข้าใจลักษณะการทำงานของแอปที่กำหนดค่าไว้
  2. รายงานดังกล่าวจะเรียกใช้คำสั่งบิลด์ของแอปเพื่อสร้างเนื้อหาแบบคงที่และสร้างแอปเวอร์ชันที่เพิ่มประสิทธิภาพแล้วสำหรับเวอร์ชันที่ใช้งานจริง

อะแดปเตอร์เฟรมเวิร์กจะสร้างแอป Node.js ด้วย npm run build ซึ่งทำงานได้ดีที่สุดกับสคริปต์บิลด์เริ่มต้นสำหรับแต่ละเฟรมเวิร์ก เช่น next build สำหรับ Next.js และ ng build สำหรับ Angular โฮสติ้งแอปจะพยายามสร้างด้วยคำสั่งบิลด์ที่กำหนดเอง แต่ไม่สามารถรับประกันความสำเร็จได้อย่างแน่นอน

วิธีการทำงานของการผสานรวมที่เก็บแอปโฮสติ้ง

การเชื่อมต่อที่สำคัญระหว่างที่เก็บ GitHub และแบ็กเอนด์โฮสติ้งของแอปจะจัดการโดย Developer Connect ซึ่งเป็นแพลตฟอร์มการเชื่อมต่อของ Google Cloud สำหรับเครื่องมือ DevOps ภายนอก ระหว่างการสร้างแบ็กเอนด์ของโฮสติ้งแอป เวิร์กโฟลว์ UI ของ Developers Connect จะแนะนำการติดตั้งแอป Firebase GitHub โดยขั้นตอนสำคัญในกระบวนการนี้มีดังนี้

  1. คุณมอบบทบาทผู้ดูแลระบบ Secret Manager ให้กับ Developer Connect วิธีนี้จะช่วยให้ระบบจัดเก็บข้อมูลเข้าสู่ระบบได้อย่างปลอดภัยว่าเป็น "ข้อมูลลับ" ใน Cloud Secret Manager
  2. คุณให้สิทธิ์แอป Firebase GitHub ในการเข้าถึงที่เก็บ GitHub
  3. Developer Connect จะจัดเก็บโทเค็นการให้สิทธิ์ GitHub โดยเฉพาะไว้ในที่เก็บผู้จัดการข้อมูลลับของโปรเจ็กต์ โปรดอย่าแก้ไขหรือลบโทเค็นนี้

นอกจากนี้ App Hosting จะผสานรวมกับ GitHub Check API เพื่อตรวจสอบการเปิดตัว การตรวจสอบนี้ช่วยให้คุณดูสถานะการเปิดตัวใน GitHub และแก้ไขข้อบกพร่องของกระบวนการทำให้ใช้งานได้ในกรณีที่มีข้อผิดพลาด

การผสานรวมกับ Firebase และบริการอื่นๆ ของ Google

โฮสติ้งแอปตั้งค่าทั้งสภาพแวดล้อมบิลด์และรันไทม์เพื่อให้คุณเริ่มต้น Firebase Admin SDK ด้วยข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันของ Google ได้ วิธีนี้จะช่วยให้แบ็กเอนด์สื่อสารกับผลิตภัณฑ์อื่นๆ ของ Firebase ได้ในระหว่างที่สร้างและทำให้ใช้งานได้

บัญชีบริการแบ็กเอนด์ของ App Hosting

ระหว่างบิลด์และรันไทม์ แบ็กเอนด์ของโฮสติ้งแอปจะตรวจสอบสิทธิ์กับบริการอื่นๆ ของ Google ด้วยบัญชีบริการ ระบบจะสร้างบัญชีบริการเริ่มต้นสำหรับวัตถุประสงค์ต่อไปนี้เมื่อคุณเปิดโฮสติ้งแอปในโปรเจ็กต์ Firebase เป็นครั้งแรก

firebase-app-hosting-compute@PROJECT ID.iam.gserviceaccount.com

บัญชีบริการนี้ใช้กับแบ็กเอนด์ทั้งหมดโดยค่าเริ่มต้นและมีชุดสิทธิ์ขั้นต่ำเพื่อให้คุณสร้าง เรียกใช้ และตรวจสอบแอปได้ รวมถึงมีสิทธิ์ตรวจสอบสิทธิ์ SDK ผู้ดูแลระบบด้วยข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน เพื่อดำเนินการต่างๆ เช่น การโหลดข้อมูลจาก Cloud Firestore ดูบทบาทโฮสติ้งแอปของ Firebase

หากแอปจำเป็นต้องโต้ตอบกับบริการเพิ่มเติมของ Google ในเวลาบิลด์หรือจากแบ็กเอนด์ที่ทำงานอยู่ คุณสามารถปรับแต่งบัญชีบริการเริ่มต้นด้วยการเพิ่มบทบาทได้ เช่น หากแอปต้องการสิทธิ์ในการใช้ Vertex AI คุณอาจต้องเพิ่ม roles/aiplatform.user หรือบทบาทที่เกี่ยวข้องบางอย่าง

คำศัพท์และคำจำกัดความที่สำคัญ

  • แบ็กเอนด์: คอลเล็กชันของทรัพยากรที่มีการจัดการซึ่งโฮสติ้งแอปสร้างขึ้นเพื่อสร้างและเรียกใช้เว็บแอปของคุณ
  • การเปิดตัว: เวอร์ชันที่เจาะจงของแอปที่เผยแพร่อยู่ซึ่งลิงก์กับคอมมิตของ Git
  • Branch แบบสด: Branch ของที่เก็บ GitHub ที่มีการทำให้ใช้งานได้กับ URL ที่เผยแพร่อยู่ บ่อยครั้งที่มักเป็น Branch ที่มีการรวม Branch ของฟีเจอร์หรือ Branch ของการพัฒนา

ปัญหาที่ทราบและข้อจำกัด

ตัวอย่างโฮสติ้งของแอปมีข้อจำกัดที่ทราบบางอย่าง ดังนี้

  • การเพิ่มประสิทธิภาพรูปภาพยังไม่พร้อมใช้งาน
  • ในบางกรณี แบ็กเอนด์การโฮสต์แอปอาจแสดงข้อความ Intermittent connection error ที่ URL ของแอป การแก้ไขจะพร้อมใช้งานในรุ่นหลังจากนี้
  • ส่วนหัวของแคชจะมีการแก้ไขเพื่อจำกัดแคช CDN ไว้ที่ 60 วินาที และในอนาคต เมื่อโฮสติ้งแอปสามารถล้างแคชอย่างถาวรได้อย่างรวดเร็วเมื่อทำให้ใช้งานได้ ระบบจะยกเลิกขีดจำกัดนี้
  • ไฟล์แบบคงที่ที่ไม่ได้แคชจะแสดงผลจาก Cloud Run โดยในรุ่นหลังจากนี้ ระบบจะจัดเก็บและให้บริการไฟล์จากต้นทางโฮสติ้งของแอปเพื่อประสิทธิภาพที่ดีขึ้น
  • โดเมนย่อยแบบไวลด์การ์ดเป็นโดเมนที่กำหนดเอง จะพร้อมใช้งานในรุ่นหลังจากนี้
  • SKU การโฮสต์แอปอาจไม่แสดงในหน้าการใช้งานแบ็กเอนด์ในคอนโซล Firebase ซึ่งจะพร้อมใช้งานในรุ่นหลังจากนี้
  • คอนโซล Firebase อาจแสดงข้อผิดพลาด "ไม่พบบิลด์และไม่ถูกต้อง" เป็นระยะๆ ในการสร้างแบ็กเอนด์
  • ขณะนี้ระบบยังไม่รองรับโปรเจ็กต์ที่มีไฟล์ package.json ที่ฝังไว้ ไม่ว่าจะกำหนดค่า root\_directory ด้วยคอนโซล Firebase หรือ CLI ก็ตาม ซึ่งการแก้ไขจะพร้อมใช้งานในรุ่นหลังจากนี้
  • ปัจจุบันแบ็กเอนด์ทั้งหมดในโปรเจ็กต์เดียวกันใช้องค์กร/บัญชี GitHub ร่วมกัน อุปกรณ์เหล่านี้จะเชื่อมต่อกับที่เก็บต่างๆ ภายใต้องค์กร/บัญชีดังกล่าวได้ หากต้องการสร้างแบ็กเอนด์ที่เชื่อมต่อกับบัญชี GitHub ที่แตกต่างกัน ให้นำแบ็กเอนด์เหล่านั้นไปไว้ในโปรเจ็กต์แยกต่างหาก
  • ปัจจุบันรองรับเฉพาะภูมิภาค us-central1