配置和管理 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 控制台。如果这样做,您需要向 使用 CLI 命令 firebase apphosting:secrets:grantaccess 访问 App Hosting 后端的权限。

同步 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 后端。 这将停用您后端的所有网域,并删除关联的 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 项目的其他方面