7

我正在使用 Firebase 构建一个 Web 应用程序。目前我可以说我确实有两个阶段 - 开发,firebase serve运行 localhost 和firebase deploy --only hosting在 Firebase 托管上上传 Web 应用程序。

一切都很好,但我不认为这是一个专业的解决方案。我看到的问题是,我的本地环境和实时 Web 应用程序共享同一个数据库。我对该主题进行了相当多的研究,并且我了解到 Firebase 上的一个项目无法拥有两个数据库。那里提供的解决方案是在 Firebase 上创建两个项目,一个用于开发,一个用于生产。或者,即使您愿意,也可以使用一个用于分期。

这个解决方案对我来说似乎完全没问题。这肯定是个好主意。几个项目,几个环境,独立的数据库,简直完美。然后就在实施此解决方案之前,另一个问题出现在我的脑海中。如果我说,让我们创建一个 staging 项目,以便为我提供一个 staging 环境,并且我决定部署我的 web 应用程序,staging web 应用程序将公开可用,因此它也会被 Google 等索引。

那么,在这种情况下,您能给我什么建议?如何确保我的登台 Web 应用程序(托管在登台 Firebase 应用程序上)对其他人不可用并且不会被搜索引擎索引。我考虑过将 IP 或 VPC 列入白名单,但我不知道如何以一种免费可靠的方式进行。

4

2 回答 2

8

如果有人有这个问题,Firebase 博客上有一篇关于此的文章。

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

文章指出:

对我们来说幸运的是,Firebase CLI 使设置和部署到多个环境变得简单。

使用 Firebase CLI 添加和切换环境就像一个命令一样简单:firebase use.

$ firebase use --add 此命令提示您从现有项目之一中进行选择

选择要用于不同环境的项目,然后为其指定别名。别名可以是你想要的任何东西,但通常使用“development”、“staging”或“production”之类的别名。

创建新别名后,它将被设置为当前部署环境。运行 firebase deploy 会将您的应用部署到该环境。

切换环境

如果要切换到另一个环境,只需在使用命令中提供别名即可。

$ firebase use default# 将环境设置为默认别名

$ firebase use staging# 将环境设置为暂存别名

对于单个命令,您还可以使用-P标志指定环境:

$ firebase deploy -P staging# 部署到暂存别名

希望有帮助!

于 2019-01-13T23:23:15.790 回答
4

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

1. Firebase 实时数据库分片

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

官方文档:多数据库扩展

  1. 转到您的 Firebase 项目

  2. 在 Firebase 控制台中,转到该Develop > Database部分的数据选项卡。Create new database从“数据库”部分(右上角)的菜单中选择。

  3. 自定义您的数据库引用和安全规则,然后单击得到它。

  4. (可选)修改新实例的Security ruleand Backup option

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 workflow, Git hook, webpack,结合起来,CI/CD tool您就有了一个非常灵活的解决方案。

于 2018-03-17T06:47:55.287 回答