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,解压到当前目录

【演示】

  1. 准备环境

打包

  • 使用Maven打包,在IDEA中右侧的Maven工具中,选择相应项目的Lifecycle的package功能将项目打包成.jar文件(也可使用mvn package命令)

  • 然后,在项目根目录的target目录下,就会生成一个jar包,名为:项目名称-版本.jar

  • 此包,即为发布包

  • 注意,.jar文件一般会比较大,包含了pom.xml描述依赖的.jar包和自运行的tomcat

【演示】

  1. 打包项目

发布

直接发布

  • 直接发布,就是直接运行.jar包运行程序,具体步骤如下

    1. 上传文件,将打包文件上传到指定环境的服务器,将打包的.jar文件上传到CentOS 7服务器上规划的目录中

    2. 添加外部配置,添加与环境配置匹配的外部配置,与在.jar文件同目录,配置相应环境的外部application.properties

    3. 运行程序,后台使用java命令运行.jar文件,项目即启动,命令格式为:java –jar xxx.jar

    4. 访问服务,启动后,可通过[http://IP:端口]直接访问服务;如果端口未开放,通过命令firewall-cmd --zone=public --add-port=端口号/tcp --permanent放开端口,并使用命令systemctl restart firewalld重启防火墙

  • 直接发布存在的问题

    • 实际工作中,需要多次发布,每次发布前要杀死原有进程

    • 需要配置指定日志,简单java –jar执行不能满足要求

    • 需要后台运行

【演示】

  1. 直接发布项目到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:端口]直接访问服务

【演示】

  1. 使用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域名提供后端服务

  1. 部署后端Web服务:根据项目实际需要,可在多台主机上部署多套后端Web服务,使用上一节的的使用Shell脚本发布即可

  2. 配置Nginx服务器:具体配置见附件中的《springboot-data-mybatis-plus.conf》

    • 添加配置,将附件中的 springboot-data-mybatis-plus.conf拷贝到Nginx安装目录下的conf.d目录

    • 测试配置,使用命令:nginx -t,用于测试添加的配置是否符合Nginx的格式要求,如果返回successful,表示成功

    • 重新加载,使用命令:nginx -s reload

  3. 配置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
  4. 访问服务:在修改了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

【演示】

  1. 通过Nginx输出服务

部署到Tomcat服务器

概述

  • 有的企业有专门的Tomcat服务器,需要将Spring Boot应用部署到指定Tomcat服务器提供服务

  • 此时,就需要将Spring Boot项目中内嵌的Tomcat排除

  • 并将打包方式改为.war包

使用前准备

  • 需要在具备JDR(或JRE)的Linux物理主机或虚拟机上安装Tomcat

  • 具体安装步骤见附件中的《CentOS 7安装Tomcat.docx》

操作步骤

  1. 修改打包方式为war,在项目的pom.xml中,将项目类型配置packaging的值设置为war

  2. 移除嵌入式Tomcat,在pom.xml中,在spring-boot-starter-web依赖中排除内置的tomcat

  3. 添加单独的Tomcat依赖,在pom.xml中,单独添加编译期的tomcat依赖

  4. 修改启动类,让其继承于SpringBootServletInitializer,并覆写其中的configure方法

  5. 打war包,使用mvn package打包,此时生成的即为war包

  6. 将war包上传到Tomcat安装目录的webapps目录下并加载启动

    具体内容见附件Tomcat发布包中的springboot-data-mybatis-plus-tomcat中的【Tomcat部署】内容

【演示】

  1. 部署Spring Boot项目到Tomcat

    代码

    网盘地址:链接:https://pan.baidu.com/s/1QYC4MZZyK0g0IURKCaQAow?pwd=8888

posted @ 2024-06-09 20:52  拐子  阅读(19)  评论(0编辑  收藏  举报