我正在使用部署在Google Compute Engine上的Bitnami mongodb实例。
我可以使用MongoDB实例的外部IP从我的个人计算机通过MongoDB客户端连接到该mongodb实例。
我的应用是带有Node.js后端的Angular2应用。以下是server.js中使用的连接字符串格式
mongoose.connect('mongodb://<username>:<password>@<External IP>:27017/<dbname>');
当我在localhost上托管我的应用程序时,它可以连接到云上的mongodb实例并且可以毫无问题地访问数据。
但是,当应用程序部署在谷歌应用程序引擎上时,该应用程序不再连接到mongodb。 以下是错误。
MongoError: failed to connect to server [<External IP>:27017] on first connect
有人可以说明根本原因是什么。
答案 0 :(得分:4)
App Engine实例是与Compute Engine实例相同的专用内部网络的一部分。您的App Engine应用程序可以与同一项目中的Compute Engine上托管的服务进行通信,而无需通过公共Internet。在许多情况下,您的应用程序使用实例的内部IP地址连接到服务,而无需为数据库分配外部公共IP地址。如果需要,您可以分配公共IP地址,以允许从Google Cloud Platform外部访问数据库。
此外,如果正确配置数据库服务器和防火墙以接受连接,App Engine应用程序可以通过公共IP连接到数据库。您的App Engine应用程序使用服务的公共IP地址连接到数据库。
默认情况下,mongodb守护程序正在侦听TCP端口27017.因此,您需要在Compute Engine防火墙上为此端口和协议添加防火墙规则。这可以使用Google Cloud控制台或使用gcloud
命令工具完成:
gcloud compute firewall-rules create allow-mongodb --allow tcp:27017