กำหนดค่าและจัดการแบ็กเอนด์โฮสติ้งของแอป

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

กำหนดค่าแบ็กเอนด์

สําหรับการกําหนดค่าขั้นสูง เช่น ตัวแปรสภาพแวดล้อมหรือการตั้งค่ารันไทม์ เช่น การทำงานพร้อมกัน, CPU และขีดจํากัดของหน่วยความจํา คุณจะต้องสร้างและแก้ไขไฟล์ apphosting.yaml ในไดเรกทอรีรูทของแอป ไฟล์นี้ยังรองรับการอ้างอิงข้อมูลลับที่จัดการด้วย Secret Manager ของ Cloud ด้วย จึงตรวจสอบสิทธิ์ในระบบควบคุมแหล่งที่มาได้อย่างปลอดภัย

หากต้องการสร้าง apphosting.yaml ให้เรียกใช้คำสั่งต่อไปนี้

firebase init apphosting

ซึ่งจะสร้างไฟล์ apphosting.yaml เริ่มต้นพื้นฐานที่มีการกำหนดค่าตัวอย่าง (มีความคิดเห็น) หลังจากแก้ไขแล้ว ไฟล์ apphosting.yaml ทั่วไปอาจมีลักษณะดังต่อไปนี้ โดยมีการตั้งค่าสําหรับบริการ Cloud Run ของแบ็กเอนด์ ตัวแปรสภาพแวดล้อมบางรายการ และการอ้างอิงข้อมูลลับที่จัดการโดย Cloud Secret Manager

# Settings for Cloud Run
runConfig:
  minInstances: 2
  maxInstances: 100
  concurrency: 100
  cpu: 2
  memoryMiB: 1024

# Environment variables and secrets
env:
  - variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app
    availability:
      - BUILD
      - RUNTIME

  - variable: API_KEY
    secret: myApiKeySecret

    # Same as API_KEY above but with a pinned version.
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

    # Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
  - variable: VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID

    # Same as API_KEY above but with the long form secret reference with pinned version.
  - variable: PINNED_VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID/versions/5

ส่วนที่เหลือของคู่มือนี้จะให้ข้อมูลเพิ่มเติมและบริบทสําหรับการตั้งค่าตัวอย่างเหล่านี้

กำหนดการตั้งค่าบริการ Cloud Run

การตั้งค่า apphosting.yaml ช่วยให้คุณกำหนดค่าวิธีจัดสรรบริการ Cloud Run ได้ การตั้งค่าที่ใช้ได้สําหรับบริการ Cloud Run มีอยู่ในออบเจ็กต์ runConfig

  • cpu – จํานวน CPU ที่ใช้ในการแสดงผลแต่ละอินสแตนซ์ (ค่าเริ่มต้นคือ 0)
  • memoryMiB – จำนวนหน่วยความจําที่จัดสรรสําหรับอินสแตนซ์ที่ให้บริการแต่ละรายการเป็น MiB (ค่าเริ่มต้น 512)
  • maxInstances – จำนวนคอนเทนเนอร์สูงสุดที่จะเรียกใช้ได้พร้อมกัน (ค่าเริ่มต้นคือ 100 และจัดการโดยโควต้า)
  • minInstances – จำนวนคอนเทนเนอร์ที่จะทำงานอยู่เสมอ (ค่าเริ่มต้นคือ 0)
  • concurrency – จํานวนคําขอสูงสุดที่อินสแตนซ์การแสดงผลแต่ละรายการรับได้ (ค่าเริ่มต้น 80)

โปรดสังเกตความสัมพันธ์ที่สําคัญระหว่าง cpu กับ memoryMiB คุณสามารถตั้งค่าหน่วยความจําเป็นค่าจำนวนเต็มใดก็ได้ระหว่าง 128 ถึง 32768 แต่การเพิ่มขีดจํากัดหน่วยความจําอาจต้องเพิ่มขีดจํากัด CPU ด้วย

  • มากกว่า 4 GiB ต้องใช้ CPU อย่างน้อย 2 รายการ
  • มากกว่า 8 GiB ต้องใช้ CPU อย่างน้อย 4 รายการ
  • มากกว่า 16 GiB ต้องใช้ CPU อย่างน้อย 6 รายการ
  • มากกว่า 24 GiB ต้องใช้ CPU อย่างน้อย 8 รายการ

ในทํานองเดียวกัน ค่าของ cpu จะส่งผลต่อการตั้งค่าการทํางานพร้อมกัน หากตั้งค่าเป็นค่าที่น้อยกว่า 1 CPU คุณต้องตั้งค่าการทํางานพร้อมกันเป็น 1 และระบบจะจัดสรร CPU ในระหว่างการประมวลผลคําขอเท่านั้น

กำหนดค่าสภาพแวดล้อมการสร้าง

