服务器部署项目总结
yzh 24/3/15
前言
本着一定成功的信心去部署前后端分离的项目,结果却“路遇坎坷”😭😭😭😭
代码和程序总是无情的啊,当然,也是因为一段时间没学习对于知识模糊了,其实很Easy的Bug
自己看了很长时间没解决(🤡🤡🤡🤡属于是joker本了)
但是解决的过程是充实和享受的,成功的快感更是无法言表的😀😀😀。
✊ 👊 🤛 🤜谨以此篇记录这次历程吧✊ 👊 🤛 🤜
代码的背后都是白云苍狗,愿我们都做SUCCESS的高手!💯💯💯💯💯
一、服务器与项目
服务器是室友波波买的,赞助方(不过他是第一次买,他不太懂买成了win系统,不过没关系,重装centos7小问题),和他一起看绑定域名,备案,创建服务器实例等等。OK,服务器搞定。宿舍公司的一台服务器完成了
项目的话,是我去年暑假写的一个办公系统,基于”SpringBoot+Vue+Activiti+微信公众号“的前后端分离系统,拿来部署作为实践挺不错的。但是,因为上周末电脑重装了系统,所以我本机的环境什么的我都删了,一个不留(前提是重要的东西备份)。所以也费了时间去装本机的编程环境,然后拉gitee上自己原来提交的代码,开始在电脑测试。
🧑💻到此遇见了第一个问题,原来的前端代码,所用依赖的node.js是14.15.0,但是我并不想用这么低的node,所以就装了NVM来切换node版本,好家伙,装了两次,docs里面可以用node -命令,但VS里面的终端用不了,就离谱的很。最后索性都装C盘了,小小Node-Sass(这玩意必须依赖匹配,一个版本对应一个,我前端并不好,好多东西我并不清楚,只能是nvm来切换了)
就这样,前后端环境在本机可以跑通了,阶段性胜利。
二、服务器环境配置
服务器环境配置是云龙来弄的,当时我正在自己电脑上弄本地的环境和测试,所以他做的
🧑💻遇到第二个问题,
如果只是简单的部署项目只需要 “java环境、mysql、nginx、redis(如果需要)“。
验证安装的应用是否实际可用,mysql和redis开启远程连接服务。确保云平台的安全组的端口打开,并开启服务器对应的防火墙端口和重新加载。(哈哈哈,因为他腾讯没开端口防火墙,一直访问不到,最后他给重装了,哈哈哈)
三、上传部署到服务器
前端VS里面的配置和java代码中yaml文件的配置都写好了,然后分别打包dist文件夹和jar包,上传到服务器。
🧑💻首先对于nginx的反向代理知识,我认真的反省自己确实模糊了(很简单的东西),也搜资料慢慢配。随后访问网站,最开始是404问题,nginx中的配置路径写错了;然后502,网关问题,启动jar包,OK没有了;接着403,jar包启动出错了(查资料,打日志)最后是redis的问题,然后就傻傻的看网上的教程,redis的远程连接打开了,重新写路径打包上传+启动。-------这些也花了不少时间。然后,他可以访问了,我和云龙非常高兴,认为已经胜利了,殊不知灾难来临😣😣😣😣😣…
🧑💻当晚还沉浸在解决BUG,成功部署,发朋友圈的庆祝中;可是凌晨波波给我说网站被攻击了,我嘞个艹啊,但当时以为无伤大雅,早上起来再看吧;好家伙,服务器直接崩了进不去了(tnnd的狗黑客),直接把服务器当肉鸡打别人的ip,还给里面加了好多病毒(后来我排毒的时候,还tm给权限改了😡 🤬😡 🤬,命令程序删了,艹😡 🤬😡 🤬)。
🧑💻花了几个小时去把服务器的病毒排掉(就不该自己去丰富动手能力慢慢解决,耗时耗力,早知道就重装了!),找到了一堆问题。经过比对和排查
最后得出就是Redis开放了远程连接,让黑客钻了空子,非常轻松的把服务器黑了
利用Redis的未授权访问漏洞进行攻击。Redis 默认配置为6379端口无密码访问,如果redis以root用户启动,攻击者可以通过公网直接链接redis,向root账户写入SSH公钥文件,以此获取服务器权限注入病毒
🧑💻最后错基本排完了,再次上传jar包和dist,开端口,运行--------->艹,错了,而且在十几分钟后,服务器由挂了,直接打不开。腾讯云客户端建议重装客户端…果断重装!!!👿👿👿👿👿
四、重装系统再次部署
痛定思痛,重装系统
🧑💻更换服务器公网IP,改掉ssh的端口,nginx的端口,只开3306端口,其他都不开(除非要用再开)
使用ssh秘钥,修改各类配置的密码,设的复杂(得写记事本记录,不然把自己给防了)
再次部署!!!
满怀期待能够成功,结果:认证失败,无法登录,emmmmm,试了n次,还是一样的结果。我还一度怀疑我是不是手抽了,把哪里的代码删了或者改了,然后打断点,看啊找啊。结果都没出现错误,本地也跑了几次,完全OK。对服务器的数据库用户和密码,以及对于项目数据库也增删改了几次,还是不行
🧑💻最后在打jar之前在认证的部分加了一些log,打印到控制台显示日志,上传到服务器运行,将log拿出来看,没想到还是nginx出错了,啊呀,我是废物🤡🤡🤡🤡🤡🤡,因为没有出现对于nginx的标准性错误,而且还和后端接口路径是200 OK 是连通着的,就没多想,ε=(´ο`*)))唉。路径里面多了一个/prod-api/,然后在反向代理的路径上面再就给它加个正则表达式,忽略掉它就好了
rewrite ^/api/(.*)$ /$1 break;# url重写
./nginx -s reload, 在浏览器输入IP和端口,OK,输入用户名和密码 =====> 进去了!!!!!!!!!!!!!!!!!!!👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏 👏
五、总结
代码的背后都是白云苍狗,愿我们都做SUCCESS的高手!💯💯💯💯💯
代码成就万世基积沙镇海
梦想永在凌云意意气风发
任何执拗都会成为过往,只有时间会告诉你对错。
人们总爱说一句话:认真你就输了。而我更相信另一句话。认输,你才真的输了
Conclude
🧑💻首先,遇到了一波又一波的Bug,真挺难受的,也怪自己见得不够多,学的不够深。一段时间没敲代码就把已经学过的知识给忘了,这是很不好的,学无止境啊,再次理解这句话,不能停止学习,要始终向前学习~。
🧑💻但是呢,我觉得解决Bug的过程更多的收获,我再次一遍遍复习了Linux的知识和命令使用,再次巩固了项目部署的诸多知识点,进一步加强了对运维,对网安的重视性。更好的理解了前后端交互和对接的思想,还是非常GOOD的!
🧑💻网络安全从自我做起;维护网络安全,打击恶意黑客人人有责!!!