Spring Boot入坑-11-打包和发布
Java运行环境
-
Java的应用多发布于Linux环境,如CentOS 7
-
部署应用前,在远程Linux主机或虚拟机上,需要安装JDK或JRE,使用如下命令安装一个Open JDK
yum -y install java-1.8.0-openjdk
数据库环境
-
一般 应用都需要有数据库支持,像MySQL,但一般在企业中会由运维或DBA提供
-
MySQL安装方法见附件中的《CentOS 7安装MySQL5.7》
准备其他工具
-
lrzsz,使用命令yum -y install lrzsz进行安装;安装后,可以使用命令
-
rz,命令将宿主机文件拷贝到Linux主机或虚拟机
-
sz,将Linux主机或虚拟机文件下载到宿主机
-
-
unzip,使用命令yum -y install unzip进行安装;安装后,可以对.zip类的压缩文件进行解压
-
unzip xxx.zip,解压到当前目录
-
【演示】
-
准备环境
打包
-
使用Maven打包,在IDEA中右侧的Maven工具中,选择相应项目的Lifecycle的package功能将项目打包成.jar文件(也可使用mvn package命令)
-
然后,在项目根目录的target目录下,就会生成一个jar包,名为:项目名称-版本.jar
-
此包,即为发布包
-
注意,.jar文件一般会比较大,包含了pom.xml描述依赖的.jar包和自运行的tomcat
【演示】
-
打包项目
发布
直接发布
-
直接发布,就是直接运行.jar包运行程序,具体步骤如下
-
上传文件,将打包文件上传到指定环境的服务器,将打包的.jar文件上传到CentOS 7服务器上规划的目录中
-
添加外部配置,添加与环境配置匹配的外部配置,与在.jar文件同目录,配置相应环境的外部application.properties
-
运行程序,后台使用java命令运行.jar文件,项目即启动,命令格式为:java –jar xxx.jar
-
访问服务,启动后,可通过[http://IP:端口]直接访问服务;如果端口未开放,通过命令firewall-cmd --zone=public --add-port=端口号/tcp --permanent放开端口,并使用命令systemctl restart firewalld重启防火墙
-
-
直接发布存在的问题
-
实际工作中,需要多次发布,每次发布前要杀死原有进程
-
需要配置指定日志,简单java –jar执行不能满足要求
-
需要后台运行
-
【演示】
-
直接发布项目到CentOS 7服务器,使用附件中的代码下的发布包内文件,或自己打包项目发布
使用shell脚本发布
-
先创建一个shell脚本文件,直接添加命令解决直接发布的问题
-
涉及的命令
-
nohup:后台运行命令
-
ps:查看进程
-
grep:查找符合条件的字符串
-
awk:输出指定列
-
kill:杀死进程
-
echo:控制台输出信息
-
-
其他常用命令
-
ll(ls –l):查看目录文件
-
tail –f:循环读取文件内容
-
-
多次发布命令,替换上面的第3步运行程序,针对springboot-data-mybatis-plus.jar包,具体脚本内容如下(附件中的deploy.sh)
-
deploy.sh,发布shell脚本;可以使用附件中的文件,拷贝时,注意在Notepad++中使用Unix(LF)
#!/bin/bash #包文件路径及名称(目录按照各自配置) APP_NAME=./springboot-data-mybatis-plus-0.0.1-SNAPSHOT.jar #日志文件路径及名称(目录按照各自配置) LOG_FILE=./springboot-data-mybatis-plus #查询进程,并杀掉当前jar/java程序 pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'` #判读进程id是否为,如果不为空,终止进程 if [ -z "$pid" ] then echo $APP_NAME"已经被关闭。" else kill -9 $pid echo $pid"进程终止成功。" fi #判断jar包文件是否存在,如果存在启动jar包,并时时查看启动日志 if test -e $APP_NAME then echo '文件存在,开始启动此程序...' #使用java命令运行jar包 #nohup...&:表示在后台运行 #-Xms、-Xmx:表示设置初始堆大小和最大堆大小 #>>:指定日志输出位置和格式 #-Xloggc:./gc.log > $LOG_FILE:包含gc日志的位置,与上一项可只配置一个 #2>&1:表示标准错误也使用标准输出流;/dev/null 表示空设备文件;0 表示stdin标准输入;1 表示stdout标准输出;2 表示stderr标准错误 nohup java -jar -Xms64m -Xmx128m $APP_NAME >> ./$LOG_FILE-`date +%Y-%m-%d`.log 2>&1 & #输出启动成功 echo $APP_NAME'启动成功...' else echo '$APP_NAME 文件不存在,请检查。' fi
-
使用sh命令运行shell脚本: sh ./deply.sh
-
此时,就发布的是最新版本,可通过[http://IP:端口]直接访问服务
-
【演示】
-
使用shell脚本发布项目到CentOS 7服务器
通过Nginx输出服务
概述
-
在很多企业的项目部署中,考虑到多负载、安全、性能等方面的需要,都会应用Nginx作为后端Web服务输出的反向代理服务器
-
Nginx主要作用有
-
HTTP服务器,一般用于输出前端项目
-
反向代理服务器,隐藏后端真实Web服务地址和细节,提供统一服务
-
负载均衡,高效的实现多台后端Web服务共同提供高可用服务
-
虚拟主机,能将多个域名编写在同一个Nginx服务器上提供多种服务
-
安装
-
Nginx安装,具体见附件中工具目录下的《CentOS 7安装Nginx.docx》
使用
-
安装好后,安装文件一般在/etc/nginx目录,主要的配置文件是nginx.conf
-
如果要添加自己的虚拟主机,绑定域名,并提供服务,可在conf.d目录下添加xxx.conf格式的文件,然后重新加载并重启Nginx即可
输出后端服务步骤
目标:使用模拟域名api.springboot-data-mybatis-plus.com域名提供后端服务
-
部署后端Web服务:根据项目实际需要,可在多台主机上部署多套后端Web服务,使用上一节的的使用Shell脚本发布即可
-
配置Nginx服务器:具体配置见附件中的《springboot-data-mybatis-plus.conf》
-
添加配置,将附件中的 springboot-data-mybatis-plus.conf拷贝到Nginx安装目录下的conf.d目录
-
测试配置,使用命令:nginx -t,用于测试添加的配置是否符合Nginx的格式要求,如果返回successful,表示成功
-
重新加载,使用命令:nginx -s reload
-
-
配置DNS(Domain Name Server):
-
将已申请的域名绑定到Nginx服务器IP上,即可使用域名提供后端服务,一般由网络管理 员协调运营商实现
-
由于是模拟域名,为模拟真实场景,可通过修改访问后端服务的主机hosts文件,实现模拟域名绑定到Nginx服务器IP实现效果
-
Windows操作系统的电脑在C:\Windows\System32\drivers\etc目录下hosts中进行上述修改
-
hosts配置示例如下
#DNS映射配置,前面是要访问的nginx主机ip地址,后面是自定义的域名 192.168.91.3 api.springboot-data-mybatis-plus.com
-
-
访问服务:在修改了hosts文件的主机,即可通过http://域名访问Nginx反向代理的后端服务
注意:Swagger要动态配置host,见swagger.server.host配置节
502错误,(前端项目会是403错误)
-
如果出现此错误,做如下处理
-
方法一:关闭SELINUX;具体为
-
vi /etc/selinux/config,将SELINUX值修改为disabled,然后重启
-
-
方法二:将自己的目录设置为httpd_sys_content_t类型,使用命令
-
先安装命令:yum install policycoreutils-python
-
然后执行命令:semanage fcontext -a -t httpd_sys_content_t '/ mydata / dist (/.*)?'
-
最后执行restorecon -R /mydata/dist
-
-
【演示】
-
通过Nginx输出服务
部署到Tomcat服务器
概述
-
有的企业有专门的Tomcat服务器,需要将Spring Boot应用部署到指定Tomcat服务器提供服务
-
此时,就需要将Spring Boot项目中内嵌的Tomcat排除
-
并将打包方式改为.war包
使用前准备
-
需要在具备JDR(或JRE)的Linux物理主机或虚拟机上安装Tomcat
-
具体安装步骤见附件中的《CentOS 7安装Tomcat.docx》
操作步骤
-
修改打包方式为war,在项目的pom.xml中,将项目类型配置packaging的值设置为war
-
移除嵌入式Tomcat,在pom.xml中,在spring-boot-starter-web依赖中排除内置的tomcat
-
添加单独的Tomcat依赖,在pom.xml中,单独添加编译期的tomcat依赖
-
修改启动类,让其继承于SpringBootServletInitializer,并覆写其中的configure方法
-
打war包,使用mvn package打包,此时生成的即为war包
-
将war包上传到Tomcat安装目录的webapps目录下并加载启动
具体内容见附件Tomcat发布包中的springboot-data-mybatis-plus-tomcat中的【Tomcat部署】内容
【演示】
-
部署Spring Boot项目到Tomcat
代码
网盘地址:链接:https://pan.baidu.com/s/1QYC4MZZyK0g0IURKCaQAow?pwd=8888