最近在写一个个人的网站,前端差不多了,所以这两天在搞数据库
先按官网的流程走完了,Linux主机上可以进mongo了:
![c47e6d0f0bed1890d20b9ea9eed111d3.png](https://img-blog.csdnimg.cn/img_convert/c47e6d0f0bed1890d20b9ea9eed111d3.png)
然后心里想了一句这么顺利的吗,就在服务端用mongoose打算远程连一下数据库,看能不能连上。
本以为应该是秒连的,没想到过了一会给了个超时的错误:
![02f3922fb947e5d1e7b0cd040fa3a2b9.png](https://img-blog.csdnimg.cn/img_convert/02f3922fb947e5d1e7b0cd040fa3a2b9.png)
第一反应是会不会是mongoose的配置有问题,因为主机上顺利地一批啊,就去官网看了下,加了一个配置项 socketTimeoutMS:6000000;
其实心里是觉得没什么D用的,果然,不靠谱。
然后查了一下,看有说法是需要把 mongod.conf 配置文件中的 bindIp 改成0.0.0.0:
bindIp表示的是监听的ip地址段,默认是127.0.0.1,也就是localhost,不能被外界访问到,注释掉这句代码之后默认就是监听0.0.0.0也就是全部网段,由于是在局域网环境,可以这样简单设置保存(如果设置为某个具体的ip,则只有该ip能访问)
找到mongod.conf 文件,修改bindIp字段:
![91b9b5eefb4912d2fb1dc7e80d45ec03.png](https://img-blog.csdnimg.cn/img_convert/91b9b5eefb4912d2fb1dc7e80d45ec03.png)
重启了服务后还是不行。
后来突然一想,超时大概率是端口访问不到没开放,于是远程telnet了一下27017端口,发现连接失败了,我又跑了一下8000端口(我页面是放在这个端口的),8000端口没问题
那问题根源应该就是这个了,所以一步步开始排查:
- 先是在安全组里开放27017端口,再连 —— 还是不行;
- lsof了一下主机的27017端口,是开放着的,那就只剩下防火墙了
- firewall-cmd --query-port=27017/tcp 查看了一下,返现返回的是no,那就是被防火墙墙了,需要开个口子
- firewall-cmd --permanent --add-port=27017/tcp ,进行27017端口的添加,返回了success
- 重启一下服务器,firewall-cmd --query-port=27017/tcp 查看一下,返回yes,开启成功
满怀激动的心情,再远程连了一下,OK,收工。
顺带一提,如果过程重碰到了重启mongod失败的错误,应该就是目录权限的问题:
![808d337f1c309a439b417a771923f5ed.png](https://img-blog.csdnimg.cn/img_convert/808d337f1c309a439b417a771923f5ed.png)
跑一下这个命令就好了(原因暂时还未了解):
sudo
最后写些感想,作为一名前端,这方面一开始碰到问题的时候真的就无从下手,头皮发麻。这不像前端,可以有html页面效果反馈,也不能打开控制台打断点看看哪里出了问题
你面对的,就只有一个黑漆漆的linux命令面板,这就对排查问题的能力有了要求。
喜欢看推理小说,这就和福尔摩斯说的一样:排除了所有不可能,剩下的就是真相。
最后,再过一个月左右吧,个人网站应该会上线,如果对搞一个自己的小天地有兴趣的到时候可以交流一下哦,知无不言!