一、工程打包
1. 项目打包
想要将项目部署到服务器上,首先就要将项目打包成 JAR
包,但是通过 maven
打包我们只需要两步,首先先运行 clean
然后再运行 package
即可。
完成打包之后在项目目录下会生成 target
目录,其中 xxx.jar
就是我们要的 JAR
包。
2. 打包配置
默认打包项目的 YML
配置文件是内置在 JAR
中的,这种方式在仅修改配置的情况下也需要将整个工程重新打包更新,维护起来相对较为繁琐。因此通常在打包时选择排除 YML
文件,后续即使需要修改配置也无需重新打包只需重启服务即可生效。
若需将配置文件外置,则在 pom.xml
文件中添加如下内容,部署时将配置文件与 JAR
包置于同级目录即可。
<!-- 只在项目打包时添加,本地启动时注释该部分 -->
<build>
<resources>
<resource>
<directory>src\main\resources</directory>
<excludes>
<exclude>application.yml</exclude>
</excludes>
</resource>
</resources>
</build>
二、脚本配置
1. 上传文件
如果你使用的是默认的打包方式,那么直接上传文件到服务器即可。
如果你在打包时你设置了外置配置文件,那么需要将 application.yml
文件与 jar
包上传到同级目录下。
2. 启动脚本
为了方便项目启动,新建一个启动脚本 start.sh
用于快速运行项目。
脚本内容很简单,先查询项目是否运行,如果是则先通过 kill
命令停止,如果不是则启动项目,同时将运行日志输出到同级目录的 application-info.log
文件中。
需要注意如果在最后启动命令中没有使用 $(pwd)
而是使用相对路径则启动之后通过 jps
命令查看进程得到的进程名为 -jar
,需要通过 jps -l
查看。
# 创建启动脚本
vi start.sh
#!/bin/bash
# 替换 jar 包名称
APP_NAME=spring-test-1.0.0-SNAPSHOT.jar
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -9 $tpid
fi
# 检查进程是否已结束
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -9 $tpid
else
echo 'Stop Procecss Successfully!'
echo 'Start Procecss...'
# 后台启动程序
nohup java -jar $(pwd)/$APP_NAME > application-info.log 2>&1 &
fi
3. 停止脚本
同理再新建一个停止脚本文件 stop.sh
。
# 创建停止脚本
vi stop.sh
#!/bin/sh
# 将 spring-test-1.0.0-SNAPSHOT.jar 修改为自己的 jar 包名
APP_NAME=spring-test-1.0.0-SNAPSHOT.jar
PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill $PID
fi
4. 工程启动
完成脚本创建之后启动和停止服务直接运行脚本即可。
(1) 文件授权
在运行脚本之前需要给脚本文件授予可执行文件。
chmod +x start.sh
chmod +x stop.sh
(2) 项目启动
运行启动脚本之后通过 jps
查看 Java
进程,如果能看到你的 jar
包表明启动成功。
# 项目启动
./start.sh
# 项目停止
./stop.sh
# 查看进程
jps
三、Docker部署
在上面的例子中通过预先的脚本文件在服务器上运行 JAR
文件,当然你也可以选择自行构建镜像再由 Docker
进行部署。
1. 环境准备
首先当然需要在服务器上安装 Docker
环境,可以参考之前的文章,这里不再详述介绍。
在开始之前先将替换 Docker
的镜像地址以便后续构建。
# 编辑文件
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"]
}
# 刷新并重启
systemctl daemon-reload
systemctl restart docker
2. 配置文件
新建 Dockerfile
文件,配置容器镜像的基本信息。
其中 ADD
为项目 Jar
包指定别名, EXPOSE
为程序向外开放服务的端口。
vi Dockerfile
# 文件内容
FROM java:8
VOLUME /tmp
ADD demo-1.0.0-SNAPSHOT.jar demo.jar
EXPOSE 9090
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]
3. 构建镜像
将程序 Jar
包上传到 Dockerfile
同级目录,通过 build
命令构建镜像。
这里我指定了镜像名称为 demo
,版本号为:1.0
。
# 构建镜像
docker build -t demo:1.0 .
# 查看已有镜像
docker images
4. 服务启动
完成镜像构建之后通过 run
命令直接运行即可。
docker run -d \
--name demo \
-p 9090:9090 \
demo:1.0