首页 文章

应用程序在谷歌应用程序引擎上部署后无法连接到mongodb

提问于
浏览
1

我正在使用部署在Google Compute Engine上的Bitnami mongodb实例 .

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

我的应用程序是带有Node.js后端的Angular2应用程序 . 以下是server.js中使用的连接字符串格式

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

当我在localhost上托管我的应用程序时,它可以连接到 Cloud 上的mongodb实例并且无问题地访问数据 .

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

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

有人可以说明根本原因是什么 .

1 回答

  • 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

相关问题