mongodb数据库上线的一个问题

问题描述:

目前项目在本地运行的时候,后端代码如下

var mongoose = require('mongoose')
mongoose.set('useFindAndModify', false)

mongoose.connect('mongodb://comment:password@localhost/comments',{
  useNewUrlParser: true, useUnifiedTopology: true,
})

......

终端开启mongodb数据库之后显示

This server is bound to localhost.
Remote systems will be unable to connect to this server.
意思就是,这个是本地数据库,远程系统不能连接到这个数据库

我的问题是:
是不是项目上线之后,直接安装mongodb数据库,从npm上下载mongoose之后,直接修改后端这段代码

mongodb://comment:password@localhost/comments

mongodb://comment:password@公网IP/comments

就能解决这个问题了?

另外比如阿里云的服务器,用开27017端口吗?(27017是mongodb数据库的默认端口),现在还没有购买服务器....

拜托各位大佬不吝赐教,小弟先行谢过

阅读 2.4k
2 个回答

这其实涉及多个方面的问题,对应不同的解决方法

  1. 你的后端应用 与 准备搭建mongodb数据库服务的关系,如果后端应用和mongodb数据库在一台机器(这台机器不分虚拟主机还是实体机)上,其实你什么都不用改,因为后端应用访问数据库还是本机访问的
  2. 你后端应用与mongodb数据库服务是在不同主机上,但主机在一个局域网内(云服务器,多个虚拟主机也可以是在一个局域网内的),机器之间在一个防火墙内部可以直接互联互通,这时涉及的操作比情况1就更多啦:
    2.1. 你mongodb数据库要设置为服务绑定到0.0.0.0,这样才能对外提供服务
    2.2. 你安装mongodb数据库的服务器上要打开允许远程访问相关的本地安全设置,起码放行mongodb数据库涉及的端口对外监听
    2.3. 你应用要配置访问远程mongodb数据库,方法基本按你前面提到的
  3. 你后端应用与mongodb数据库服务器不在一个局域网内,只能通过公网来通信,这是又比2情况要有更多操作,比如应用要访问mongodb数据库,则在2的基础上,mongodb数据库所在服务的上层防火墙(一般云服务商称为安全组)设置中要许可mongodb数据库对应监听端口,且mongodb数据库还需要获得公网IP,或者某个有公网IP点主机能映射(反向代理)mongodb数据库数据库服务(端口)到本机某个端口,这时客户端访问也如你提到的类似,需要 mongodb://comment:password@公网IP/comments

问题一:是。同时你需要修改 MongoDB 配置的 bind_ip0.0.0.0、并重启服务。

问题二:阿里云默认的安全组是不开放端口的,需要你自行配置。


但如果你的 MongoDB 和后端项目部署在同一子网下,那么出于安全考虑就不应该为 MongoDB 开放公网端口、也不应该使用公网 IP,使用子网 IP 即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题