前后端分离项目部署

311 阅读3分钟

一、部署架构

image.png

二、环境

服务器软件名称
192.168.138.100Nginx(部署前端项目、配置反向代理),MySQL(主从复制的主库)服务器A
192.168.138.101JDK1.8、Git、Maven、jar(项目jar包基于内嵌Tomcat运行)、MySQL(主从复制的从库)服务器B
172.17.2.94Redis(缓存中间件)服务器C

三、前端部署

1.将前端项目打包,放到Linux系统/usr/local/nginx/html目录下,命名为dist
2.修改Nginx配置文件nginx.conf,将原有的监听80, 82, 8080端口号 的虚拟主机注释掉,引入如下的配置信息:

     server {
        listen       80;
        server_name  localhost;

        location / {
            root   html/dist; #配置静态资源加载目录为:/html/dist
            index  index.html;
        }
		
	location ^~ /api/ {
            rewrite ^/api/(.*)$ /$1 break;
            proxy_pass http://192.168.138.101:8080;
	}
		
        location = /50x.html {
            root   html;
        }
    }
3.通过nginx访问前端工程


配置解析:

1.路径重写
    location ^~ /api/ {
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass http://192.168.138.101:8080;
    }
    这一段配置代表,如果请求当前nginx,并且请求的路径如果是 /api/ 开头,将会被该location处理。
    而在该location中,主要配置了两块儿信息: rewrite(url重写) 和 proxy_pass(反向代理)。

rewrite ^/api/(.*)$ /$1 break;

    代表如果请求路径是以 `/api/` 开头,后面的请求路径任意,此时将原始的url路径重写为 `/$1`,
    这里的`$1`指代的就是通配符 .* 这一块的内容。
    
2.反向代理
    proxy_pass http://192.168.138.101:8080;
    路径重写后的请求,将会转发到后端的 <http://192.168.138.101:8080> 服务器中。
    这台服务器中,就部署的是我们的后端服务。

四、服务端部署

1. 在服务器中安装jdk、git、maven、MySQL,使用git clone命令将git远程仓库的代码克隆下来,命令如下:
    #创建java代码存放目录
    mkdir -p /usr/local/javaapp

    #切换目录
    cd /usr/local/javaapp
    
    #克隆代码 , 需要使用自己的远程仓库
    git clone https://gitee.com/Fate_To/reggie_take_out.git
    
2.将资料中提供的脚本文件上传到服务器B,通过chmod命令设置执行权限
        chmod 777 xxx.sh
3.执行脚本文件,自动部署项目
4.访问系统测试


脚本文件

注意:如果项目中有文件存储的功能,需要将文件存储目录修改为Linux系统中的目录。
修改完成后,记得Push到远程仓库,在Linux中重新拉取最新代码。

脚本文件

#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================

echo 停止原来运行中的工程
APP_NAME=项目名称

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

echo 准备从Git仓库拉取最新代码
cd /usr/local/javaapp/reggie_take_out

echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成

echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`

cd target

echo 启动项目
nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> reggie_take_out.log &
echo 项目启动完成

脚本代码的意思是:

1. 先检查项目是否启动,如果启动,停止项目,如果无法正常停止,通过kill命令强行停止项目。
2. cd到项目中,通过git pull拉取最新代码,并打包项目。
3. 打包完毕后,进入target目录,通过后台启动项目,并将项目日志输入到对应的日志文件。