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包就在该路径下。

部署后端程序

部署后端程序时,需要注意

  1. 后端程序只提供接口,因此前端需要能访问到后端接口。 一般我们会通过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;
   
}

  1. 程序启动时注意端口占用情况。

我们可以通过以下命令来确认端口是否被占用

netstat -ntlp |grep 端口号

端口号替换为你实际用的端口号,我们这里假设是8082

[root@hcss-ecs-5eee conf.d]# netstat -ntlp|grep 8082
tcp6       0      0 :::8082                 :::*                    LISTEN      546636/java   

这样我们就能知道是什么程序占用了端口。

解决办法有两种

  1. 如果在运行的程序比较重要,或者你没有十足的把握,确定可以关闭改端口,那么就把你的程序启动端口改一下,改成一个服务器没有被占用的端口。

  2. 如果这个程序不重要,那么完全可以杀掉占用端口的进程,再启动我们的程序。

启动后端程序

我们这里只介绍最简单的启动JAR包

最普通的启动方法是 java -jar jar包文件名

例如:

java -jar blog.jar

但是这里会有几个问题:

  1. 不是后台启动,很容易被关掉,或者停止掉
  2. 没有日志输出

那么解决这两个问题,我们需要将命令改造为

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