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

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

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

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

ไฟล์ 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.appspot.com
    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 service มีให้ในออบเจ็กต์ runConfig:

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

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

  • มากกว่า 4GiB ต้องใช้ CPU อย่างน้อย 2 ตัว
  • 8GiB มากกว่า 4 GB ต้องใช้ 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.appspot.com

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

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

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

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

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

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

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

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

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

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

  -   variable: API_KEY
      secret: myApiKeySecret

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

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

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

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

ซิงค์สถานะการตรวจสอบสิทธิ์ Firebase

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

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

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

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

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

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

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

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

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

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

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

    ซึ่งโดยปกติจะเป็นตำแหน่งไฟล์ package.json ของคุณ

  • ตั้งค่า Branch แบบสด

    นี่คือ Branch ของที่เก็บ GitHub ที่ทำให้ใช้งานได้กับ URL ที่เผยแพร่อยู่ บ่อยครั้งที่มันเป็นกิ่งก้านที่แสดงถึงกิ่งก้านหรือการพัฒนา ผสาน Branch แล้ว

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

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

ลบแบ็กเอนด์

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

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

    firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
    
  2. (ไม่บังคับ) ใน แท็บคอนโซล Google Cloud สำหรับ Artifact Registry, ลบอิมเมจสำหรับแบ็กเอนด์ของคุณใน "firebaseapphosting-images"

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