บางครั้งคุณอาจต้องกำหนดค่าเพิ่มเติมสำหรับกระบวนการสร้าง เช่น คีย์ API ของบุคคลที่สามหรือการตั้งค่าที่ปรับแต่งได้ App Hosting มีการกำหนดค่าสภาพแวดล้อมใน apphosting.yaml เพื่อจัดเก็บและเรียกข้อมูลประเภทนี้สำหรับโปรเจ็กต์

env:
-   variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app

สําหรับแอป Next.js ไฟล์ dotenv ที่มีตัวแปรของสภาพแวดล้อมจะทํางานร่วมกับ App Hosting ได้ด้วย เราขอแนะนำให้ใช้ apphosting.yaml เพื่อควบคุมตัวแปรสภาพแวดล้อมอย่างละเอียดด้วยเฟรมเวิร์กใดก็ได้

ใน apphosting.yaml คุณสามารถระบุกระบวนการที่มีสิทธิ์เข้าถึงตัวแปรสภาพแวดล้อมได้โดยใช้พร็อพเพอร์ตี้ availability คุณสามารถจํากัดตัวแปรสภาพแวดล้อมให้ใช้ได้เฉพาะกับสภาพแวดล้อมการสร้างหรือใช้ได้เฉพาะกับรันไทม์เท่านั้น โดยค่าเริ่มต้น ผู้ใช้ทั้ง 2 ประเภทจะเข้าถึงได้

env:
-   variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app
    availability:
    -   BUILD
    -   RUNTIME

สําหรับแอป Next.js คุณสามารถใช้คำนำหน้า NEXT_PUBLIC_ ในลักษณะเดียวกับที่ใช้ในไฟล์ dotenv เพื่อให้เข้าถึงตัวแปรในเบราว์เซอร์ได้

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.firebasestorage.app
    availability:
    -   BUILD
    -   RUNTIME

คีย์ตัวแปรที่ถูกต้องประกอบด้วยอักขระ A-Z หรือขีดล่าง คีย์ตัวแปรสภาพแวดล้อมบางรายการสงวนไว้สำหรับการใช้งานภายใน อย่าใช้คีย์ต่อไปนี้ในไฟล์การกําหนดค่า

  • ตัวแปรใดก็ตามที่ขึ้นต้นด้วย X_FIREBASE_
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION

จัดเก็บและเข้าถึงพารามิเตอร์ลับ

ข้อมูลที่ละเอียดอ่อน เช่น คีย์ API ควรจัดเก็บเป็นข้อมูลลับ คุณสามารถอ้างอิงข้อมูลลับใน apphosting.yaml เพื่อหลีกเลี่ยงการตรวจสอบข้อมูลที่ละเอียดอ่อนในระบบควบคุมแหล่งที่มา

พารามิเตอร์ประเภท secret แสดงพารามิเตอร์สตริงซึ่งมีค่าที่จัดเก็บไว้ใน Cloud Secret Manager แทนที่จะดึงค่าโดยตรง พารามิเตอร์ลับจะตรวจสอบว่ามีอยู่ใน Secret Manager ของ Cloud หรือไม่ และโหลดค่าระหว่างการเปิดตัว

  -   variable: API_KEY
      secret: myApiKeySecret

ข้อมูลลับใน Secret Manager ของ Cloud อาจมีได้หลายเวอร์ชัน โดยค่าเริ่มต้น ค่าของพารามิเตอร์ลับที่ใช้ได้กับแบ็กเอนด์ที่ใช้งานอยู่จะปักหมุดไว้กับข้อมูลลับเวอร์ชันล่าสุดที่ใช้ได้ ณ เวลาที่สร้างแบ็กเอนด์ หากมีข้อกำหนดเกี่ยวกับการจัดการวงจรและการกำหนดเวอร์ชันของพารามิเตอร์ คุณสามารถปักหมุดเป็นเวอร์ชันที่เฉพาะเจาะจงได้ด้วย Cloud Secret Manager เช่น หากต้องการปักหมุดเป็นเวอร์ชัน 5 ให้ทำดังนี้

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

คุณสร้าง Secret ได้ด้วยคําสั่ง CLI firebase apphosting:secrets:set แล้วระบบจะแจ้งให้คุณเพิ่มสิทธิ์ที่จําเป็น ขั้นตอนนี้จะให้คุณมีตัวเลือกในการเพิ่มการอ้างอิงข้อมูลลับไปยัง apphosting.yaml โดยอัตโนมัติ

หากต้องการใช้ฟังก์ชันการทำงานของ Cloud Secret Manager อย่างเต็มรูปแบบ ให้ใช้คอนโซล Cloud Secret Manager แทน หากทำเช่นนี้ คุณจะต้องให้สิทธิ์App Hostingแบ็กเอนด์ด้วยคําสั่ง CLI firebase apphosting:secrets:grantaccess

ซิงค์สถานะ Firebase Auth

