Linux 服务器上如何通过 Shell 脚本一键部署 SpringBoot 应用
springboot 是默认集成Tomcat容器的,将项目打包成jar包库、使用Java直接启动jar包(非spring boot也可以)
首先需要在服务器端安装jdk、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
本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2021/09/03 10:54