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
 
                    
                
                
            
        
浙公网安备 33010602011771号