一、部署架构
二、环境
| 服务器 | 软件 | 名称 |
|---|---|---|
| 192.168.138.100 | Nginx(部署前端项目、配置反向代理),MySQL(主从复制的主库) | 服务器A |
| 192.168.138.101 | JDK1.8、Git、Maven、jar(项目jar包基于内嵌Tomcat运行)、MySQL(主从复制的从库) | 服务器B |
| 172.17.2.94 | Redis(缓存中间件) | 服务器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目录,通过后台启动项目,并将项目日志输入到对应的日志文件。