Firebase从云存储桶托管静态站点?

时间:2020-06-30 16:37:15

标签: firebase google-cloud-functions google-cloud-storage firebase-storage firebase-hosting

我已经在云函数中使用Typescript构建了一个动态站点。我还具有云功能触发器,只要Firestore中的数据发生变化,这些触发器就会将相关页面重新编译为Firebase云存储桶中托管的静态页面。

桶看起来像这样:

gs://[bucketname].appspot.com
/app/index.html
/app/page1.html
/app/page2.html
/uploads/images.webp
...

当前,静态网站是通过名为app的云功能中的快速应用程序提供的。这里的问题在于云功能状态。它们并不总是很热,这使得初始加载时间非常慢。

firebase.json

"hosting": {
  "public": "public",
  "rewrites": [{ "source": "**", "function": "app" }],
}

我要实现的目标是让Firebase托管指向存储桶中的文件,而不是在云功能中安装快速应用程序。在以下两行之间的内容:

firebase.json

"hosting": {
  "public": "public",
  "rewrites": [
    { "source": "**/:url", "destination": "[BUCKETURL]/app/:url.html" },
    { "source": "**", "destination": "[BUCKETURL]/app/index.html" }]
}

我的URL结构非常简单,它是domain.com/page-name,我也想保持这种方式,最后不带.html。任何建议将不胜感激。谢谢

2 个答案:

答案 0 :(得分:0)

在您描述时,允许将Firebase Hosting从Cloudbase重写为Cloud Storage,但这听起来很酷,但目前尚无法实现。我建议filing a feature request

与此同时,您的选择是:

  • 使用Firestation Hosting中的Cloud Functions集成作为重定向器,就像您已经做的那样。确实,这有时可能会导致冷启动延迟。

  • 在需要时使用另一种类型的Cloud Function(或其他服务器端进程)生成静态内容,并将其推送到Cloud Storage存储桶中。在这种情况下,您将不再使用Firebase Hosting,而是始终直接从Cloud Storage存储桶中提供静态内容。

    如果您对此感兴趣,请签出:Upload single file to firebase hosting via CLI or other without deleting existing ones?

答案 1 :(得分:0)

一种类似的方法,可以使用GCP云存储和HTTP负载平衡器,但是唯一的不便之处是无法隐藏.html

对于此方法,主要步骤为:

  • 创建一个对象可以公开访问的存储桶
  • 设置负载平衡器和SSL证书。
  • 将负载均衡器连接到存储桶。
  • 使用A记录将您的域指向负载均衡器。

要在存储桶中创建静态网站,请遵循this guide

存储在存储桶中的静态站点不依赖于任何后端,并且您生成的即时文件可以是configured not to be cached,并且始终提供可用的最新版本。