mongodb - 为 Meteor 应用程序单独托管数据库

标签 mongodb amazon-web-services meteor amazon-ec2 database

将数据库与 Meteor 应用程序分开托管似乎是一种常见且更安全的做法。也就是说,为您的 Meteor 应用程序提供一个 EC2 实例,为您的 MongoDB 提供一个 EC2 实例,并让它们相互通信。

据我了解,人们这样做是因为它更安全,并且允许他们在不接触数据库的情况下部署更新版本的应用程序。

我希望单独使用 Amazon EC2 来完成此操作,而不是使用其他第三方服务(例如 Compose.io)。

如何在两个 EC2 实例上分别托管 Meteor 应用程序及其数据库,并让它们相互通信?

最佳答案

这是常见的做法,人们大多这样做是因为它使您能够独立扩展它们。

至于如何,您显然需要配置每个 Amazon EC2 实例,在一个实例上安装meteor,在另一个实例上安装 MongoDB。您还需要配置您的 VPC(Amazon Virtual Private Cloud),以便您的 MongoDB 实例接受您指定的任何端口(默认为 27017)上的传入连接,以便您的 Meteor 应用程序可以连接。

之后,只需告诉您的 Meteor 应用程序去哪里获取数据库连接即可。最安全的方法是设置几个环境变量,分别命名为 MONGODBSERVERMONGODBPORTDBUSERDBPASSWORD

然后,您需要在服务器 Meteor 代码中设置一些变量,使用类似以下内容:

Meteor.startup(function() {
  var DbUser = process.env.DBUSER;
  var DbPassword = process.env.DBPASSWORD;
  var MongoDBServer = process.env.MONGODBSERVER;
  var MongoDBPort = process.env.MONGODBPORT;
});

如果您使用 native MongoDB 驱动程序,连接就变得微不足道:

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://DbUser:DbPassword@MongoDBServer:MongoDBPort/databasename', function(err, db) {
  ...
});

然后只需使用以下内容构建 Mongo 模型即可:

Temperatures = new Mongo.Collection('temperatures');
Temperatures._ensureIndex({temp: 1, time: 1});

然后对数据库的这些模型采取行动:

Temperatures.insert({temp: ftemp, time: Math.floor(Date.now() / 1000)});

我还要提到http://modulus.io是一个非常不错的 Meteor 托管解决方案。我会推荐它们,除非您一直坚持使用 Amazon EC2 实例,这很好,但对于简单的应用程序来说会更复杂。

关于mongodb - 为 Meteor 应用程序单独托管数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31085114/

相关文章:

meteor - 如何从 GitHub 为 Meteor 安装 NPM 包?

mongodb - 是否有像 mongoosastic 这样的插件可以与环回一起使用?

java - 如何使用带 arrayFilters 的过滤位置运算符应用更新

java - 使用没有迭代器的 Java 复制集合 Mongodb 以进行数据库管理员登录

amazon-web-services - 创建和更新 ECS 服务的正确 DevOps 工作流程是什么?

amazon-web-services - 为什么EC2实例的内存利用率不是Amazon CloudWatch的默认指标?

amazon-web-services - AWS 节点的 Docker 上是否有时间同步过程?

javascript - 数组变为整数

meteor - React Material -UI : stacked appbar

python - 为什么 Flask + Mongoengine 不允许显示与数据库模型不完全对应的数据库项?