Centos Linux 系统部署java程序(六、项目部署实战)
在第五篇,我们学习了静态前端的部署,那么今天我们来学习一下后端的部署。
后端框架架构
bladex-boot[项目]
doc[目录]
src[目录]
main[目录]
java[目录]
org.springblade[目录]
common[目录]
flow[目录]
modules[目录]
auth[目录]
desk[目录]
develop[目录]
resource[目录]
system[目录]
Application[文件]
resources[目录]
test[目录]
target[目录]
.editorconfig[文件]
.gitignore[文件]
BladeX-Boot.iml[文件]
Dockerfile[文件]
LICENSE[文件]
pom.xml[文件]
README.md[文件]
项目是基于maven的单体SpringBoot项目,通过根目录下的 pom.xml来加载项目以及项目依赖信息
从目录结构中可以看到业务代码集中在 modules 目录中。
resources 目录主要为了存储配置信息和静态资源
程序启动入口在Application[文件]
后端程序打包
IDE采用的是JetBeans出品的IDEA
打包方法:
在maven面板中,看到类似以下的界面
BladeX-Boot
Lifecycle
clean
validate
compile
test
package
verify
install
site
deploy
一般执行 clean install 这两个命令就可以了
操作方法:
按住shift键,点击clean ,再点击install ,再点击右键,在弹出的选项中选择Run Maven Build 选项,默认为第一个选项。 IDEA会自动运行编译过程。编译完成后会显示输出路径,编译完成后的JAR包就在该路径下。
部署后端程序
部署后端程序时,需要注意
- 后端程序只提供接口,因此前端需要能访问到后端接口。 一般我们会通过nginx做反向代理来访问接口,配置类似下面代码:
server {
listen 80;
server_name a.test.com; # 替换为你的域名
index index.html index.htm;
# 对于其他请求,转发给应用服务器处理
location / {
root /opt/labsys/web;
index index.html index.htm;
}
location ^~/api {
#root /opt/;
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8082; # 假设后端端口为8082
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 错误页面处理
error_page 500 502 503 504 /50x.html;
}
- 程序启动时注意端口占用情况。
我们可以通过以下命令来确认端口是否被占用
netstat -ntlp |grep 端口号
端口号替换为你实际用的端口号,我们这里假设是8082
[root@hcss-ecs-5eee conf.d]# netstat -ntlp|grep 8082
tcp6 0 0 :::8082 :::* LISTEN 546636/java
这样我们就能知道是什么程序占用了端口。
解决办法有两种
-
如果在运行的程序比较重要,或者你没有十足的把握,确定可以关闭改端口,那么就把你的程序启动端口改一下,改成一个服务器没有被占用的端口。
-
如果这个程序不重要,那么完全可以杀掉占用端口的进程,再启动我们的程序。
启动后端程序
我们这里只介绍最简单的启动JAR包
最普通的启动方法是 java -jar jar包文件名
例如:
java -jar blog.jar
但是这里会有几个问题:
- 不是后台启动,很容易被关掉,或者停止掉
- 没有日志输出
那么解决这两个问题,我们需要将命令改造为
nohup java -jar blog.jar > blog.log 2>&1 &
为了便于操作,我们一般会写脚本去控制启动和关闭,我这里用了三个脚本 base.sh # 用于定义文件名 start.sh # 用于启动程序 stop.sh # 用于关闭程序
base.sh内容:
#!/bin/bash
FILE_NAME=blog.jar
start.sh内容:
#!/bin/bash
. base.sh
nohup java -jar ./$FILE_NAME > blog.log 2>&1 &
stop.sh内容
#!/bin/bash
. base.sh
tpid=`ps -ef|grep $FILE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ $tpid ]; then
echo 'stop service'
kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $FILE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ $tpid ]; then
echo 'kill service'
kill -9 tpid
else
echo 'stop success'
fi