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)。
请注意 cpu
和 memoryMiB
之间的重要关系;可设置
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
来简化。基本功能
任务流程如下:
- 实现 Service Worker ,以便在向服务器发送请求时为您的应用添加正确的标头。
- 从服务器上的请求获取标头,并将其转换为 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 项目的其他方面使用。
运行以下命令以删除 App Hosting 后端。 这将停用您后端的所有网域,并删除关联的 Cloud Run 服务:
firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
(可选)在 Artifact Registry 的 Google Cloud 控制台标签页, 在“firebaseapphosting-images”中删除后端的映像。
在 Cloud Secret Manager 中, 删除所有包含“apphosting”的 Secret并在 Secret 名称中采用特殊的方法, 务必确保这些密钥不会被其他后端或 了解 Firebase 项目的其他方面。