配置和管理 App Hosting 后端

App Hosting 的设计旨在实现易用和低维护,默认设置针对大多数用例进行了优化。同时,App Hosting 还提供了一些工具,可供您根据自己的具体需求管理和配置后端。本指南介绍了这些工具和流程。

配置后端

对于高级配置(例如环境变量)或运行时设置(例如并发性、CPU 和内存限制),您需要在应用的根目录中创建和修改 apphosting.yaml 文件。此文件还支持引用通过 Cloud Secret Manager 管理的 Secret,因此可以安全地签入源代码控制系统。

如需创建 apphosting.yaml,请运行以下命令:

firebase init apphosting

这会创建一个包含示例(带注释)配置的基本起始 apphosting.yaml 文件。修改后,典型的 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.firebasestorage.app
    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 Hostingapphosting.yaml 中提供了环境配置,可为您的项目存储和检索此类数据。

env:
-   variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app

对于 Next.js 应用,包含环境变量的 dotenv 文件也适用于 App Hosting。我们建议使用 apphosting.yaml 通过任何框架进行精细的环境变量控制。

apphosting.yaml 中,您可以使用 availability 属性指定哪些进程可以访问您的环境变量。您可以将环境变量限制为仅适用于构建环境或仅适用于运行时环境。默认情况下,这两种设备都可以使用该功能。

env:
-   variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app
    availability:
    -   BUILD
    -   RUNTIME

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

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.firebasestorage.app
    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,系统会提示您添加必要的权限。通过此流程,您可以选择自动将密钥引用添加到 apphosting.yaml

如需使用 Cloud Secret Manager 的完整功能套件,您可以改用 Cloud Secret Manager 控制台。如果您这样做,则需要使用 CLI 命令 firebase apphosting:secrets:grantaccessApp Hosting 后端授予权限。

同步 Firebase Auth 状态

使用 Firebase Auth 的应用应考虑使用 Firebase Web SDK,以帮助在客户端和服务器之间保持身份验证状态同步。您可以通过使用服务工件实现 FirebaseServerApp 来实现这一点。基本任务流程如下:

  1. 实现服务工件,以便在向服务器发出请求时为应用添加正确的标头。
  2. 从服务器上的请求获取标头,并使用 FirebaseServerApp 将其转换为身份验证用户。

管理后端

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

创建一个后端

App Hosting 后端是 App Hosting 创建的用于构建和运行 Web 应用的一系列受管理资源。任何项目所有者都可以使用 Firebase 控制台Firebase CLI 为项目创建第一个 App Hosting 后端。完成此初始设置后,App Hosting 管理员还可以创建和管理其他后端。如需了解详情,请参阅 Firebase App Hosting IAM 角色

Firebase 控制台:从构建菜单中,依次选择 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”的所有 Secret,并特别注意确保这些 Secret 不会被其他后端或 Firebase 项目的其他方面使用