项目部署
项目部署
一个稍微大点的项目一般还包括了众多的中间件,所以在部署项目前,请先确保中间件是否正常安装中间件安装参考,并且正确配置环境准备
架构图

Single
单体架构部署比较简单
- 将打包好后的
jar 包
上传到服务器的任意位置(硬盘空间足够) - 在
jar 包
同级目录下创建config
目录,用于存放配置文件,可以将项目的run/src/resources/
目录下的所有配置文件都放在这个目录里面 - 创建运行文件
Cloud
微服务构架部署和单体类似,只不过是可以在多个服务器,或者是服务器的多个文件夹,或者创建多个启动命令,来达到同时启动多个服务的目的,这只需要配置好了注册中心(Nacos)和配置中心(Nacos)的连接信息就行了
启动命令,用于启动服务
Linux
Linux 部署要注意的是,没有图形化的界面,所以一定要做好运维记录,不然后面很难维护
启动脚本
run.sh
java=env/linux/jdk-17.0.5/bin/java
jar=$1
echo "" > $jar.out
echo "*****************start begin*****************"
oldpid=`jps | grep $jar | grep -v "prep" | awk '{print $1}'`
if [ x"$oldpid" != x"" ]; then
echo "$jar was running..."
echo "try restart"
kill -9 $oldpid
echo "killed PID is $oldpid"
echo "run $jar ...."
else
echo "run $jar ...."
fi
vm="-Dfile.encoding=utf-8 \
-Dmaven.wagon.http.ssl.insecure=true \
-Dmaven.wagon.http.ssl.allowall=true \
--add-opens java.base/java.util=ALL-UNNAMED \
--add-opens java.base/java.lang=ALL-UNNAMED \
--add-opens java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens java.base/java.lang.invoke=ALL-UNNAMED \
--add-opens java.base/java.lang.io=ALL-UNNAMED"
params="--spring.profiles.active=test \
--spring.cloud.nacos.discovery.server-addr=68.52.2.141:8848 \
--spring.cloud.nacos.config.server-addr=68.52.2.141:8848 \
--spring.cloud.nacos.username=nacos \
--spring.cloud.nacos.password=THga20_24_nacos"
nohup $java $vm -jar $jar $params >$jar.out 2>&1 &
nowpid=`jps | grep $jar | grep -v "prep" | awk '{print $1}'`
echo "*****************start success,new PID is $nowpid*****************"
使用nohup
在后台运行Jar 包
如果不想输出日志,只想在后台运行,可以这样配置
nohup $java $vm -jar $jar $params >/dev/null 2>&1 &
如果是微服务,有多个 jar 需要同步启动
./run.sh auth.jar
./run.sh module-system.jar
./run.sh gateway.jar
./run-auth.sh &
./run-gateway.sh &
./run-module-system.sh &
其他参考脚本/命令
- 查看当前 jar 运行的 PID
ps -ef | grep run.jar
- 查看端口运行的 PID仅root权限
有的时候,如果我们需要Jar包
的时候,发现端口被占用了,想查看一下是什么进程占用了,只可以使用
netstat -lnp | grep $PORT
- 关闭运行的 jar 包
# 通过 ps 找到 pid 后使用
kill -9 $PID
- 查看日志
tail -f run.jar.out
可以直接查看控制台日志,也可以查看./logs/模块名/debug.log
|./logs/模块名/info.log
|./logs/模块名/warning.log
|./logs/模块名/error.log
- 清除日志
如果程序一直运行,run.jar.out 日志会一直不停的增长,所以需要定期清空日志,注意,不要直接删除这个文件,你可以使用以下方法:
echo "" > run.jar.out
或者
cat /dev/null > nohup.out
也可以考虑使用crontab -e
来创建一个系统任务调度参考
0 0 * * 0 /data/jar/clearlog.sh
clearlog.sh
cat /dev/null > nohup.out
Windows
提示
Windows
部署就是查看日志不是很方便,如果可以,推荐你在服务器上安装一个Git,这样就可以使用GitBash
的tail命令来查看日志了,同时也可以方便后面如果要使用Jenkins等工具来做自动化部署的时候接取代码,非常好用😘😘😘
启动脚本
run.bat
@echo off
rem "配置控制台显示中文(防止乱码)"
chcp 65001
rem "可以显示当前运行的 bat 位置到黑窗口上面,方便后续找到运行的 jar 包的位置"
set TITLE=%0
rem "指定jdk的 java 命令,你也可以指定对应的 jdk 版本"
set java=env\win\jdk-17.0.5\bin\java.exe
rem "打包好后的jar包名,每个服务的 jar 包名不一样"
set jar=%1
for /f "tokens=1-5" %%i in ('env\win\jdk-17.0.5\bin\jps ^|findstr "%jar%"') do (
echo kill the process %%i who use the port
taskkill /pid %%i -t -f
goto start
)
:start
rem "配置 VM 参数"
set vm=-Dfile.encoding=utf-8 ^
-Dmaven.wagon.http.ssl.insecure=true ^
-Dmaven.wagon.http.ssl.allowall=true ^
--add-opens java.base/java.util=ALL-UNNAMED ^
--add-opens java.base/java.lang=ALL-UNNAMED ^
--add-opens java.base/java.lang.reflect=ALL-UNNAMED ^
--add-opens java.base/java.lang.invoke=ALL-UNNAMED ^
--add-opens java.base/java.lang.io=ALL-UNNAMED
rem "配置 Jar 包参数"
set params=--spring.profiles.active=test ^
--spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 ^
--spring.cloud.nacos.config.server-addr=127.0.0.1:8848 ^
--spring.cloud.nacos.username=nacos ^
--spring.cloud.nacos.password=nacos
rem "组合成启动命令"
echo "启动中:%jar%"
%java% %vm% -jar %jar% %params%
exit
如果是微服务,有多个 jar 需要同步启动
run-auth.bat
@echo off
start cmd /k "run.bat auth.jar"
exit
run-module-system.bat
@echo off
start cmd /k "run.bat module-system.jar"
exit
run-gateway.bat
@echo off
start cmd /k "run.bat gateway.jar"
exit
run-all.bat
@echo off
start cmd /k "timeout -nobreak 2 && run-auth.bat"
start cmd /k "timeout -nobreak 2 && run-gateway.bat"
start cmd /k "timeout -nobreak 2 && run-module-system.bat"
exit
启动参数说明
启动参数
VM 参数:
-Dfile.encoding=utf-8
:配置字符集为 UTF8-Dmaven.wagon.http.ssl.insecure=true
和-Dmaven.wagon.http.ssl.allowall=true
:配置允许SSL--add-opens java.base/**=ALL-UNNAMED
:模块化系统配置(JDK17必须,JDK8可以不配置)
Jar 包参数:
--spring.profiles.active=test
:配置环境(测试环境[test]或者生产环境[dev])--spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
\--spring.cloud.nacos.config.server-addr=127.0.0.1:8848
\--spring.cloud.nacos.username=nacos
\--spring.cloud.nacos.password=nacos
: 配置 Nacos 连接信息(单体架构可以不配置)--server.port=8080
:配置启动的 Jar 包的端口号
模块化系统配置
在JDK 17中,java.base
模块是Java
的核心模块之一,它包含Java
运行时所需的基础类。如果启动时遇到“java.base模块不向未命名模块opens java.*
”的错误,通常是由于配置问题导致的,参考,所以有遇到不能正常加载的模块就只需要往启动参数里面添加--add-opens java.base/xxxx=ALL-UNNAMED
就行了
参数配置优先级
如果是微服务架构,或者是使用了配置中心(Ncos)配置参数,参数配置的优先级如下:
nacos > 启动参数 > application.yml > bootstrap.yml > @Value(${key=value})