ทดสอบการติดตั้งใช้งานแอปในเครื่อง

คุณสามารถทดสอบแอปในเครื่องก่อนApp Hostingทำให้ใช้งานได้โดยใช้App Hostingโปรแกรมจำลอง ซึ่งเป็นส่วนหนึ่งของ Firebase Local Emulator Suite

ก่อนใช้โปรแกรมจำลอง App Hosting โปรดตรวจสอบว่าคุณเข้าใจเวิร์กโฟลว์ Local Emulator Suite ของ Firebase โดยรวม และติดตั้งและกําหนดค่า Local Emulator Suite รวมถึงอ่านคําสั่ง CLI ของ Local Emulator Suite

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

ฉันใช้โปรแกรมจำลอง App Hosting ทำอะไรได้บ้าง

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

โปรแกรมจำลอง App Hosting

  1. ช่วยให้คุณเรียกใช้เว็บแอปในเครื่องได้โดยใช้ตัวแปรสภาพแวดล้อมและข้อมูลลับที่กําหนดไว้ในไฟล์การกําหนดค่า apphosting.yaml
  2. สามารถลบล้างตัวแปรสภาพแวดล้อมและข้อมูลลับเพื่อใช้ในโปรแกรมจำลองด้วยไฟล์ apphosting.emulator.yaml
  3. ใช้ร่วมกับโปรแกรมจำลอง Firebase อื่นๆ ได้ หากคุณใช้ Firestore, Auth หรือโปรแกรมจำลองอื่นๆ Local Emulator Suite จะตรวจสอบว่าโปรแกรมจำลองเหล่านี้เริ่มทำงานก่อนโปรแกรมจำลอง App Hosting

กำหนดค่าโปรแกรมจำลอง

หากต้องการเริ่มต้นใช้งาน ให้ติดตั้งและเริ่มต้น Local Emulator Suite ตามที่อธิบายไว้ในการติดตั้ง การกำหนดค่า และการผสานรวมชุดโปรแกรมจำลองในเครื่อง อย่าลืมเลือก App Hosting Emulator นอกเหนือจากโปรแกรมจำลอง Firebase อื่นๆ ที่ต้องการตั้งค่า CLI จะแจ้งให้คุณป้อนค่าจำลอง App Hosting บางค่า ซึ่งรวมถึง

  • ไดเรกทอรีรูทของแอปซึ่งสัมพันธ์กับโปรเจ็กต์ ซึ่งสำคัญหากคุณใช้ monorepos กับ App Hosting
  • คุณต้องการลบล้างค่าใดๆ สําหรับการพัฒนาในเครื่องหรือไม่
  • คุณต้องการให้สิทธิ์เข้าถึงข้อมูลลับสําหรับการพัฒนาในเครื่องแก่เพื่อนร่วมทีมหรือไม่
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
 ◯ Firestore Emulator
 ◯ Database Emulator
 ◯ Hosting Emulator
 ◯ Pub/Sub Emulator
 ◯ Storage Emulator
 ◯ Eventarc Emulator
(Move up and down to reveal more choices)

? Specify your app's root directory relative to your project (./)

? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)

? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
 ◯ API_KEY

? What new value would you like for plaintext MEMCACHE_ADDR?

? What would you like to name the secret reference for API_KEY? (test-api-key)

? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]

? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:

✔  Successfully set IAM bindings on secret test-api-key.

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

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • ระบบจะสร้างและตั้งค่า startCommand โดยอัตโนมัติเมื่อเริ่มต้นโปรแกรมจำลอง หากไม่ได้ระบุ โปรแกรมจำลองจะตรวจหาและเรียกใช้คำสั่ง dev ของเครื่องมือจัดการแพ็กเกจ
  • rootDirectory ใช้เพื่อรองรับการตั้งค่าโปรเจ็กต์ Monorepo หากเว็บแอปอยู่ในไดเรกทอรีย่อย คุณจะต้องระบุเส้นทางของไดเรกทอรีนั้นซึ่งสัมพันธ์กับรูท (ตำแหน่งของ firebase.json)

จัดการการจําลอง

การสร้างข้อมูลจำเพาะของโปรแกรมจำลองจะสร้างไฟล์ apphosting.emulator.yaml ในไดเรกทอรีรูทของแอป ไฟล์การกําหนดค่านี้มีสคีมาเดียวกับไฟล์ apphosting.yaml ที่ใช้กับเวอร์ชันที่ใช้งานจริง แต่มีไว้สําหรับการพัฒนาในเครื่องเท่านั้น โดยค่าเริ่มต้น เครื่องจำลองจะอ่านการกำหนดค่าจากไฟล์ apphosting.yaml แต่หากมีไฟล์ apphosting.yaml อยู่ ระบบจะจัดลำดับความสำคัญของการกำหนดค่าในไฟล์นั้นและให้ความสำคัญก่อนapphosting.emulator.yaml

