一、背景
SpringBoot 项目部署到服务器常见的方式就是,打包成 jar 包,通过 nohup java -jar 命令去运行项目,这也是官方推荐的一种方式。但是,每次项目代码修改更新的时候,重新打包上传服务器,覆盖原项目,需要把原来项目运行进程 kill ,再运行新的项目。这个过程是在有点繁琐。后面,网上查寻和学习了下脚本,决定整合一个脚本文件,简化项目部署过程。以下是整个教程!
二、详细步骤
2.1、打包项目
通过 IDEA 中 Maven 插件打包,先 clean 整个项目 然后 install。打包之前,先要排除单元测试类,避免把测试类也打包,这样也更快。POM.XML 中添加如下配置:
代码语言:javascript复制<properties>
<skipTests>true</skipTests>
</properties>
或者直接写个maven 打包命令:clean package -DskipTests=true ,每次打包的时候点击 package 就可以了。
如果不想通过 IDEA 来打包,也可以直接通过 maven 打包命令来(全部环境通用),前提是已经安装过 maven:
代码语言:javascript复制mvn install -Dmaven.test.skip=true
2.2、上传项目到服务器
我的是 win10 环境,使用的是 FileZilla 工具上传文件。很方便,操作也很直观,推荐使用。选中本地需要上传的项目,右击点击上传即可。
三、项目部署运行
3.1、部署多个SpringBoot项目
通过服务器如果需要部署多个spring-boot项目,端口不一样。那怎么通过域名来访问呢?这就需要 Nginx 来出手了,通过Nginx的反向代理实现。我博客之前也介绍过关于Nginx相关的(CentOS 下 配置Nginx 和相关使用配置),这里便不进一步说明了,直接给出 nginx.conf 的主要配置:
代码语言:javascript复制server {
listen 80; #nginx默认监听 80 端口
server_name www.xmlvhy.com; #这里添加自己服务器的域名或ip
access_log logs/book.log;
error_log logs/book.error;
upstream spring-boot {
server www.xmlvhy.com:8081;
}
upstream boot {
server www.xmlvhy.com:8082;
}
#将/blog1请求转发给http://www.xmlvhy.com:8082 处理
location /blog {
proxy_pass http://spring-boot;
}
location /blog1 {
proxy_pass http://boot;
}
......
}
当然,项目配置文件中(application.properties)需要指定 context path 和端口:
代码语言:javascript复制server.port=8081
server.servlet.context-path=/blog/
备注:
如果部署多个项目且不同端口,阿里云那边记得开放对应端口,另外每个项目最好都分好包,可以根据设置的context path 来分,再将所有的SpringBoot 项目都整理到一个文件夹,这样管理起来清晰明了!
3.2、SpringBoot项目启动脚本
代码语言:javascript复制#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=blog.jar
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar $APP_NAME >> catalina.out 2>&1 &
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
存放位置,我喜欢这样放:
脚本相关命令:
代码语言:javascript复制sh springboot.sh start 启动服务
sh springboot.sh stop 停止服务
sh springboot.sh restart 重启服务
sh springboot.sh status 查看运行状态
以上,便完成了SpringBoot项目打包到部署脚本的教程!
参考学习链接:
代码语言:javascript复制https://blog.csdn.net/lj1314ailj/article/details/80580233
本文作者: AI码真香
本文标题: SpringBoot 项目打包部署
本文网址: https://www.xmlvhy.com/article/73.html
版权说明: 自由转载-非商用-非衍生-保持署名 署名-非商业性使用4.0 国际 (CC BY-NC 4.0)