了解 App Hosting 及其工作原理

App Hosting 会处理一系列复杂的后台任务,以简化应用的部署。本页面介绍了该任务流的关键部分,并提供了您可能需要根据应用需求自定义数据流的时间点的信息。

框架支持

App Hosting 为使用以下框架开发的 Web 应用提供无需配置即可部署的构建和部署支持:

  • Next.js 13 及更高版本
  • Angular 17.2 及更高版本

App Hosting 通过检查代码库中的 package-lock.json 文件或其他锁定文件来确定您使用的是哪个框架。如果您尝试部署缺少锁文件的 Node.js 应用,App Hosting 将无法构建并运行您的应用。您可以通过在根目录中运行 npm install 来创建 package-lock.json

App Hosting 框架适配器有两个关键角色:

  1. 它们会解析源代码和任何框架专用配置文件(例如 next.config.js),以了解应用的配置行为。
  2. 它们会运行应用的构建命令,以生成静态资源,并针对生产环境创建经过优化的应用版本。

框架适配器使用 npm run build 构建 Node.js 应用,最适合每个框架的默认构建脚本使用:next build(适用于 Next.js)和 ng build(适用于 Angular)。App Hosting 会尝试使用自定义构建命令进行构建,但不保证一定能成功。

App Hosting 代码库集成的运作方式

GitHub 代码库与 App Hosting 后端之间的重要连接由 Developer Connect 处理,这是 Google Cloud 针对外部 DevOps 工具的连接平台。在创建 App Hosting 后端期间,Developer Connect 的界面工作流会引导您完成 Firebase GitHub 应用的安装。此过程中的关键步骤包括:

  1. 您要为 Developer Connect 授予 Secret Manager Admin 角色。这样,系统可以将凭据作为“密文”安全地存储在 Cloud Secret Manager 中。
  2. 您授权 Firebase GitHub 应用访问您的 GitHub 代码库
  3. Developer Connect 会在项目的 Secret Manager 代码库中存储一个专用 GitHub 授权令牌;请勿修改或删除此令牌。

此外,App Hosting 与 GitHub Check API 集成,以提供发布检查。通过这项检查,您可以在 GitHub 中查看发布的状态,并在出现任何错误时调试部署流程。

与 Firebase 和其他 Google 服务集成

App Hosting 会设置您的构建和运行时环境,以便您可以使用 Google 应用默认凭据初始化 Firebase Admin SDK。这样,您的后端可以在构建和部署期间与其他 Firebase 产品进行通信。

App Hosting 后端服务账号

在构建期间和运行时,您的应用托管后端会通过服务帐号向其他 Google 服务进行身份验证。首次在 Firebase 项目中启用 App Hosting 时,系统会创建一个用于这些用途的默认服务帐号:

firebase-app-hosting-compute@PROJECT ID.iam.gserviceaccount.com

默认情况下,此服务账号适用于所有后端,并且具有一组最低权限,允许您构建、运行和监控应用。它还有权使用应用默认凭据对 Admin SDK 进行身份验证,以执行从 Cloud Firestore 加载数据等操作。请参阅 Firebase 应用托管角色

如果您的应用需要在构建时或从正在运行的后端与其他 Google 服务进行交互,您可以通过添加角色来自定义默认服务帐号。例如,如果您的应用需要 Vertex AI 权限,您可能需要添加 roles/aiplatform.user 或某些相关角色。

关键术语和定义

  • 后端:App Hosting 为构建和运行您的 Web 应用而创建的托管资源的集合。
  • 发布:实时应用的特定版本,已关联到 git 提交。
  • 实时分支:GitHub 代码库的分支,将部署到实际网址。通常,它是功能分支或开发分支会合并到其中的分支。

已知问题和限制

App Hosting 预览版具有一些已知的限制:

  • 在某些情况下,App Hosting 后端可能会在应用的网址中返回 Intermittent connection error 消息。我们会在后续版本中提供修复程序。
  • 修改了缓存标头,将 CDN 缓存限制为 60 秒;将来,当 App Hosting 能够在部署时快速清除缓存时,此限制将被取消。
  • 未缓存的静态文件将从 Cloud Run 传送;在以后的版本中,这些文件将通过 App Hosting 源进行存储和传送,以提高性能。
  • 我们将在后续版本中提供将通配符子网域作为自定义网域使用。
  • 应用托管 SKU 可能不会显示在 Firebase 控制台的后端使用情况页面中。我们会在后续版本中提供这些功能。
  • Firebase 控制台可能会在后端创建时间歇性地显示“build not found and is invalid”(未找到构建无效且无效)错误。
  • 系统目前不支持包含嵌套 package.json 文件的项目,无论 root\_directory 是使用 Firebase 控制台还是 CLI 进行配置。我们会在后续版本中提供修复方案。
  • 目前,同一项目中的所有后端都共享一个 GitHub 组织/帐号。 它们可以连接到该组织/帐号下的不同代码库。如需创建连接到不同 GitHub 账号的后端,请将它们放在单独的项目中。