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>    
        
AI 代码解读

此插件是指将项目所依赖的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
AI 代码解读
目录
打赏
0
0
0
0
1
分享
相关文章
|
8天前
|
Websoft9:为开发者打造的高效 Linux 服务器面板
Websoft9 是一款以开源应用部署与管理为核心的服务器面板,采用“环境即服务”模式。它通过运行环境标准化、自动化配置、安全融合和资源管理四个方面实现平台与环境的深度协同。支持多语言框架预集成、云原生组件整合,提供 200+ 应用模板一键部署,并具备全流程安全防护和统一资源监控能力,助力开发者高效管理和扩展应用环境。
34 0
Linux云服务器如何搭建LNMP环境
LNMP环境是Linux系统中常用的Web服务架构,由Linux、Nginx、MySQL/MariaDB和PHP组成,适用于高效托管动态网站。本文以CentOS 7为例,详细介绍了LNMP环境的搭建步骤,包括Nginx、MariaDB和PHP的安装与配置,以及最终通过创建`index.php`文件验证环境是否成功部署。具体操作涵盖配置YUM仓库、安装服务、编辑配置文件、启动服务等关键步骤,确保用户能够顺利搭建并运行LNMP环境。
47 1
Linux云服务器如何搭建LNMP环境
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
74 1
DeepSeek服务器繁忙解决方法:使用阿里云一键部署DeepSeek个人网站!
通过阿里云一键部署DeepSeek个人网站,解决服务器繁忙问题。学生用户可领取300元代金券实现0成本部署,普通用户则可用99元/年的服务器。教程涵盖从选择套餐、设置密码到获取百炼API-KEY的全流程,助您快速搭建专属大模型主页,体验DeepSeek、Qwen-max、Llama等多款模型,无需代码,最快5分钟完成部署。支持绑定个人域名,共享亲友使用,日均成本仅约1元。
42 10
【阿里云】控制台使用指南:从创建ECS到系统诊断测评
本文介绍了如何通过阿里云获取ECS云服务器并进行操作系统配置与组件安装,以实现高效的资源管理和系统监控。阿里云凭借强大的基础设施和丰富的服务成为用户首选。文中详细描述了获取ECS、RAM授权、开通操作系统控制台及组件安装的步骤,并展示了如何利用控制台实时监控性能指标、诊断系统问题及优化性能。特别针对idle进程进行了深入分析,提出了优化建议。最后,建议定期进行系统健康检查,并希望阿里云能推出更友好的低成本套餐,满足学生等群体的需求。
78 17
【阿里云】控制台使用指南:从创建ECS到系统诊断测评
玩转云服务器——阿里云操作系统控制台体验测评
在云服务器日益普及的背景下,运维人员对操作系统管理工具的要求不断提高。我们需要一款既能直观展示系统状态,又能智能诊断问题,提供专业指导的控制台。阿里云操作系统管理平台正是基于API、SDK、CLI等多种管理方式,致力于提升操作效率,为用户带来全新的系统运维体验。阿里云操作系统控制台凭借便捷易用的设计和高效的管理功能,成为云服务器运维的强力助手。本次测评基于真实体验截图,对其整体表现进行了深入探索。
70 33
阿里云幻兽帕鲁联机服务器搭建全攻略,速来抄作业!2025新版教程
阿里云提供2025年最新幻兽帕鲁服务器申请购买及一键开服教程。4核16G配置支持8人,70元/月;8核32G配置支持20人,160元/月。选择配置、地域、操作系统后,点击【一键购买及部署】,约3分钟完成创建。本地安装STEAM客户端并登录,进入游戏选择多人模式,输入服务器IP和端口(8211),即可开始游戏。详细教程及更多问题解答请参考阿里云幻兽帕鲁游戏专区。
62 20
阿里云操作系统控制台——解决服务器磁盘I/O故障
阿里云操作系统控制台——解决服务器磁盘I/O故障
42 12