【问题标题】:Cannot connect to mongodb after app deploys on google app engine在谷歌应用引擎上部署应用后无法连接到 mongodb
【发布时间】:2017-02-12 12:27:25
【问题描述】:

我正在使用部署在 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

有人可以提出根本原因吗?

【问题讨论】:

    标签: mongodb google-app-engine google-compute-engine gcloud bitnami


    【解决方案1】:

    App Engine 实例与 Compute Engine 实例属于同一专用内部网络。您的 App Engine 应用程序可以与托管在同一项目中的 Compute Engine 上的服务进行通信,而无需通过公共互联网。在许多情况下,您的应用程序使用实例的内部 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

    【讨论】:

    • 更新了防火墙规则。但仍然是同样的错误。我可以从 gcloud shell ping 到 mongodb 的外部 IP。
    • 这似乎与谷歌内部配置有关。您是否尝试过向内部 IP 发出请求?
    • 我无法从云控制台 ping 到内部 IP。我也在连接字符串中尝试过。没有成功。
    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多