首先我要说的是,我绝不是一个NodeJS / Mongodb / Google Compute引擎的人,甚至不是服务器人,但不幸的是,我似乎最接近办公室,所以我'有人要求将其他人制作的现有NodeJS应用程序上传到Google计算引擎。
我可以在本地运行应用程序就好了,但是我已经苦苦挣扎了好几天试图在GCE上实现它,或者实际上任何事情 - 最后我已经达到了这一点我可以按照这个书架教程 - https://cloud.google.com/nodejs/getting-started/run-on-compute-engine上传我的应用程序代码 - 并用我自己的代码替换他们的代码。我也可以自己获得书架教程,以便成功地使用GCE。
到目前为止一直很好,但遗憾的是我的应用程序并没有在GCE上运行,而且看起来它无法连接到我使用Click to Deploy设置的mongodb数据库。服务。这为我生成了三个VM实例 - mongo-arb-me7o,mongo-db-0ysz,mongo-db-efg0。我的代码在一个单独的实例上运行,我不认为应用程序需要在数据库上存在任何现有数据,我认为它只需要访问一个来存储信息。
我真的希望我的问题是一个相对简单的问题 - 我需要将哪些服务器细节放入我的应用程序以允许它连接到GCE上的mongodb数据库?我无法在网上找到任何可以帮助我弄清楚它应该是什么的东西(我没有找到关于它的Google文档对于说实话新手来说非常有用)。
默认情况下,应用程序最初设置为localhost,端口27017但是这会记录错误"无法连接"在GCE上。该教程说要打开端口8080以便访问该网站,所以我想我也试过这个数据库。有趣的是,这记录了一个稍微不同的错误:"连接关闭",虽然我不知道这表示什么?通过浏览器访问时,它只是读取"内部服务器错误"。
我还试图通过他们的IP地址和他们的实例名称(代替localhost)来访问所有三个mongodb实例,但不要高兴。我是否有权在单独的实例中使用该应用程序?是否应该在运行我的代码的同一个实例上安装mongodb,如果是,我该怎么做?事实上它为数据库生成了三个不同的实例,这对我来说不是,但实际上我不知道。
如果我已经尝试过的工作应该有效,而且有人想看到任何日志或代码示例来尝试和诊断问题,我非常乐意提供,但我已经得到了手指交叉,只需要输入正确的地址和端口号,我还没有找到或弄明白。
非常感谢任何帮助,非常感谢。
答案 0 :(得分:5)
我想我可能已经破解了它。我偶然发现了另一篇文章:Google Compute Engine MongoDB trouble connecting via Java Driver并不完全相同,而且不是NodeJS,这就是我最初可能错过它的原因,但它与同一个问题有关,我尝试了一些其中的建议似乎有效。
对于所有这些节点/ mongo / gce的新手,并且在混乱的海洋中丢失,似乎服务器地址需要设置为其中一个mongo实例的内部IP地址。如果您使用了Click to Deploy,则可以通过转到Deploy and Manage>来找出哪一个。部署。在部署的右下角,在建议的后续步骤下,它会说“最初的MongoDB主服务器是mongo-db-0ysz” - 这是指其中一个实例。找到该实例并从VM列表中获取其内部IP。
我将端口号更改回默认值27017,但是我必须通过输入以下命令打开它的访问权限:
gcloud compute firewall-rules create default-allow-http-27017 --allow tcp:27017 --source-ranges 0.0.0.0/0 --target-tags http-server --description "Allow port 27017 access to http-server"
我知道会是这样的。不敢相信我终于让它工作了!除非有人能发现我所做的任何问题吗?那篇文章提到了安全问题,但我不知道这是否适用于此?再次,任何建议都非常感谢!