配置和管理 App Hosting 后端

App Hosting 的设计宗旨是易于使用、维护简单, 默认设置已针对大多数应用场景进行了优化与此同时 App Hosting 为您提供管理和配置后端的工具 以满足您的特定需求。本指南介绍了这些工具和流程。

配置后端

针对环境变量或运行时设置等高级配置 例如并发、CPU 和内存限制,则需要创建和修改 apphosting.yaml 文件。此文件还 支持引用 与 Cloud Secret Manager 集成,让您可以安全地签入源代码控制。

典型的 apphosting.yaml 文件如下所示,其中包含以下设置: 后端的 Cloud Run 服务、一些环境变量 对 Cloud Secret Manager 管理的 Secret 的引用:

# 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 上限:

  • 如果超过 4GiB,则至少需要 2 个 CPU
  • 如果超过 8GiB,则至少需要 4 个 CPU
  • 如果超过 16GiB,则至少需要 6 个 CPU
  • 如果超过 24GiB,则至少需要 8 个 CPU

同样,cpu 的值会影响并发设置。如果您将 少于 1 个 CPU,则必须将并发设置设为 1,并且系统仅会分配 CPU 请求处理期间

配置构建环境

有时,您需要对构建流程进行额外配置,例如 第三方 API 密钥或可调整的设置。App Hosting 提供 apphosting.yaml 中的配置来存储和检索 指定项目的数据类型

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com

对于 Next.js 应用,包含 环境变量 还会 与 App Hosting 搭配使用我们建议使用 apphosting.yaml 环境变量控制

apphosting.yaml 中,您可以指定哪些进程可以访问 使用 availability 属性配置环境变量。您可以限制 环境变量仅适用于构建环境 仅应用于运行时环境默认情况下,这两者均可使用。

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

对于 Next.js 应用,您还可以像以前一样使用 NEXT_PUBLIC_ 前缀 ,以使相应变量可在浏览器中访问。

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

有效的变量键由 A-Z 字符或下划线组成。部分 环境变量键已预留供内部使用。不使用 键:

  • X_FIREBASE_ 开头的任何变量
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION

存储和访问 Secret 参数

API 密钥等敏感信息应存储为 Secret。您可以 在 apphosting.yaml 中引用 Secret,以避免检查敏感信息 源代码控制

secret 类型的参数表示具有值的字符串参数 存储在 Cloud Secret Manager 中。 而不是 直接派生值,而 Secret 参数会检查 Cloud 中是否存在 Secret Manager,并在发布期间加载值。

  -   variable: API_KEY
      secret: myApiKeySecret

Cloud Secret Manager 中的 Secret 可以有多个版本。默认情况下, 活动后端可用的 Secret 参数的值会固定到 构建后端时 Secret 的最新可用版本。如果您 对参数进行版本控制和生命周期管理方面的要求,您可以 使用 Cloud Secret Manager 固定到特定版本。例如,要固定到 版本 5:

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

您可以使用 CLI 命令 firebase apphosting:secrets:set 创建 Secret, 系统会提示您添加必要的权限。此流程为您提供了 用于自动将 Secret 引用添加到 apphosting.yaml 的选项。

如需使用全套 Cloud Secret Manager 功能,您可以改用 访问 Cloud Secret Manager 控制台。如果这样做,您需要向 权限。firebase apphosting:secrets:grantaccess

同步 Firebase 身份验证状态

使用 Firebase Auth 的应用应考虑使用 Firebase Web SDK 来帮助 客户端和服务器之间同步身份验证状态。可以是 通过使用 Service Worker 实现 FirebaseServerApp 来简化。基本功能 任务流程如下:

  1. 实现 Service Worker ,以便在向服务器发送请求时为您的应用添加正确的标头。
  2. 从服务器上的请求获取标头,并将其转换为 auth 用户使用 FirebaseServerApp

管理后端

用于对 App Hosting 后端进行基本管理的命令包括 (在 Firebase CLI 中提供)。部分 操作也可在 Firebase 控制台中查看。本部分将 介绍一些比较常见的管理任务,包括创建和 删除后端。

创建一个后端

App Hosting 后端是托管资源的集合, App Hosting 为构建和运行 Web 应用而创建。您可以创建并列出 App Hosting 后端(使用 Firebase 控制台Firebase CLI

Firebase 控制台:从 Build 菜单中,选择 App Hosting,然后 开始使用

CLI:(版本 3.9 或更高版本)如需创建后端,请运行以下命令 从本地项目的根目录提供您的 项目 ID 作为参数(用于预览, 仅支持 us-central1 区域):

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

对于控制台或 CLI,请按照提示为后端分配名称, 设置一个 GitHub 连接 并配置以下基本部署设置:

  • 设置应用的根目录(默认为 /

    这通常是 package.json 文件所在的位置。

  • 设置活动分支

    这是您的 GitHub 代码库的分支, 实际网址。通常,这是功能分支所在的分支, 合并分支。

  • 接受或拒绝自动发布

    自动发布默认处于启用状态。完成后端创建后, 您可以选择将应用立即部署到 App Hosting。

删除一个后端

如需完全移除后端,请先使用 Firebase CLI,然后再手动 移除相关素材资源,尤其注意不要删除任何 可能被其他后端或 Firebase 项目的其他方面使用。

  1. 运行以下命令以删除 App Hosting Backend。 这将停用您后端的所有网域,并删除关联的 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”的 Secret并在 Secret 名称中采用特殊的方法, 务必确保这些密钥不会被其他后端或 了解 Firebase 项目的其他方面