记一次惨痛的教训

记一次惨痛的教训

今天的损失可谓惨重,之前天真地听信了阿里云态势感知的建议,“开心”地设置了 ssh 密码 90 天后自动失效,需要强制修改密码。没想到,过几天登录服务器的时候,就被提示需要修改密码,而且还被提示新的密码与之前的密码不能太相似。他喵的!我就是对自己的记忆力太自信了,结果刚刚尝试登录服务器的时候就完美忘记了自己的 ssh 密码!无奈...只好去控制台重置密码,可是重置密码竟然要重启服务器才能生效!!!这也太不人性化了吧!好吧,为了登录进系统,冲鸭!

稳定运行将近两年的服务器的第一次重启竟然是因为管理员忘记了登录密码...这说出去还不要被笑死?如果说服务器上只是挂个静态网页,那其实没什么关系,但是上面运行的一堆服务我可没有都设置为开机自启啊(嘶哑...)

损失统计

重启服务器这一波损失其实真的不小,基本花了半个晚上才渐渐把相关的服务重启,还不能保证一些暂时想不到的服务没有被重启...总之,一句话,亏大了!

静态网站

  1. (www.)lolimay.cn 个人博客(未受影响)
  2. lab.lolimay.cn 个人实验室(未受影响)
  3. class.lolimay.cn 刷课助手官网(未受影响)
  4. anspeed.lolimay.cn 安速客户端官网 (未受影响)
  5. contact.lolimay.cn 联系我(未受影响)
  6. deepin.lolimay.cn deepin开发指南(未受影响)

得益于 Nginx 服务器加入了开机自启项,使得服务器能够在重启后迅速提供静态站点服务,但是我的服务器跑的可并不是静态服务呀(哭丧脸)。

动态网站

  1. ahucv.lolimay.cn 多模态视觉本科生资源站(受到部分影响,后端服务无法使用)
  2. busy.lolimay.cn 联系方式 (受到部分影响,后端服务无法使用)

PM2 不仅自己没设置开机自启,而且我自己手动重启了该服务后,之前跑的所有 node 服务全都消失了!!!没错是全部消失了!!!问题它跑得服务对我来说都是非常重要的,比如说 WebHooks 就直接关系到了 deepin.lolimay.cn 和我的博客等基于 Hexo 的静态网站无法实现同步。还有一些需要依赖后端服务的动态网站,也不能正常运行,这样来看,损失真的很大!

DDNS

  1. s1.lolimay.cn 本科生服务器内网 Web 服务(未受影响)
  2. yun.s1.lolimay.cn 本科生服务器私有云(未受到影响)

其他服务

  1. WebHooks(无法使用)
  2. yun.lolimay.cn 个人私有云(未受影响) 说明 PHP7.2 服务是开机自启的(露出慈母般的微笑)。
  3. frp 内网穿透服务(未受到影响)

CDN加速服务

  1. images.lolimay.cn 图片CDN(未受到影响)
  2. file(s).lolimay.cn 文件CDN(未受到影响) 图片 CDN 和文件 CDN 使用的七牛云服务,服务器重启对 CDN 的影响不大。这也提醒了我是否以后要考虑对博客等静态站点进行整站加速,这样即使服务器突然挂了博客也能继续提供服务,唯一需要担心的是缓存问题,有时间可以折腾一下。

端口问题

服务器重启后所有除 80/443 之外的端口全都无法访问,尽管我发现宝塔面板和 sshd 服务在服务器重启后第一时间就已经重启了,并且安全组的规则也是对这些端口放行的,还是无法正常访问这些服务。 猜测可能是 centos 自身也带了一层防火墙,测试了一下,果然是这样,于是果断把 firewalld 停止并禁止其开启自启了。

关闭firewalld
1
2
systemctl stop firewalld # 停止 firewalld
systemctl disabled firewalld # 禁止 firewalld 开启自启

需要注意的是,关闭防火墙后会增加服务器的安全风险,由于我对阿里云安全组的规则管控比较严格,所以 firewalld 对我来说是多此一举的。但是强烈不建议正在看此文的小白用户随随便便就关闭了自己的服务器防火墙,由此导致的一切后果请自负!

补救

由于之前对服务器意外重启会产生巨大损失的认识不足,才间接导致了今晚的悲剧。 其中很重要的一点就是 pm2 未配置开机自启服务,后来的补救措施如下:

PM2 开机自启

  1. 通过 pm2 save 保存当前进程列表(下次开机自启时就按这个列表启动)
  2. 通过 pm2 startup \[platform\] 将其加入到开机启动项

反思

经历了这次事件后,我对服务器的稳定性要求有了更深刻的认识,和我们的个人电脑一天一重启不同(当然我的电脑也是基本不关机的,枣园不断电就是爽呀~),服务器的稳定运行时间基本是按年为单位计算的(比如上次我的服务器就一直稳定运行了将近两年)。今晚真的是意外!(我会承认是我忘记服务器密码才导致的这次事故的嘛→_→)

还有就是千万别事后诸葛亮。比如,我之前就根本没想过如果服务器万一意外重启了会造成什么损失这个问题。其实,我应该提前做好一些准备的。但还是 too young, too simple!