แอปที่ใช้ Firebase Auth ควรพิจารณาใช้ Firebase Web SDK เพื่อช่วยซิงค์สถานะการตรวจสอบสิทธิ์ระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์ ซึ่งทำได้โดยการใช้ FirebaseServerApp กับ Service Worker ขั้นตอนพื้นฐานของงานมีดังนี้

  1. ใช้ Service Worker ที่เพิ่มส่วนหัวที่เหมาะสมสําหรับแอปของคุณในคําขอไปยังเซิร์ฟเวอร์
  2. รับส่วนหัวจากคําขอในเซิร์ฟเวอร์ แล้วแปลงเป็นผู้ใช้ที่ตรวจสอบสิทธิ์ด้วย FirebaseServerApp

จัดการแบ็กเอนด์

คำสั่งสำหรับการจัดการแบ็กเอนด์ App Hosting ขั้นพื้นฐานมีอยู่ใน Firebase CLI การดำเนินการบางอย่างจะพร้อมใช้งานในคอนโซล Firebase ด้วย ส่วนนี้จะอธิบายงานการจัดการที่พบบ่อย เช่น การสร้างและลบแบ็กเอนด์

สร้างแบ็กเอนด์

แบ็กเอนด์ App Hosting คือคอลเล็กชันทรัพยากรที่มีการจัดการที่ App Hosting สร้างขึ้นเพื่อสร้างและเรียกใช้เว็บแอป เจ้าของโปรเจ็กต์ทุกคนสามารถสร้างแบ็กเอนด์ App Hosting รายการแรกสำหรับโปรเจ็กต์ได้โดยใช้คอนโซล Firebase หรือ Firebase CLI หลังจากการตั้งค่าเริ่มต้นนี้ App Hostingผู้ดูแลระบบยังสร้างและจัดการแบ็กเอนด์เพิ่มเติมได้ด้วย โปรดดูรายละเอียดที่หัวข้อFirebase App Hosting บทบาท IAM

คอนโซล Firebase: จากเมนูสร้าง ให้เลือกโฮสติ้งแอป แล้วเริ่มต้นใช้งาน

CLI: (เวอร์ชัน 13.15.4 ขึ้นไป) หากต้องการสร้างแบ็กเอนด์ ให้เรียกใช้คำสั่งต่อไปนี้จากรูทของไดเรกทอรีโปรเจ็กต์ในเครื่อง โดยระบุ projectID และภูมิภาคที่ต้องการเป็นอาร์กิวเมนต์

firebase apphosting:backends:create --project PROJECT_ID --location us-central1

สําหรับทั้งคอนโซลหรือ CLI ให้ทําตามข้อความแจ้งเพื่อตั้งชื่อแบ็กเอนด์ ตั้งค่าการเชื่อมต่อ GitHub และกำหนดการตั้งค่าการทําให้ใช้งานได้พื้นฐานต่อไปนี้

  • ตั้งค่าไดเรกทอรีรูทของแอป (ค่าเริ่มต้นคือ /)

    โดยปกติแล้ว ไฟล์ package.json จะอยู่ที่ตำแหน่งนี้

  • ตั้งค่าสาขาที่ใช้งานอยู่

    นี่คือสาขาของที่เก็บ GitHub ที่จะนำไปติดตั้งใช้งานใน URL ที่ใช้จริง บ่อยครั้งที่เป็นสาขาที่ผสานสาขาฟีเจอร์หรือสาขาการพัฒนา

  • ยอมรับหรือปฏิเสธการเปิดตัวอัตโนมัติ

    ระบบจะเปิดใช้การเปิดตัวอัตโนมัติโดยค่าเริ่มต้น เมื่อสร้างแบ็กเอนด์เสร็จแล้ว คุณสามารถเลือกที่จะติดตั้งใช้งานแอปใน App Hosting ได้ทันที

ลบแบ็กเอนด์

หากต้องการนําแบ็กเอนด์ออกอย่างสมบูรณ์ ให้ใช้ Firebase CLI ก่อน แล้วนําชิ้นงานที่เกี่ยวข้องออกด้วยตนเอง โดยระมัดระวังเป็นพิเศษไม่ให้ลบทรัพยากรที่แบ็กเอนด์อื่นๆ หรือส่วนอื่นๆ ของโปรเจ็กต์ Firebase อาจใช้อยู่

  1. เรียกใช้คำสั่งต่อไปนี้เพื่อลบแบ็กเอนด์ App Hosting การดำเนินการนี้จะปิดใช้โดเมนทั้งหมดสําหรับแบ็กเอนด์และลบบริการ Cloud Run ที่เชื่อมโยง

    firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
    
  2. (ไม่บังคับ) ในแท็บ Google Cloud Console ของ Artifact Registry ให้ลบรูปภาพสําหรับแบ็กเอนด์ใน "firebaseapphosting-images"

  3. ใน Cloud Secret Manager ให้ลบข้อมูลลับที่มี "apphosting" ในชื่อข้อมูลลับ โดยตรวจสอบอย่างละเอียดว่าไม่มีการใช้ข้อมูลลับเหล่านี้โดยแบ็กเอนด์อื่นๆ หรือส่วนอื่นๆ ของโปรเจ็กต์ Firebase