Mongodb 分别为Meteor应用程序托管数据库

Mongodb 分别为Meteor应用程序托管数据库,mongodb,amazon-web-services,meteor,amazon-ec2,database,Mongodb,Amazon Web Services,Meteor,Amazon Ec2,Database,将数据库与Meteor应用程序分开托管似乎是一种常见且更安全的做法。也就是说,为您的Meteor应用程序提供一个EC2实例,为您的MongoDB提供一个EC2实例,并让它们相互对话 据我所知,人们这样做是因为它更安全,并且允许他们在不接触数据库的情况下部署应用程序的新版本 我想单独使用Amazon EC2来实现这一点,而不是使用其他第三方服务,如Compose.io 如何在两个EC2实例上分别托管Meteor应用程序及其数据库,并让它们彼此通信?您需要为托管Meteor应用程序的Mongo设置一

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

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

我想单独使用Amazon EC2来实现这一点,而不是使用其他第三方服务,如Compose.io


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

您需要为托管Meteor应用程序的Mongo设置一个环境变量

MONGO_URL

mongodb://:@hostingproviderurl:port/xxx?autoReconnect=true&connectTimeoutMS=60000


正确的mongodb://url字符串将由mongodb托管提供商提供。

这是一种常见做法,人们之所以这样做,主要是因为它提供了独立扩展两者的能力

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

在那之后,只需告诉你的meteor应用程序去哪里获取数据库连接。最安全的方法是设置一对环境变量,名为MONGODBSERVER和MONGODBPORT、DBUSER、DBPASSWORD等

然后,您需要在服务器Meteor代码中设置一些变量,例如:

Meteor.startup(function() {
  var DbUser = process.env.DBUSER;
  var DbPassword = process.env.DBPASSWORD;
  var MongoDBServer = process.env.MONGODBSERVER;
  var MongoDBPort = process.env.MONGODBPORT;
});
Temperatures = new Mongo.Collection('temperatures');
Temperatures._ensureIndex({temp: 1, time: 1});
如果您使用的是本机MongoDB驱动程序,则连接变得很简单:

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

MongoClient.connect('mongodb://DbUser:DbPassword@MongoDBServer:MongoDBPort/databasename', function(err, db) {
  ...
});
然后,只需使用以下内容构建Mongo模型:

Meteor.startup(function() {
  var DbUser = process.env.DBUSER;
  var DbPassword = process.env.DBPASSWORD;
  var MongoDBServer = process.env.MONGODBSERVER;
  var MongoDBPort = process.env.MONGODBPORT;
});
Temperatures = new Mongo.Collection('temperatures');
Temperatures._ensureIndex({temp: 1, time: 1});
然后对数据库中的模型采取行动:

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

我还要提到的是,这是一个非常体面的流星托管解决方案。我推荐它们,除非你坚持使用Amazon EC2实例,这很好,但对于一个简单的应用程序来说更复杂。

你会建议使用Amazon Linux或Ubuntu来托管Meteor应用程序/数据库吗?在MongoDB的指南中,他们似乎在建议Amazon Linux,但我想听听您对它的看法。这在很大程度上取决于您的特定用例。如果不知道你在寻找什么样的标准,在这一点上,如果不进行推测,就很难提出一个标准。也许这是另一个问题的主题?关于本机MongoDB驱动程序,我只需要为非meteor应用程序担心,对吗?例如,iOS应用程序或本机桌面应用程序。这是正确的。您仍然需要并通过require('mongodb')在Meteor应用程序中使用mongodb依赖项,但您不必安装“MondoDB驱动程序NuGet包”(我是dotnet开发人员)来查询Meteor中的mongo数据库。对于其他语言和应用程序类型,您只需通过google了解如何在使用的特定堆栈中建立mongodb连接。