如何在Meteor Up (mup)中使用MONGO_URL环境变量连接数据库?

4
我希望您的Meteor应用程序能够连接到远程数据库。我认为我可以部署两个应用程序,一个在服务器上设置数据库,另一个托管应用程序但连接到另一台服务器上的数据库。我遇到了一些问题,但我也想知道这是否推荐?我应该在没有MUP/Meteor的服务器上设置MongoDB数据库,还是可以使用MUP为我设置?
我尝试过但无法使其工作的内容:
我正在使用两个Amazon EC2实例(Ubuntu 14.04)。我已经为两个实例制定了以下安全入站规则:
Custom TCP Port: 27017 Source: instance-public-ip-1/32
Custom TCP Port: 27017 Source: instance-public-ip-2/32
HTTP Port: 80 Source: All Addresses
SSH Port: 22 Source: My IP

在试图访问远程数据库的应用程序的mup.json文件中,我已经在“env”下添加了“MONGO_URL”:“mongodb://db-instance-public-ip:27017/db”,其中db是该实例上应用程序的名称。
托管数据库的meteor应用程序成功部署,但托管应用程序的meteor应用程序失败了。 部署过程在“调用部署过程”期间失败,以下是STDERR/STDOUT:(XXX.XXX.XXX.XXX是实例的公共IP地址)
x 调用部署过程:失败
-----------------------------------STDERR-----------------------------------
npm WARN package.json meteor-dev-bundle@0.0.0 No description
npm WARN package.json meteor-dev-bundle@0.0.0 No repository field.
npm WARN package.json meteor-dev-bundle@0.0.0 No README data

/usr/lib/node_modules/wait-for-mongo/bin/wait-for-mongo:14
    throw err;
          ^
Error: TIMEOUTED_WAIT_FOR_MONGO
    at null._onTimeout (/usr/lib/node_modules/wait-for-mongo/lib/waitForMongo.js:20:14)
    at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)
-----------------------------------STDOUT-----------------------------------
56.145:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
----------------------------------------------------------------------------

如果需要更多信息,请告诉我。问题也在此处发布:https://github.com/arunoda/meteor-up/issues/450


1
你尝试过从托管数据库的实例中打开Mongo控制台吗? - Adnan Y
@AdnanY 是的,MongoDB正在成功部署的实例上运行。 - David C
这不是我问的。你能否通过控制台从未运行Mongo的另一个实例访问它? - Adnan Y
@AdnanY,我已经解决了这个问题,请查看我的答案。 - David C
@AdnanY 谢谢,我开始研究Mongo控制台命令,感谢你的评论,这让我找到了答案。 - David C
请随意投票支持任何对您有帮助的内容 - Adnan Y
1个回答

5

编辑:我曾让mongodb监听所有接口,但这是一种安全风险。

默认情况下,当部署meteor创建数据库时,mongodb的配置设置为仅在127.0.0.1上侦听连接(它是mongodb中的“bind_ip”选项)。将此设置更改为同时侦听127.0.0.1和实例的私有ip已解决该问题,并成功部署和使用远程数据库。请勿注释bind_ip选项,因为这会允许任何人连接到您的数据库。良好的安全规则仍将阻止人们进行连接,但遵循mongodb配置中的“最小特权原则”是一个好主意。

为了更改此设置,请编辑具有数据库的实例上的/etc/mongod.conf文件。将托管数据库实例的私有IP添加到带有bind_ip = 127.0.0.1的行中。

编辑后来自/etc/mongod.conf第17-18行(XXX.XXX.XXX.XXX是具有数据库的实例的私有IP地址):

# Listen to local interface only. Comment out to listen on all interfaces. 
bind_ip = 127.0.0.1,XXX.XXX.XXX.XXX

有关Mongo配置文件的更多信息,请参见此处:http://docs.mongodb.org/manual/reference/configuration-options/

我在Mongo shell中运行db.serverCmdLineOpts()找到了这个文件,感谢Adam Comerford在这个问题上的回答:how can I see what ports mongo is listening on from mongo shell?


你知道DigitalOcean droplets的路径是什么吗? - Ahmed M. Matar

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