設定及管理 App Hosting 後端

App Hosting 的設計理念是讓使用者輕鬆操作,並減少維護工作,預設設定則可針對多數用途進行最佳化。同時,App Hosting 也提供工具,方便您根據特定需求管理及設定後端。本指南將說明這些工具和程序。

設定後端

如果是環境變數或執行階段設定 (例如並行、CPU 和記憶體限制),您必須在應用程式的根目錄中建立及編輯 apphosting.yaml 檔案。這個檔案也支援參照由 Cloud Secret Manager 管理的密鑰,因此可安全地存入原始碼控管系統。

如要建立 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.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 服務的佈建方式。runConfig 物件提供 Cloud Run 服務的可用設定:

  • cpu:每個服務執行個體使用的 CPU 數量 (預設值為 0)。
  • memoryMiB – 為每個服務執行個體分配的記憶體量 (以 MiB 為單位,預設為 512)
  • maxInstances - 一次執行的容器數量上限 (預設為 100 個,由配額管理)
  • minInstances – 一律保持運作的容器數量 (預設為 0)。
  • concurrency – 每個服務執行個體可接收的要求數量上限 (預設為 80)。

請注意 cpumemoryMiB 之間的重要關係。記憶體可以設為 128 到 32768 之間的任何整數值,但增加記憶體限制可能需要增加 CPU 限制:

  • 超過 4 GiB 則至少需要 2 個 CPU
  • 超過 8 GiB 則至少需要 4 個 CPU
  • 超過 16 GiB 則至少需要 6 個 CPU
  • 超過 24 GiB 則至少需要 8 個 CPU

同樣地,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 屬性,指定哪些程序可以存取環境變數。您可以限制環境變數僅供建構環境使用,或是僅供執行階段環境使用。根據預設,系統會為這兩種平台提供參數。

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 金鑰) 應儲存在 Secret 中。您可以在 apphosting.yaml 中參照機密資料,避免將機密資訊簽入原始碼控管。

secret 類型的參數代表字串參數,其值儲存在 Cloud Secret Manager 中。密鑰參數不會直接擷取值,而是會檢查 Cloud Secret Manager 中是否有該值,並在推出期間載入值。

  -   variable: API_KEY
      secret: myApiKeySecret

Cloud Secret Manager 中的密鑰可以有多個版本。根據預設,可供實際後端使用的密鑰參數值會鎖定為後端建構時可用的最新密鑰版本。如果您對參數的版本管理和生命週期管理有相關需求,可以使用 Cloud Secret Manager 固定特定版本。例如,如要將版本鎖定為 5:

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

您可以使用 CLI 指令 firebase apphosting:secrets:set 建立機密,系統會提示您新增必要權限。這個流程可讓您選擇自動將密鑰參照新增至 apphosting.yaml

如要使用完整的 Cloud Secret Manager 功能套件,您可以改用 Cloud Secret Manager 主控台。如要這樣做,您必須使用 CLI 指令 firebase apphosting:secrets:grantaccess 將權限授予 App Hosting 後端。

同步 Firebase Auth 狀態

使用 Firebase Auth 的應用程式應考慮使用 Firebase Web SDK,以便在用戶端和伺服器之間保持驗證狀態同步。方法是使用 Service Worker 實作 FirebaseServerApp。基本工作流程如下:

  1. 實作 Service Worker,在向伺服器提出要求時,為應用程式新增正確的標頭。
  2. 從伺服器上的要求取得標頭,然後使用 FirebaseServerApp 將其轉換為驗證使用者。

管理後端

Firebase CLI 提供 App Hosting 後端基本管理指令。Firebase 控制台也提供部分作業。本節將說明一些較常見的管理工作,包括建立及刪除後端。

建立後端

App Hosting 後端是 App Hosting 建立及執行 Web 應用程式時所建立的受管理資源集合。您可以使用 Firebase 主控台Firebase CLI 建立及列出 App Hosting 後端。

Firebase 主控台:從「Build」選單中依序選取「App Hosting」和「Get started」

CLI: (13.15.4 以上版本) 如要建立後端,請從本機專案目錄根目錄執行下列指令,並提供 projectID 和偏好的區域做為引數:

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

無論是使用控制台或 CLI,請按照提示為後端指派名稱,設定 GitHub 連線,並設定下列基本部署設定:

  • 設定應用程式的根目錄 (預設為 /)

    這通常是 package.json 檔案的所在位置。

  • 設定直播分支

    這是 GitHub 存放區的子集,會部署至實際網址。通常是指將功能分支或開發分支合併的目標分支。

  • 接受或拒絕自動推出

    自動推出功能預設為啟用。建立後端完成後,您可以選擇立即將應用程式部署至 App Hosting

刪除後端

如要完全移除後端,請先使用 Firebase CLI,然後手動移除相關資產,並特別注意不要刪除其他後端或 Firebase 專案其他部分可能會使用的任何資源。

  1. 執行下列指令即可刪除 App Hosting 後端。這樣做會停用後端的所有網域,並刪除相關聯的 Cloud Run 服務:

    firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
    
  2. (選用) 在 Artifact Registry 的 Google Cloud 控制台分頁中,刪除「firebaseapphosting-images」中後端的映像檔。

  3. Cloud Secret Manager 中,刪除密鑰名稱中含有「apphosting」的所有密鑰,請特別留意,確保其他後端或 Firebase 專案的其他部分並未使用這些密鑰