Linux 服务器上如何通过 Shell 脚本一键部署 SpringBoot 应用

简介: Linux 服务器上如何通过 Shell 脚本一键部署 SpringBoot 应用 -----------------来自小马哥的故事

springboot 是默认集成Tomcat容器的,将项目打包成jar包库、使用Java直接启动jar包(非spring boot也可以)

首先需要在服务器端安装jdk、maven、git

点我看maven安装教程
点我看git安装教程

想要SpringBoot项目使用maven打包成jar包需先在项目中的pom添加build插件,代码如下


<build>
        <plugins>
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <configuration>
                    <outputDirectory>${project.build.directory}/libs</outputDirectory>
                    <excludeTransitive>false</excludeTransitive>
                    <stripVersion>false</stripVersion>
                    <includeScope>compile</includeScope>
                    <!--<includeScope>runtime</includeScope>-->
                </configuration>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- <outputDirectory>libs</outputDirectory> -->
                            <excludeTransitive>false</excludeTransitive>
                            <stripVersion>true</stripVersion>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    
    </build>    
        

此插件是指将项目所依赖的jar,打包的时候打包到libs目录下,一遍到时候编写shell脚本读取依赖的jar

接下来就可以编写shell脚本了(get源码的方式有很多种,直接上传上去也行。本文将使用Git在服务器端直接拉取源码,编译打包,启动)

主要修改 proc ,SOURCE_HOME,APP_LOG,PROFILES_ACTIVE 文件就好!


#打包完后的jar名称,替换成你自己项目的名称,该名称可以在maven项目的pom中配置
proc="wechat"
#项目源码的目录地址(初始可能需要自己从Git拉下来)
SOURCE_HOME="/usr/local/publicwx/publicWechat"
#日志地址
APP_LOG="$SOURCE_HOME/target/catalina.base_IS_UNDEFINED/logs/log_info.log" 
#环境配置 用户配置开发(dev),测试(test),生产(prod)的配置文件,避免频繁改动
PROFILES_ACTIVE="spring.profiles.active=dev" 

#JVM启动参数,关于JVM调优这里不介绍,感兴趣的可以自行百度 JVM调优
JAVA_OPTS="-server -Xms512M -Xmx512M -Xss256k -Xmn256m -XX:SurvivorRatio=4 -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M  -XX:CMSInitiatingOccupancyFraction=90 -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=0 -XX:CMSFullGCsBeforeCompaction=100 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"

psid=0

#检查进程是否存在
checkpid() {
   javaps=$(pgrep -f "$proc")
   if [ -n "$javaps" ]; then
      psid=$javaps
   else
      psid=0
   fi
}


#编写启动方法
start() {
   checkpid

   if [ $psid -ne 0 ]; then
      echo "================================"
      echo "warn: $proc already started! (pid=$psid)"
      echo "================================"
   else
      echo "Starting $proc ..."
      #到项目源码目录
      cd $SOURCE_HOME
      #输出,准备获取最新代码
      echo -n "git pull source ,please wait ....."
      #获取最新代码,此列只在目录所在分支pull
      #若想部署指定分支代码,可以在脚本调用参数中添加一个变量,用git checkout ${targer_branch}
      git pull
       
      #输出,最新代码已拉取完毕,准备打包
      echo -n "mvn package source ,please wait ....."
       
      #maven打包命令,此处特别注意是 —U ,是指引用快照版本的jar(引用自己的项目)每次都更新最新的。
      mvn clean package -Dmaven.test.skip=true
      #打包成功后默认是在启动项目的target目录下。
      cd target
      #输出,准备启动
      echo -n $"Starting $proc:"
       
      #循环加载所需的jar,此处和2的pom配置有关
      for name in *.jar
      do
        APP_CLASS="$name"
      done
       
      #启动脚本,--spring.profiles.active=   用于设置环境所使用的配置文件
      JAVA_CMD="java "$JAVA_OPTS" -jar "$APP_CLASS" --"$PROFILES_ACTIVE" &"
      #后台运行
       
      $JAVA_CMD &
      sleep 1
      checkpid
      if [ $psid -ne 0 ]; then
         echo "======================================"
         echo "$proc Start Success! (pid=$psid)[OK]"
         echo "======================================"
      else
         echo "[Failed]"
      fi
   fi

}


#查看日志
showlog() {
   tail -f $APP_LOG
}



#停用项目
stop() {
   checkpid

   if [ $psid -ne 0 ]; then
      echo -n "Stopping $proc ...(pid=$psid) "
      kill -9 $psid

      if [ $? -eq 0 ]; then
         echo "[OK]"
      else
         echo "[Failed]"
      fi
    
      checkpid
      if [ $psid -ne 0 ]; then
         stop
      fi
   else
      echo "================================"
      echo "warn: $proc is not running"
      echo "================================"
   fi
}


#项目状态
status() {
   checkpid
   if [ $psid -ne 0 ];  then
      echo "$proc is running! (pid=$psid)"
   else
      echo "$proc is not running"
   fi
}


#设置脚本参数,启动的时候可以采用./脚本名称.sh start/stop/restart/log/status等参数
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  log)
    showlog
    ;;
  status)
    status
    ;;
  restart)
    stop
    start
    ;;
esac
相关文章
|
18天前
|
网络协议 网络安全
基于bind软件部署DNS服务器
关于如何使用bind软件部署DNS服务器的教程,包括DNS服务器的类型、基于bind软件的部署步骤、验证DNS服务器可用性的指导,以及如何进行DNS正向解析的实现。
18 2
基于bind软件部署DNS服务器
|
1天前
|
监控 JavaScript Java
部署应用程序到服务器
部署应用程序到服务器
9 3
|
18天前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
105 18
|
9天前
|
存储 数据挖掘 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区
|
1天前
|
Ubuntu 开发工具 git
在Ubuntu上部署BOA服务器的步骤
部署BOA服务器是一个涉及多个步骤的过程,包括系统更新、安装依赖、下载和编译源代码、配置服务器以及启动和验证。遵循上述步骤,可以在Ubuntu系统上成功部署BOA服务器,为开发和测试提供一个轻量级的Web服务器环境。
8 0
|
20天前
|
UED
JSF文件下载:解锁终极文件传输秘籍,让你的Web应用瞬间高大上!
【8月更文挑战第31天】掌握JSF文件下载功能对构建全面的Web应用至关重要。本文通过具体代码示例,详细介绍如何在JSF中实现文件下载。关键在于后端Bean中的文件读取与响应设置。示例展示了从创建实体类到使用`&lt;h:commandLink&gt;`触发下载的全过程,并通过正确设置响应头和处理文件流,确保文件能被顺利下载。这将显著提升Web应用的实用性与用户体验。
36 0
|
20天前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
32 0
|
20天前
|
JavaScript 搜索推荐 前端开发
从零搭建到部署:Angular与Angular Universal手把手教你实现服务器端渲染(SSR),全面解析及实战指南助你提升Web应用性能与SEO优化效果
【8月更文挑战第31天】服务器端渲染(SSR)是现代Web开发的关键技术,能显著提升SEO效果及首屏加载速度,改善用户体验。Angular Universal作为官方SSR解决方案,允许在服务器端生成静态HTML文件。本文通过具体示例详细介绍如何使用Angular Universal实现SSR,并分享最佳实践。首先需安装Node.js和npm。
20 0
|
XML JSON Java
springboot学习-搭建第一个springboot应用
springboot学习-搭建第一个springboot应用
105 0
springboot学习-搭建第一个springboot应用
|
Java 数据格式 数据安全/隐私保护