App Hosting ได้รับการออกแบบมาให้ใช้งานง่ายและไม่ต้องบำรุงรักษามากนัก โดยมีการตั้งค่าเริ่มต้นที่เพิ่มประสิทธิภาพสำหรับกรณีการใช้งานส่วนใหญ่ ในขณะเดียวกัน App Hosting ยังมีเครื่องมือให้คุณจัดการและกำหนดค่าแบ็กเอนด์ตามความต้องการเฉพาะของคุณ คู่มือนี้จะอธิบายเครื่องมือและกระบวนการเหล่านั้น
สร้างและแก้ไข apphosting.yaml
สําหรับการกําหนดค่าขั้นสูง เช่น ตัวแปรสภาพแวดล้อมหรือการตั้งค่ารันไทม์ เช่น การทำงานพร้อมกัน, 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
ลบล้างสคริปต์การสร้างและเรียกใช้
App Hosting จะอนุมานคำสั่งเริ่มต้นและคำสั่งสร้างของแอปตามเฟรมเวิร์กที่ตรวจพบ หากต้องการใช้คำสั่งเริ่มต้นหรือคำสั่งเริ่มที่กำหนดเอง คุณสามารถลบล้างค่าเริ่มต้นของ App Hosting ใน apphosting.yaml
scripts:
buildCommand: next build --no-lint
runCommand: node dist/index.js
การลบล้างคําสั่งบิลด์จะมีลําดับความสําคัญเหนือกว่าคําสั่งบิลด์อื่นๆ และเลือกไม่ใช้แอปกับอะแดปเตอร์เฟรมเวิร์ก รวมถึงปิดใช้การเพิ่มประสิทธิภาพเฉพาะเฟรมเวิร์กที่มีให้ใน App Hosting วิธีนี้เหมาะสําหรับกรณีที่อะแดปเตอร์รองรับฟีเจอร์ของแอปไม่ดี หากต้องการเปลี่ยนคําสั่งบิลด์แต่ยังคงใช้อะแดปเตอร์ที่เรามีให้ ให้ตั้งค่าสคริปต์บิลด์ใน package.json
แทน ตามที่อธิบายไว้ในอะแดปเตอร์เฟรมเวิร์ก App Hosting
ใช้การลบล้างคำสั่งการเรียกใช้เมื่อมีคำสั่งที่เฉพาะเจาะจงซึ่งคุณต้องการใช้เพื่อเริ่มแอปที่แตกต่างจากคำสั่ง App Hosting-inferred
กำหนดค่าเอาต์พุตของบิลด์
App Hosting จะเพิ่มประสิทธิภาพการติดตั้งใช้งานแอปโดยค่าเริ่มต้นด้วยการลบไฟล์เอาต์พุตที่ไม่ได้ใช้ตามที่เฟรมเวิร์กระบุ หากต้องการเพิ่มประสิทธิภาพขนาดการนําส่งแอปหรือละเว้นการเพิ่มประสิทธิภาพเริ่มต้น คุณสามารถลบล้างค่านี้ได้ใน apphosting.yaml
outputFiles:
serverApp:
include: [dist, server.js]
พารามิเตอร์ include
จะรับรายการไดเรกทอรีและไฟล์ที่เกี่ยวข้องกับไดเรกทอรีรูทของแอปที่จําเป็นสําหรับการทําให้แอปใช้งานได้ หากต้องการเก็บไฟล์ทั้งหมดไว้ ให้ตั้งค่า include เป็น [.]
แล้วระบบจะทําให้ไฟล์ทั้งหมดใช้งานได้
จัดเก็บและเข้าถึงพารามิเตอร์ลับ
ข้อมูลที่ละเอียดอ่อน เช่น คีย์ 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
กำหนดค่าการเข้าถึง VPC
แบ็กเอนด์ App Hosting เชื่อมต่อกับเครือข่าย Virtual Private Cloud (VPC) ได้ ดูข้อมูลเพิ่มเติมและตัวอย่างได้ที่เชื่อมต่อ Firebase App Hosting กับเครือข่าย VPC
ใช้การแมป vpcAccess
ในไฟล์ apphosting.yaml
เพื่อกําหนดค่าการเข้าถึง
ใช้ชื่อเครือข่ายที่สมบูรณ์ในตัวเองหรือรหัส การใช้รหัสช่วยให้คุณย้ายข้อมูลระหว่างสภาพแวดล้อมการทดสอบและสภาพแวดล้อมที่ใช้งานจริงด้วยตัวเชื่อมต่อ/เครือข่ายที่แตกต่างกันได้
runConfig:
vpcAccess:
egress: PRIVATE_RANGES_ONLY # Default value
networkInterfaces:
# Specify at least one of network and/or subnetwork
- network: my-network-id
subnetwork: my-subnetwork-id
จัดการแบ็กเอนด์
คำสั่งสำหรับการจัดการพื้นฐานของแบ็กเอนด์ App Hosting มีอยู่ใน Firebase CLI และคอนโซล Firebase ส่วนนี้อธิบายงานการจัดการที่พบบ่อย เช่น การสร้างและลบแบ็กเอนด์
สร้างแบ็กเอนด์
App Hostingแบ็กเอนด์คือคอลเล็กชันแหล่งข้อมูลที่จัดการซึ่ง App Hosting สร้างขึ้นเพื่อสร้างและเรียกใช้เว็บแอป
คอนโซล Firebase: จากเมนูสร้าง ให้เลือกโฮสติ้งแอป แล้วเริ่มต้นใช้งาน
CLI: (เวอร์ชัน 13.15.4 ขึ้นไป) หากต้องการสร้างแบ็กเอนด์ ให้เรียกใช้คำสั่งต่อไปนี้จากรูทของไดเรกทอรีโปรเจ็กต์ในเครื่อง โดยระบุ projectID และภูมิภาคที่ต้องการเป็นอาร์กิวเมนต์
firebase apphosting:backends:create --project PROJECT_ID --location us-central1
สําหรับทั้งคอนโซลหรือ CLI ให้ทําตามข้อความแจ้งเพื่อเลือกภูมิภาค ตั้งค่าการเชื่อมต่อ GitHub และกำหนดการตั้งค่าการทําให้ใช้งานได้พื้นฐานต่อไปนี้
ตั้งค่าไดเรกทอรีรูทของแอป (ค่าเริ่มต้นคือ
/
)โดยปกติแล้ว ไฟล์
package.json
จะอยู่ที่ตำแหน่งนี้
ตั้งค่าสาขาที่ใช้งานอยู่
นี่คือ Branch ของที่เก็บ GitHub ที่จะนำไปติดตั้งใช้งานใน URL ที่ใช้จริง บ่อยครั้งที่เป็นสาขาที่ผสานสาขาฟีเจอร์หรือสาขาการพัฒนา
ยอมรับหรือปฏิเสธการเปิดตัวอัตโนมัติ
ระบบจะเปิดใช้การเปิดตัวอัตโนมัติโดยค่าเริ่มต้น เมื่อสร้างแบ็กเอนด์เสร็จแล้ว คุณสามารถเลือกที่จะติดตั้งใช้งานแอปใน App Hosting ได้ทันที
กําหนดชื่อให้กับแบ็กเอนด์
ลบแบ็กเอนด์
หากต้องการนําแบ็กเอนด์ออกอย่างสมบูรณ์ ให้ใช้ Firebase CLI หรือคอนโซล Firebase เพื่อลบก่อน จากนั้นนําชิ้นงานที่เกี่ยวข้องออกด้วยตนเอง โดยระมัดระวังเป็นพิเศษไม่ให้ลบทรัพยากรที่แบ็กเอนด์อื่นๆ หรือส่วนอื่นๆ ของโปรเจ็กต์ Firebase อาจใช้อยู่
คอนโซล Firebase: จากเมนูการตั้งค่า ให้เลือกลบแบ็กเอนด์
CLI: (เวอร์ชัน 13.15.4 ขึ้นไป)
เรียกใช้คำสั่งต่อไปนี้เพื่อลบแบ็กเอนด์ App Hosting การดำเนินการนี้จะปิดใช้โดเมนทั้งหมดสําหรับแบ็กเอนด์และลบบริการ Cloud Run ที่เชื่อมโยง
firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
(ไม่บังคับ) ในแท็บ Google Cloud Console ของ Artifact Registry ให้ลบรูปภาพสําหรับแบ็กเอนด์ใน "firebaseapphosting-images"
ใน Cloud Secret Manager ให้ลบข้อมูลลับที่มี "apphosting" ในชื่อข้อมูลลับ โดยตรวจสอบอย่างละเอียดว่าไม่มีการใช้ข้อมูลลับเหล่านี้โดยแบ็กเอนด์อื่นๆ หรือส่วนอื่นๆ ของโปรเจ็กต์ Firebase