部署后端项目出现意外

我试图将项目的后端部署到服务器,首先使用Docker集成项目所需要的各种服务。但是由于项目引入的服务过多(包括MySQL,Redis,MongoDB,ElasticSearch,RabbitMQ等),在实际安装这些服务时并没有考虑到服务器承载力的问题,导致了内存的爆满。下面的图是阿里云控制台最近一天对内存的监控,在内存占用急剧飙升的区间正是我进行安装的时候。随着我部署在Docker上的服务越来越多,内存占用量急剧上升。

在内存几近爆满时,产生了系统颠簸,我的MobaXterm终端突然无法连接到服务器了。尝试发现已经对云服务器失去了控制。这才让我意识到问题的严重性。重启云服务器,我抓紧将Docker关闭:

1
sudo systemctl stop docker

终于解决了颠簸问题。

之后进行复盘,在本地尝试运行全部服务,发现其内存占用情况如下:

总共超过4GB的内存占用,这显然不是我的云服务器能承载的了。看来部署项目的目标不得不放弃。

Nginx服务无法正常工作

此时发现了一个更加严重的问题,我的域名无法访问了。

经过检查,阿里云控制台的安全组正常开启了80端口,而Ngxin服务器的配置没有问题,也处在正常的运行状态。

甚至域名是可以Ping通的。

这让我很困惑,不知道哪里出现了问题。

突然想到,在安装elasticsearch服务时,我曾经安装了防火墙服务(这是因为网上文章的错误引导,让我以为防火墙的屏蔽导致了服务无法正确开启)。检查发现确实是因为防火墙的开启,导致了无法访问到80端口。关闭防火墙即解决了问题。

Firewall与安全组的区别

在解决问题的过程中,我一度将Linux的Firewall服务与阿里云控制台的安全组看作同一个事物,导致迟迟找不到问题所在。

事实上,内部Firewall是Linux系统自身带有的一个防火墙功能;安全组可以理解为阿里云侧,服务器外部的一个防火墙。所以即使阿里云侧我开启了80端口,但是系统的防火墙80端口是关闭的,导致了外部仍然无法访问80端口的问题。