1

我在Google Compute Engine上部署了Bitnami mongodb实例。应用在Google应用引擎上部署后无法连接到mongodb

我可以使用MongoDB实例的外部IP从我的个人计算机通过MongoDB客户端连接到该mongodb实例。

我的应用程序是一个带有Node.js后端的Angular2应用程序。以下是在server.js

mongoose.connect('mongodb://<username>:<password>@<External IP>:27017/<dbname>'); 

使用时我是主持人在本地主机上我的应用程序可以连接到云上的和访问数据的MongoDB实例没有问题的连接字符串格式。

但是,当应用程序部署在谷歌应用程序引擎上时,应用程序不再连接到mongodb。 以下是错误。

MongoError: failed to connect to server [<External IP>:27017] on first connect 

有人可以提出什么是根本原因。

回答

4

App引擎实例是与计算引擎实例相同的专用内部网络的一部分。您的App Engine应用程序可以在同一个项目中与Compute Engine上托管的服务进行通信,而无需通过公共互联网。在许多情况下,您的应用程序使用实例的内部IP地址连接到服务,而无需为数据库分配外部公用IP地址。如果需要,您可以分配一个公共IP地址,以允许从Google Cloud Platform之外访问数据库。

另外,如果数据库服务器和防火墙已正确配置为接受连接,则App Engine应用程序可以通过公共Ip连接到数据库。您的App Engine应用程序使用服务的公共IP地址连接到数据库。

默认情况下,mongodb守护进程正在侦听TCP端口27017.因此,您需要在计算引擎防火墙上为此端口和协议添加防火墙规则。

gcloud compute firewall-rules create allow-mongodb --allow tcp:27017

+1

更新防火墙规则:可以使用谷歌云控制台或使用gcloud命令工具来完成。但仍然是同样的错误。我可以从gcloud shell ping到mongodb的外部IP。 – lkman

+0

这似乎与Google的内部配置有关。你是否尝试过向内部IP请求? –

+0

我无法从云控制台ping到内部IP。我也尝试了连接字符串。没有成功。 – lkman

相关问题