您可以在 App Hosting 部署前,使用 App Hosting 模擬器對應用程式執行本機測試。App Hosting 模擬器是 Firebase 本機模擬器套件的一部分。
使用 App Hosting 模擬器前,請務必瞭解整體 Firebase Local Emulator Suite 工作流程,並安裝及設定 Local Emulator Suite,並查看其 CLI 指令。
本主題假設您已熟悉 App Hosting。如有需要,請參閱 App Hosting 簡介和其他相關資料,瞭解 App Hosting 的運作方式。
App Hosting 模擬器有什麼用途?
App Hosting 模擬器可讓您在本機測試及調整網頁應用程式。這麼做可以簡化開發程序,並提升使用 Firebase 建構並部署在 App Hosting 上的 Web 應用程式品質。
App Hosting 模擬器:
- 讓您在本機執行網路應用程式,並使用
apphosting.yaml
設定檔中定義的環境變數和機密資料。 - 可使用
apphosting.emulator.yaml
檔案覆寫環境變數和密鑰,以便在模擬器中使用。 - 可與其他 Firebase 模擬器搭配使用。如果您使用的是 Firebase、Auth 或任何其他模擬器,Local Emulator Suite 會確保先啟動這些模擬器,再啟動 App Hosting 模擬器。
設定模擬器
如要開始使用,請按照「安裝、設定及整合本機模擬器套件」一文的說明,安裝及初始化 Local Emulator Suite。除了要設定的其他 Firebase 模擬器之外,請務必選取 App Hosting
Emulator
。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.
您在這項設定流程中提供的任何值,都會用於更新 firebase.json
中的 App Hosting 模擬器設定。您也可以直接更新 firebase.json
,設定應用程式代管模擬器。App Hosting 模擬器的結構定義如下:
{
...
"emulators": {
"apphosting": {
"startCommand": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
- 在初始化模擬器時,系統會自動產生並設定
startCommand
。如果未提供,模擬器會偵測並執行套件管理員的開發人員指令。 rootDirectory
可用於支援單一版本控制倉庫專案設定。如果您的網頁應用程式位於子目錄中,您需要提供該目錄相對於根目錄 (firebase.json
的位置) 的路徑。
管理模擬
模擬器初始化會在應用程式的根目錄中建立 apphosting.emulator.yaml
檔案。這個設定檔的架構與實際工作環境中使用的 apphosting.yaml
檔案相同,但僅限於本地開發使用。根據預設,模擬器會從 apphosting.yaml
檔案讀取設定,但如果有 apphosting.emulator.yaml
檔案,則會優先處理該檔案中的設定。
apphosting.emulator.yaml
檔案的設計目的是讓您可以安全地提交檔案並與同事分享。為確保您不會不小心將機密資料提交至來源存放區,任何在 apphosting.yaml
中為機密的環境變數,也必須是 apphosting.emulator.yaml
中的機密。如果密鑰在正式版和本地開發環境之間不需要變更 (例如 Gemini API 金鑰),則不需要將其新增至 apphosting.emulator.yaml
;而是授予團隊存取密鑰的權限。
如果您的應用程式使用許多機密 (例如,三種不同服務的 API 金鑰,每個正式版、測試版和本地開發版都有不同的值),您可能會超過 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 群組管理密鑰存取權,而非將存取權授予個別使用者。這樣一來,您就能簡化新成員加入開發人員團隊的流程,因為將他們加入群組後,他們就能存取所需的所有機密資料。您可能已經有適當的群組,供開發人員彼此溝通。透過 Google 網路論壇控制存取權,也可以確保離開團隊的開發人員在從電子郵件群組中移除後,無法存取所有機密金鑰。如果機密資料可存取實際工作資料或實際副作用,您還是可以使用 firebase apphosting:secrets:set
輪替金鑰並為其提供新值。
執行模擬器
firebase emulators:start
這會啟動 firebase.json
檔案中定義的所有模擬器,包括 App Hosting 模擬器。