利用Nginx进行前后端分离项目部署
首先需要这个项目,利用git去仓库克隆:
1 | git clone https://gitee.com/y_project/RuoYi-Vue.git |
然后我们就获得了这个项目,你可以看到,这个项目分为:
- ruoyi
- ruoyi-ui
这两个文件夹,一个是后端,一个是前端。
根据正常的操作使用说明,我们先使用idea打开这个项目,更改一下项目的目标地址。一般都是在application.yml 文件上:
比如你可以改localhost,或者是其他的ip地址,我就改了ip地址。
当然,如果你仅仅需要部署到单个服务器上,其他的都别管,直接使用maven打包就行了。
后端的打包和运行很简单,这里不多赘述了
开始准备
我这里准备了三台虚拟机:
- 192.168.78.128
- 192.168.78.129
- 192.168.78.130
第二台和第三台虚拟机都是部署后端的jar包,我们准备使用Nginx进行负载均衡,这里我后端的数据库是连接前端的128的ip,因为只有同一个数据库才好进行负载均衡。
首先需要在128部署好docker,docker下安装好MySQL和Redis。
启动docker镜像,启动两个后端,紧接着我们来到前端进行部署。
安装Nodejs和Nginx
NodeJs
我这⾥下载的是 node-v12.16.3-linux-x64.tar.xz 安装包,并将其直接放在了 root ⽬录下。
1、在 /usr/local/ 下创建 node ⽂件夹并进⼊:
1 | cd /usr/local/ |
2、将 Node 的安装包解压到 /usr/local/node 中即可
1 | [root@localhost node]# tar -xJvf /root/node-v12.16.3-linux-x64.tar.xz |
解压完之后, /usr/local/node ⽬录中会出现⼀个 node-v12.16.3-linux-x64 的⽬录
配置NODE系统环境变量
编辑 ~/.bash_profile ⽂件,在⽂件末尾追加如下信息:
1 | Nodejs |
刷新环境变量,使之⽣效即可:
1 | source ~/.bash_profile |
检查安装结果
1 | node -v |
Nginx
这⾥下载的是 nginx-1.17.10.tar.gz 安装包,并将其直接放在了 root ⽬录下
1、在 /usr/local/ 下创建 nginx ⽂件夹并进⼊:
1 | cd /usr/local/ |
2、将 Nginx 安装包解压到 /usr/local/nginx 中即可:
1 | [root@localhost nginx]# tar zxvf /root/nginx-1.17.10.tar.gz -C ./ |
解压完之后, /usr/local/nginx ⽬录中会出现⼀个 nginx-1.17.10 的⽬录
预先安装额外的依赖
1 | yum -y install pcre-devel |
编译安装NGINX
1 | cd nginx-1.17.10 |
安装完成后,Nginx的可执⾏⽂件位置位于
1 | /usr/local/nginx/sbin/nginx |
启动NGINX
直接执⾏如下命令即可:
1 | [root@localhost sbin]# /usr/local/nginx/sbin/nginx |
如果想停⽌Nginx服务,可执⾏:
1 | /usr/local/nginx/sbin/nginx -s stop |
如果修改了配置⽂件后想重新加载Nginx,可执⾏:
1 | /usr/local/nginx/sbin/nginx -s reload |
注意其配置⽂件位于:
1 | /usr/local/nginx/conf/nginx.conf |
部署前端
把ruoyi-ui放在:
1 | /root/workspace/ruoyi-ui/ |
文件夹下,并使用:
1 | npm install --unsafe-perm --registry=https:registry.npm.taobao.org |
–unsafe-perm:是为了更高的权限
–registry=https:registry.npm.taobao.org:拥有更快的镜像源
然后等待执行完毕。
执行完毕后,可以看到多了一个node模块。
接着输入:
1 | npm run build:prod |
开始建立,建立完成后,可以看到多了一个dist文件夹,这表示我们基本完成了环境的构建。
使用Nginx代理服务器完成部署
打开配置文件:
1 | /usr/local/nginx/conf/nginx.conf |
把最上的user注释改为:
1 | user root; |
以此获得最大的权限。
接着,定位到:location /,并将其改为:
1 | location / { |
如果页面发生了404错误,那么可以在这里修改为:
1 | location / { |
这句话的意思是,当访问uri没有的时候 尝试访问 index.html 由于vue是单页模式,所以入口都是index.html 无论访问什么连接都由vue本身接管
可以看到的是,这里的root路径,就是我们的前端路径。
启动nginx,然后我们可以打开节点:192.168.78.128
我们却发现,它出现了一点错误(暂时无图)
这个错误是地址引用错误,在验证码这个url错误,原因是正确的地址是:192.168.78.128/prod-api/xxxx
这表示,我们遗失了 prod-api 这个路径,那怎么办呢?
我们回到Nginx配置文件,添加一项:
1 | location /prod-api/ { |
/usr/local/nginx/sbin/nginx -s reload ,重启Nginx,便可以了。
这里的前四段是标准写法,不用太多思考,最后的一段才是真正后端地址
负载均衡
需要在任意一个位置加上upstream:
1 | upstream ruoyi{ |
并且把location /prod-api/ ,改为:
1 |
|
/usr/local/nginx/sbin/nginx -s reload,重启Nginx,这样Nginx便会自动的实现负载均衡。