Firebase Web应用程序中的不同环境

11

我正在使用Firebase构建一个Web应用程序。目前,我可以说我有两个阶段:开发阶段,运行在本地主机上的firebase serve和部署到Firebase托管的Web应用程序的firebase deploy --only hosting

虽然这一切都没问题,但我并不认为这是一个专业的解决方案。我看到的问题是,我的本地环境和实时Web应用程序共享同一个数据库。我对这个问题进行了很多研究,并了解到Firebase上没有办法在一个项目中拥有两个数据库。目前市场上提供的解决方案是,在Firebase上创建两个项目,一个用于开发,一个用于生产,甚至可以再创建一个用于暂存。

这个解决方案对我来说完全没问题。这绝对是个好主意。几个项目、几个环境、分离的数据库,很完美。但是在实施这个解决方案之前,我突然又想到了另一个问题。如果我说,让我们创建一个暂存项目,以便作为我的暂存环境,并且我决定部署我的Web应用程序,那么暂存Web应用程序将会公开可用,因此也会被Google等搜索引擎索引。

那么,在这种情况下,你能为我提供什么建议呢?如何确保我的暂存Web应用程序(托管在暂存Firebase应用程序上)不可供其他人使用,并且不会被搜索引擎索引。我考虑过IP或VPC白名单,但我不知道如何以一种< strong>免费和< strong>可靠的方式进行操作。


听起来你假设Google会索引你的暂存网站,即使你从未将URL公开。我不确定这是正确的假设。Google将爬取它明确告知要爬取的网站,或者如果在其他页面上找到指向该网站的链接。此外,您可以通过发布robots.txt文件到您的网站来告诉机器人不要爬取网站。https://en.wikipedia.org/wiki/Robots_exclusion_standard - Doug Stevenson
非常感谢您的回答。问题是我想确保我的暂存 Web 应用程序只能被我访问。因此,在理想情况下,如果您在浏览器中输入 https://mystagingapp.firebaseapp.com,您将无法访问它。 - Bilger Yahov
你最好的选择可能是使用Firebase身份验证来保护其敏感内容。 - Doug Stevenson
在CLI中还有一个命令,可以禁用特定环境的托管,当您不希望其可用时。 - David
2个回答

14

如果有人有这个问题,Firebase博客上有一篇文章

注意:这篇Firebase文章假设您已经为这个新环境(即project-dev)创建了第二个Firebase项目,并将配置详细信息复制到您的工作环境中(即project-dev)。Master和dev是两个不同的环境,因此拥有两个不同的Firebase配置是有意义的。

文章说明:

幸运的是,Firebase CLI使得在多个环境中设置和部署变得简单。使用Firebase CLI添加和切换环境只需一个命令:firebase use。 $ firebase use --add 此命令会提示您从现有项目中选择一个。
选择要用于其他环境的项目,然后给它起一个别名。别名可以随便取,但通常使用“开发”、“暂存”或“生产”等别名。
创建新别名后,它将设置为当前部署环境。运行firebase deploy将把应用程序部署到该环境。
切换环境 如果要切换到另一个环境,只需在use命令中提供别名即可。 $ firebase use default # 将环境设置为默认别名 $ firebase use staging # 将环境设置为staging别名
对于单个命令,您还可以使用-P标志指定环境: $ firebase deploy -P staging # 部署到staging别名
希望这有所帮助!

1
被低估的答案!点赞 - 这正是问题标题所描述的 Firebase Web 应用程序上的不同环境 - João Antunes
但是如果我的网络应用程序的 Firebase 配置是在代码中的话,它该如何切换呢?我想我们可以将它们添加到环境文件中,但是命令行界面又如何知道要使用哪个环境文件呢? - undefined

6

编辑:以下解决方案适用于Firebase“实时数据库”,不适用于“Firestore”。请阅读差异这里

1. Firebase实时数据库分片

现在(2018年3月),Firebase实时数据库允许您创建多个实例。

官方文档:使用多个数据库进行扩展

  1. 进入Firebase项目

  2. 在Firebase控制台中,转到“开发”>“数据库”部分的“数据”选项卡。 从数据库部分菜单(右上角)中选择“创建新数据库”。

  3. 自定义您的数据库引用和安全规则,然后单击“知道了”。

  4. (可选)修改新实例的“安全规则”和“备份选项”。

2. 用法

// Get the default database instance for an app
var database = firebase.database();

// Get a secondary database instance by URL
var database = firebase.database('https://testapp-1234.firebaseio.com');

3. 示例用法:不同的环境

firebase-config.js

const BUILD_LEVEL = "dev";
// const BUILD_LEVEL = 'stage'
// const BUILD_LEVEL = 'prod'

let config = {
  apiKey: "your_apiKey",
  authDomain: "your_authDomain",
  projectId: "your_projectId",
  storageBucket: "your_storageBucket",
  messagingSenderId: "your_messagingSenderId"
};

if (BUILD_LEVEL === "dev") {
  config.databaseURL = "https://your-project-dev.firebaseio.com/";
} else if (BUILD_LEVEL === "stage") {
  config.databaseURL = "https://your-project-stage.firebaseio.com";
} else if (BUILD_LEVEL === "prod") {
  config.databaseURL = "https://your-project-dev.firebaseio.com";
}

firebase.initializeApp(config);

现在要更改 Firebase 数据库实例,您只需要更改 BUILD_LEVEL 变量即可。

将此功能与 Git/Github/Gitlab 工作流程Git 钩子webpackCI/CD 工具 结合使用,您就拥有了一个非常灵活的解决方案。


哦,太好了!谢谢! :) - Bilger Yahov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接