ไฟล์ apphosting.emulator.yaml ออกแบบมาเพื่อให้คอมมิตและแชร์กับเพื่อนร่วมงานได้อย่างปลอดภัย ตัวแปรสภาพแวดล้อมที่เป็นข้อมูลลับใน apphosting.yaml ต้องเป็นข้อมูลลับใน apphosting.emulator.yaml ด้วยเช่นกัน เพื่อช่วยป้องกันไม่ให้คุณคอมมิตข้อมูลที่ละเอียดอ่อนไปยังที่เก็บข้อมูลซอร์สโค้ดโดยไม่ตั้งใจ หากข้อมูลลับไม่จําเป็นต้องเปลี่ยนแปลงระหว่างเวอร์ชันที่ใช้งานจริงกับการพัฒนาในเครื่อง (เช่น คีย์ Gemini API) ก็ไม่จำเป็นต้องเพิ่มลงใน apphosting.emulator.yaml ให้ให้สิทธิ์เข้าถึงข้อมูลลับแก่ทีมแทน

หากแอปพลิเคชันใช้ข้อมูลลับจำนวนมาก (เช่น คีย์ API สำหรับบริการ 3 รายการที่แตกต่างกัน โดยมีค่าที่แตกต่างกันสำหรับแต่ละบริการ ได้แก่ เวอร์ชันที่ใช้งานจริง เวอร์ชันที่ใช้งานจริงชั่วคราว และเวอร์ชันที่พัฒนาในเครื่อง) คุณอาจใช้เกินจากระดับที่ไม่มีค่าใช้จ่ายของ Cloud Secret Manager และจะต้องจ่าย $0.06 ต่อข้อมูลลับเพิ่มเติมต่อเดือน หากต้องการจัดการการกําหนดค่าในเครื่องนอกระบบควบคุมแหล่งที่มาเพื่อหลีกเลี่ยงค่าธรรมเนียมนี้ คุณสามารถใช้ไฟล์ apphosting.local.yaml รุ่นเดิมได้ ซึ่งแตกต่างจาก apphosting.emulator.yaml ตรงที่ไฟล์นี้อนุญาตให้ระบุค่าแบบข้อความธรรมดาสำหรับตัวแปรสภาพแวดล้อมที่เป็นค่าลับใน apphosting.yaml

ให้สิทธิ์เข้าถึงข้อมูลลับแก่ผู้ใช้หรือกลุ่ม

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

firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com

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

ลองใช้ Google Groups เพื่อจัดการสิทธิ์เข้าถึงข้อมูลลับแทนการให้สิทธิ์เข้าถึงแก่ผู้ใช้แต่ละราย วิธีนี้จะช่วยให้การเริ่มต้นใช้งานสมาชิกใหม่ในทีมนักพัฒนาซอฟต์แวร์ง่ายขึ้น เนื่องจากการเพิ่มสมาชิกลงในกลุ่มจะทำให้สมาชิกมีสิทธิ์เข้าถึงข้อมูลลับทั้งหมดที่ต้องการ คุณอาจมีกลุ่มที่เหมาะสมอยู่แล้วซึ่งนักพัฒนาแอปสื่อสารกัน การควบคุมการเข้าถึงด้วย Google Groups ยังช่วยให้มั่นใจว่านักพัฒนาซอฟต์แวร์ที่ออกจากทีมจะเสียสิทธิ์เข้าถึงข้อมูลลับทั้งหมดเมื่อถูกนำออกจากกลุ่มอีเมล อย่างไรก็ตาม หากข้อมูลลับมีสิทธิ์เข้าถึงข้อมูลเวอร์ชันที่ใช้งานจริงหรือผลข้างเคียงในชีวิตจริง คุณก็อาจยังต้องหมุนเวียนคีย์และกำหนดค่าใหม่ด้วย firebase apphosting:secrets:set

เรียกใช้โปรแกรมจำลอง

firebase emulators:start

ซึ่งจะเป็นการเริ่มโปรแกรมจำลองทั้งหมดที่ระบุไว้ในไฟล์ firebase.json รวมถึงโปรแกรมจำลอง App Hosting