首页 > 技术文章 > springboot项目部署到云服务器上

jiezao 2020-08-11 11:25 原文

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系统上运行这个项目,就要保证他运行所用的端口没有被占用,不然运行就会报错
  • 如果被占用了,(没被占用的时候不显示任何东西),查看占用端口的PIDsudo 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的时区问题
    由于我的是宝塔一键部署的,好像配置好了的,这个问题倒是没遇见。遇到了可以通过修改时区解决。
  • 项目在本地可以访问,到服务器启动成功了访问不了。我出现过这个问题。经过各种尝试有如下几种可能:
  1. 有种可能是tomcat配置问题。在yml文件中配置:server.address=0.0.0.0。据说是tomcat默认的是172.0.0.0.所以只能本地访问。
  2. 静态资源问题。就是静态资源打包的时候没有打入jar。所以访问404. 解决就是上面配置静态资源那段代码。
  3. 服务器端口未开启:
    我最终的问题就出现在这里,我是通过阿里云的控制台界面开启的端口。在该界面显示端口是开启了的。但是实际上并没有开启。需要在命令行界面开启。
    添加端口:
    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就说明开放端口成功。

推荐阅读