如何前后端分离进行项目部署
由于我们的服务器数量有限,就使用这三台服务器,具体的软件规划如下:
服务器 | 软件 | 名称 |
---|---|---|
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 |
对Redis、JDK、Git、Maven进行简单的安装及配置,这里我们就不再演示软件的安装了。
前端部署
1.将前端资源目录上传至Linux的/usr/local/nginx/html目录下
2.修改Nginx配置文件nginx.conf
server {
listen 80;
server_name localhost;
location / {
root html/dist;
index index.html;
}
location ^~ /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://192.168.138.101.80;
}
location = /50x.html {
root html;
}
}
3.通过nginx访问前端工程
就是安装Nginx的服务器,访问自己的ip地址
http://192.168.138.100
前端工程部署完成之后,我们可以正常的访问到系统的登录页面。
服务端部署
1). 在服务器B(192.168.138.101)中安装jdk、git、maven、MySQL,使用git clone命令将git远程仓库的代码克隆下来
#创建java代码存放目录
mkdir -p /usr/local/javaapp
#切换目录
cd /usr/local/javaapp
#克隆代码 , 需要使用自己的远程仓库
git clone https://xxxxxxxxxxxx
将资料中提供的reggieStart.sh文件上传到服务器B,通过chmod命令设置执行权限
chmod 777 reggieStart.sh
执行reggieStart.sh脚本文件,自动部署项目
脚本代码:
#!/bin/sh
echo =================================
echo 自动化部署脚本启动
echo =================================
echo 停止原来运行中的工程
APP_NAME=reggie_take_out
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 项目启动完成
执行完shell脚本之后,我们可以通过 ps -ef|grep java 指令,查看服务是否启动。
最后访问系统测试进行测试,就是部署后端项目的服务器
http://192.168.138.101/
图片展示问题处理
在上述的测试中,我们发现菜品的图片无法正常展示。原因是因为,在我们的配置文件中,图片信息依然是从 D:/img 中加载的,但是在Linux服务器中,是不存在D盘的。
1). 修改文件存储目录
将文件存储目录修改为:
reggie:
path: /usr/local/img/
修改完成之后,需要将变动的代码提交到本地仓库,并推送至远程仓库。
2). 执行shell脚本,进行自动化部署,和之前一样的步骤
3). 将本地的测试图片文件夹img(整个文件夹)上传到服务器B的/usr/local目录下
4).再次访问测试
http://192.168.138.101/