部署项目至云服务器ECS
以前一直憧憬着,能自己登录自己所做的网址,后来才知道得部署到云服务器中
简单来说:
- 购买云服务器
- 将自己的项目打包成war包或者jar包
- 云服务器(一般是CentOS Linux)安装Tomcat,jdk,mysql等
- 将war包放入Tomcat容器中,启动tomcat,就等同于是运行起来了。就可以直接通过云服务器的ip地址来访问你的网站了,也就是把localhost改成云服务器的ip地址,其他不变
- 如果是jar包应该直接javac一下就行了吧?
以下是我所做的几个步骤,因为都是一路试过来的,可能有些步骤是多余的,仅供参考
1. 购买云服务器
- 以学生优惠购买了阿里云的云服务器,进入本实例安全组,添加你需要用到的端口号,比如tomcat8080、mysql3306
- 第一次购买的话,需要自己重置一下密码的,不然后面xshell连接不上
2. 项目打包
因为我的项目是Spring Boot + JSP,所以我打成war包,网上有多种说法:
- 主方法需要继承SpringBootServletInitializer来重写configure
- pom.xml中需要排除掉Spring Boot内置的tomcat
- pom.xml中的build标签中我是有写一个maven打包的插件的,要注释掉,不然打包以后总是会出现一个original文件,好像是说Spring Boot本身就可以直接打包了,不需要再写个插件
- 最后再通过maven的package进行打包,打包后会在target中出现war包
以上我不知道是不是都需要做,可能不用。但是当时我最疑惑的地方就是,当我把war包放入tomcat的webapps下后,启动tomcat,可以访问到tomcat,但是一访问项目就报404
解决这个花了我很长时间,其中有一个回答特别的方便。
- 首先我先解释一下为什么404
404是因为你需要加上你的war包的名字,也就是localhost:8080/war包名/…
打包完后我把war包名改了一下,然后再进行访问就ok了的,但是这样有个问题,因为我用的IDEA运行的Spring Boot,访问的时候都不用写项目名的,这样我一旦每个名字前都加了个war名,路径就出大问题了。 - 然后网上找到一个大佬的方案,将webapps中的ROOT文件删除,然后将你的war包改名为ROOT.war,这样子就可以直接访问,不需要war包名了
- 但是如果多个项目呢?显然不是长久之计,最好自己百度一下,如何解决这个项目名的问题。(这里的war包名一般就改成和项目名一样)
3. 云服务器(安装)
起初我对云服务器的概念真的很疑惑,难道我直接访问云服务器就可以是一个网页了吗?现在看来,云服务器其实就像是你虚拟机中装的Linux,通过xshell和xftp进行连接,传输文件,安装jdk等等,这里就不再说如何安装了(jdk需要配置环境变量,配置在/etc/profile中)
安装mysql后
将本地的数据库文件导出,放置opt中
登录:mysql -uroot -proot
创建数据库:create database tywmf
使用数据库:use tywmf
执行:source /opt/tywmf.sql
查看表:show tables
4. war包放入容器
安装好云服务器的tomcat,将war包放入webapps中,再将tomcat运行。就可以直接通过ip进行访问你的网站了。
尚未完成:
- 有点疑惑jar包的该怎么搞
- 因为有一个项目用的是Oracle,不知道安装Oracle会不会很麻烦
疑惑,我能一直将云服务器的tomcat开着吗?会不会爆掉