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

Firebase从云存储桶托管静态站点?,firebase,google-cloud-functions,google-cloud-storage,firebase-storage,firebase-hosting,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的云功能中的express app提供服务。这里的问题在于云函

我已经在云函数中使用typescript构建了一个动态站点。我还有云函数触发器,每当Firestore中的数据发生变化时,相关页面就会重新编译为firebase云存储桶中托管的静态页面

看起来像这样:

gs://[bucketname].appspot.com
/app/index.html
/app/page1.html
/app/page2.html
/uploads/images.webp
...
目前,静态站点通过名为app的云功能中的express app提供服务。这里的问题在于云函数状态。它们并不总是很热,这使得初始加载时间非常慢

firebase.json

"hosting": {
  "public": "public",
  "rewrites": [{ "source": "**", "function": "app" }],
}
"hosting": {
  "public": "public",
  "rewrites": [
    { "source": "**/:url", "destination": "[BUCKETURL]/app/:url.html" },
    { "source": "**", "destination": "[BUCKETURL]/app/index.html" }]
}
我想实现的是让Firebase主机指向bucket中的文件,而不是在云功能中使用express应用程序。字里行间的东西:

firebase.json

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

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

允许从Firebase主机重写到云存储,正如你所描述的,听起来很酷,但目前不可能。我推荐

同时,您的选择是:

  • 使用云功能集成到Firebase主机中作为重定向器,就像您已经做的那样。这确实可能会导致偶尔的冷启动延迟

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

    如果您对此感兴趣,请查看:


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

为此,主要步骤如下:

  • 创建一个对象可公开访问的bucket
  • 设置负载平衡器和SSL证书
  • 将负载平衡器连接到铲斗
  • 使用
    A
    记录将域指向负载平衡器
要在bucket中创建静态网站,请按照


托管在bucket中的静态站点不依赖于任何后端,您生成的动态文件可以并始终提供最新版本。

谢谢,Aldo此解决方案可以工作,它不是我想要的。SEO是非常重要的,所以使用.html是不可能的。理想情况下,我还希望将整个堆栈保存在firebase中,避免使用GC的负载平衡器。