在2022年的5月最后一天,我领到了一款阿里云ECS服务器,在领到了之后,秉持着白嫖了就尽量不要浪费的原则,第一次开始学习使用服务器。
写这篇文章特此将这几天的学习经历记录一下。
在第一天,我在服务器上安装了宝塔Linux管理面板,然后靠着宝塔的方便性,便捷的安装了一些必备的应用软件(Nginx,Tomcat,Redis,Mysql)来帮助我更好的使用服务器,在第一天,我也经历了很多新手第一次使用服务器时遇到的一些问题,比如安全组和防火墙到底什么关系?为什么宝塔界面起初开放端口的那里打不开?等等。。。在安装好了之后,我尝试性的使用了软件商店中的WORDPRESS个人博客一键部署,认识并熟悉了部署中的最关键的几步。
第二天,我打算部署前不久在本地写的一个小项目,一个视频网站,里面用到的一些中间件需要我自己安装一下,首先我安装了Kafka,然后安装了ElasticSearch,但是在安装之后,我认识到,单单不算自己未来还要部署的项目,内存就已经占用了近三分之二,并且我当时项目是两个jar包,一个是socket服务转发的一个jar包一个是负责后端的常规接口的jar包,这样肯定是运行不起来的,我就开始对配置文件里的下手,将两者最小占用减小到128M,占用内存减少了一些。
当我把这两个挨个启动时,果不其然,仍然发生了爆内存的情况,此时的阿里云服务器负载达到了100%并且宝塔面板卡住不动了, 无奈只能重启服务器,再重启服务器之后,我尝试去再次开启kafka,发现没有办法开启kafka自带的zookeeper,使用status命令查看zookeeper的状态,提示文件找不到,此时我尝试了很多方法,比如重装kafka,但是都是一直提示各种文件找不到。然后我就想到,kafka的新版不需要启动zookeeper,并且因为内置注册中心,使整个kafka比之前占用的内存小了许多,在网上好像用新版启动方式的还比较少,当时也花了一些时间去找怎么启动新的kafka。
当一切环境都准备好了之后,就开始将项目尝试部署到阿里云上,因为是前后端分离,所以先将前端的Vue程序打包为静态资源,然后将其放到Nginx下的Html文件夹中,因为对于Nginx的配置文件还不熟悉,因此没有去改动任何的属性,然后在地址栏直接输入公网的ip地址,就可以看到项目的开始页面,当然,因为没有部署后端,这个时候所有的按钮都是不可用的。
然后,开始对后端的SpringBoot项目进行打包,将打成的Jar包放到软件商店下载的 一键部署Java项目中,配置一下基本的配置,注意在输入框这里的参数server-port要在前后分别加一个空格 ,将该参数与后面的参数隔开,不然在运行的时候会报启动参数错误。成功第一次运行了Jar程序之后,打开前端页面,果然不出所料,连接不上后端,不可能啊,我都运行成功了,怎么可能连都连不上,后面检查时发现忘记把端口放开了,连接上之后报的跨域错误,在这里,我将处理跨域的后端代码加上。关于跨域问题的代码,我反正是没有在百度上找到完全拿下来就可以用的代码,都是需要自己的情况进行一下适当的修改的。。。
下面是我当时遇到的一些问题:
1.刷新页面直接404,这里百度之后在Nginx配置文件里面加了点必需的东西。
2.SpringSecurity代码没有写好,对于一些提交表单的post请求如果没有一定的权限,会进行重定向,这里重定向会导致出现跨域的错误,救急的话就直接把SpringSecurity里关于该表单提交的权限控制删掉。
3.上传文件到服务器使用了一个TransFerTo的函数,这个函数会在后台报错,说找不到xxx.bat文件,这里百度说是因为写的相对路径,然后该函数会在前面加上默认的Tomcat路径,组成一个新的路径然后存储,但是,我确定我传入的就是一个绝对路径啊!经过重重修改,在本地删除了后端代码里对OPTIONS请求处理的代码,本地不报错了,然后部署到了服务器之后还是报错,无奈将这个函数换掉,换成了copyInputStreamToFile函数。
4.关于内存小,所以不能同时运行socket服务端Jar包和后端项目接口的Jar包,就将有关socket服务的代码都合并到后端项目中,此时前端的socket请求地址要改成后端的地址,如果存在前缀也不要忘记了,当时因为落下前缀一直连接不上。
5.不要将网站保存在服务器端的资源放在tmp目录下,可以放在home下。
6.新版的Kafka如果报找不到主题的错误,就在后端yml里面设置missing-topics-fatal,这个在低版本的SpringBoot里面是没有的哦。
7.如果使用element-ui的上传文件组件,尽量将自带action设置为空,自己写一个提交函数,用来上传文件,不然在服务器部署时会报错。。。。。
其实前后从拿到服务器到部署视频网站成功花了大概5天的时间,很多时候一点简单的错误都导致我几个小时的时间被用掉,在找BUG之前其实应该先仔细思考一下这个BUG的前后联系的代码的思路,对代码的整体有一个具体的理解,然后去列出有可能出现BUG的点,对这些点进行着重的检查,这样子会让大脑变得清晰一点,而不是一着急就脑子变得混乱,对只要看到的代码就浑浑噩噩的进行测试。
总的来说,这一段时间对我有了很大的提升,对于服务器部署有了一个大概的认知,感谢阿里云给了我这个学习的机会。