如何在Meteor Up(mup)中使用MONGO_URL env变量将我的meteor应用程序连接到数据库?

Dav*_*d C 4 mongodb meteor meteor-up

我想要一个我的流星应用程序连接到远程数据库.我以为我可以部署两个应用程序,一个用于在服务器上设置数据库,另一个用于托管应用程序但连接到另一个服务器上的数据库.我无法让这个工作,但我也想知道这是否是推荐的?我应该在没有mup/meteor的服务器上设置mongodb数据库,还是可以使用mup为我设置?

我尝试过但无法开展工作:

我正在使用两个亚马逊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
Run Code Online (Sandbox Code Playgroud)

在尝试访问远程数据库的应用程序的mup.json文件中,我在"env"下添加了"MONGO_URL":"mongodb:// db-instance-public-ip:27017/db",db是该实例上的应用程序.

托管数据库的流星应用程序成功部署,但托管应用程序的流星应用程序没有.在"调用部署过程"期间部署失败,这里是STDERR/STDOUT :( XXX.XXX.XXX.XXX是实例的公共IP地址)

x调用部署过程:FAILED

-----------------------------------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]
----------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

如果需要更多信息,请与我们联系.问题也发布在这里:https://github.com/arunoda/meteor-up/issues/450

Dav*_*d C 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
Run Code Online (Sandbox Code Playgroud)

有关mongo配置文件的更多信息,请访问:http://docs.mongodb.org/manual/reference/configuration-options/

我通过db.serverCmdLineOpts()在mongo shell中运行找到了这个文件,感谢Adam Comerford对这个问题的回答:我如何才能看到mongo正在从mongo shell中侦听哪些端口?.