配置和管理 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.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 Hostingapphosting.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 应用,您还可以像在 dotenv 文件中一样使用 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,系统会提示您添加必要的权限。通过此流程,您可以选择自动将密钥引用添加到 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 后端。

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”的所有 Secret,并特别注意确保这些 Secret 不会被其他后端或 Firebase 项目的其他方面使用