1.1服务器准备
首先需要购买云服务器,我这里是白嫖的阿里云,所以就用阿里云做演示:
服务器上首先需要配置安全组规则,这里参考配置mysql
然后我们需要安装数据库(我这里用的是mysql)和jdk。这里可以使用宝塔进行安装,比较方便
配置完jdk后可以通过java -version
查看是否安装成功,成功的可以看到如下图的格式
还需要在本地电脑上安装xshell和xftp,有免费版的。
输入用户名和密码进行配置。xftp也是一样 后者是为了快捷传输文件。
1.2本地准备
打包方式有两种,一种是打包成war包,这个时候需要在云服务器中部署tomcat才能够运行。第二种是打包成jar包,这种由于springboot内置了tomcat,所以只需要服务器上有jdk就可以了。需要注意的是springboot最低需要jdk1.8及以上版本。我们这里演示的是打包jar包。
首先我们最好在项目配置两个环境,一个dev环境,一个pro环境。
其中的配置文件大同小异,主要是数据库的连接配置需要修改,毕竟一般都是一个用的本地的数据库,一个用的云服务器上的数据库。可以先在发布环境中跑一遍项目。
然后再pom中加入依赖
这个是加入的依赖。
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins>
这个是配置静态资源
<resources> <resource> <!-- 指定resources插件处理哪个目录下的资源文件 --> <directory>${basedir}/src/main/webapp</directory> <!-- 需要将资源文件放到该目录下才能访问 --> <targetPath>META-INF/resources</targetPath> <includes> <include>**/**</include> </includes> </resource> <resource> <directory>${basedir}/src/main/resources</directory> </resource> </resources>
这个是指定打包jar包
<!-- 打包成jar包 --> <packaging>jar</packaging>
然后进行打包
打包后的结果在target目录下:
打包完了可以直接在本地先试着运行一下(切换目录到jar包所处位置,下面代码运行jar包。xxx.jar是你的Java包全称)
java -jar xxx.jar
到这里本地准备也完成了。
1.3部署
将jar包通过xftp发送到服务器中:
尝试运行该xxx.jar包
- 查看端口使用情况
netstat -anp | grep 8800 //netstat -anp | grep <端口号>
我们要想在linux系统上运行这个项目,就要保证他运行所用的端口没有被占用,不然运行就会报错 - 如果被占用了,(没被占用的时候不显示任何东西),查看占用端口的PID
sudo lsof -i:8800 //sudo lsof -i:<端口号>
- 我们要把它kill掉,留出空位来运行我们的项目。kill后再次查看端口,可以看到这个端口已经腾出来了(查询为空)
sudo kill -9 26191 //sudo kill -9 <PID>
- 进入xxx.jar包所在的目录下
- 然后执行命令:
java -jar xxx.jar
这样就算部署成功了,可以通过http://公网ip:端口号 访问网站。但是这样还有一个问题。就是当我们关掉xhell时,我们的网站又访问不上了。只能再次运行一次。
我们可以先停掉原来的项目。创建一个start.sh文件。向其中添加字段 :java -jar ***.jar
。按ESC + :wq + 回车键保存退出。这是vim的基本操作。
给这个start.sh 管理员权限,然后用nohup指令不间断地运行(nohup指令:忽略所有挂断(SIGHUP)信号,不挂断地运行命令)
chmod 777 start.sh //赋予管理员权限
nohup ./start.sh & //不间断运行文件内的指令
把Xshell关掉,在浏览器上输入http://公网IP:8800 发现项目还是可以进入,说明我们已经设置成功了。至此springboot项目部署到阿里云服务器上完结。
当然后面还需要我们去申请域名,就是其他人那种www.xxx.com的访问地址,而不是我们现在这种ip+端口的地址。我这里就不做演示了。
1.4可能遇到的问题
- mysql的时区问题
由于我的是宝塔一键部署的,好像配置好了的,这个问题倒是没遇见。遇到了可以通过修改时区解决。 - 项目在本地可以访问,到服务器启动成功了访问不了。我出现过这个问题。经过各种尝试有如下几种可能:
- 有种可能是tomcat配置问题。在yml文件中配置:server.address=0.0.0.0。据说是tomcat默认的是172.0.0.0.所以只能本地访问。
- 静态资源问题。就是静态资源打包的时候没有打入jar。所以访问404. 解决就是上面配置静态资源那段代码。
- 服务器端口未开启:
我最终的问题就出现在这里,我是通过阿里云的控制台界面开启的端口。在该界面显示端口是开启了的。但是实际上并没有开启。需要在命令行界面开启。
添加端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
刷新规则:
firewall-cmd --reload
查看指定端口
firewall-cmd --zone=public --query-port=8080/tcp
删除指定端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
查看已开放得所有端口
firewall-cmd --list-ports
我们可以先查看所有开放的端口是否存在我们需要开放的端口。没有的话添加,需要注意的是添加后需要刷新规则。不然不生效。然后通过查看指定端口号如果返回yes就说明开放端口成功。