【笔记】记录一次全新的Java项目部署过程

记录一次全新的Java项目部署过程

  • 环境:CentOS7

一、初始环境准备

yum install wget -y
yum install vim -y
yum install net-tools -y
mkdir /data
mkdir /data/html
mkdir /data/backend

一、安装JDK 17

  • 安装JDK17
# 下载rpm
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
# 安装rpm(即安装jdk)
sudo yum -y install ./jdk-17_linux-x64_bin.rpm
# 校验安装是否成功
java -version

#得到如下输出说明成功
java version "17.0.11" 2024-04-16 LTS
Java(TM) SE Runtime Environment (build 17.0.11+7-LTS-207)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.11+7-LTS-207, mixed mode, sharing)

二、安装和配置Nginx

1 安装nginx
yum install epel-release
yum install nginx -y
2 配置nginx
# 配置文件默认位置
cd /etc/nginx/conf.d/
# 编辑配置文件
vim sh.conf
# 略
# server.stream、server.wx.stream等是动态的,根据启动的程序占用端口修改内容

三、安装redis

# 安装命令
yum install redis -y
# 启动redis
service redis start
# 停止redis
service redis stop
# 查看redis运行状态
service redis status
# 查看redis进程
ps -ef | grep redis
  • 设置为开机启动
chkconfig redis on
  • 设置密码
vi /etc/redis.conf
  • 查找 requirepass并修改密码
    在这里插入图片描述

四、测试环境打包

#在192.168.7.103上设置上设置免密登录服务器,用来传文件
ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.7.166
#一路按提示操作即可
  • 打包和上传命令
plat=${1}

folder=/data/chaiyou/oils-backend-template
distFolder=/data/chaiyou/bash/dist/server/


#跳转项目目录
cd ${folder}

#拉取最新代码
git pull

# gradle 打包
./gradlew :oils-backend:build -x test -x processTestResources -x checkstyleMain -x spotbugsMain -x verifyMergedCoverage -x compileTestJava -Dorg.gradle.java.home='/usr/local/jdk-17.0.8'  -Dorg.gradle.daemon=true

if [ $? -ne 0 ];then
 echo " build fail "
 exit 1
fi

#剪切打包结果jar包
# mv ${folder}/oils-backend/build/libs/oils-backend-0.0.1-SNAPSHOT.jar ${distFolder}/server.jar
scp ${folder}/oils-backend/build/libs/oils-backend-0.0.1-SNAPSHOT.jar root@192.168.7.166:/data/backend/

#登录到服务器上去执行重启命令
ssh root@192.168.7.166 << remotessh
cd /data/backend
bash restart.sh
exit

五、服务器上的重启脚本

  • 检查端口是否被占用的脚本(8080/8081端口交替使用)
  • checkPort.sh(位于/data/backend)
#!/bin/bash
#检查端口是否被占用,如果占用输出1,如果没有被占用输入0
port=${1}
#echo 'now checking port:'${port}
pIDa=`lsof -i :${port}|grep -v "PID" | awk '{print $2}'`
#echo $pIDa
if [ "$pIDa" != "" ];
then
   echo "1"
else
   echo "0"
fi
  • 重启脚本(restart.sh)
#默认端口
port=8080
portOld=8081

#今日日期
datestr=`date +"%Y%m%d%H%M%S"`

echo $datestr > date.log

#检查端口是否被占用
isPortInUse=`bash ./checkPort.sh ${port}`
if [ "$isPortInUse" == "1" ];
then
   echo "端口不可用"
   port=$[$port+1]
   portOld=8080
else
   portOld=8081
   echo "端口可用"
fi
echo '准备在端口'${port}'启动docker'


nohup java -Dspring.profiles.active=test -Dserver.port=${port} -jar oils-backend-0.0.1-SNAPSHOT.jar > output.${port}.log 2>&1 &


echo '正在启动程序,请耐心等待'
tail -f /data/backend/output.${port}.log | sed '/Started OilsApplication in\|JVM running for/q'

echo '准备修改nginx配置并重启'

echo 'proxy_pass http://127.0.0.1:'${port}'/web/;' > /etc/nginx/conf.d/server.stream
echo 'proxy_pass http://127.0.0.1:'${port}'/wx/;' > /etc/nginx/conf.d/server.wx.stream
echo 'proxy_pass http://127.0.0.1:'${port}';' > /etc/nginx/conf.d/doc.stream

nginx -s reload

echo '10秒后向原服务发出退出请求'

sleep 10

echo '正在请求原程序优雅退出'
exitResult=`curl http://127.0.0.1:${portOld}/systemd/graceful/exit`
echo '优雅退出结果:'${exitResult}

if [ "$exitResult" != "1" ]; then
  echo '优雅退出失败'
  exit 1
else
  echo '优雅退出成功'
fi

六、安装tesseract

  • 我的项目需要用到这个做最基本的图像识别
yum install tesseract -y
yum install tesseract-langpack-deu -y

七、提前准备好RDS

  • 用的是阿里云的
posted @   成旭元  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示