前言

羊哥的服务器部署项目是在太精彩、所以这里记录一下部署过程方便以后温习,首先是视频教程

机器准备

首先我们要准备三台虚拟机,这里为了演示方便我们分别把他们叫做一号机二号机三号机,需要注意的是虚拟机的环境需要提前安装才可以,首先得话得有虚拟机的安装(注意硬盘大小最少要30g以上,血的教训)

以及咱们机器环境的安装在羊哥的pdf里面已经介绍的无比详细,直接照着配置即可PDF版地址我这里配置的三台ip分别为192.168.1.103192.168.1.104192.168.1.105

第一台机子需要安装好mysql数据库、redis和nginx以及nodejs,因为第一台机器我们用来部署前端项目和数据库,后面两台只需要maven的环境就可以了(建议先在一台把该有的环境全都部署上然后克隆用dhclient修改ip地址即可)

使用的项目以及配置

这里使用的项目是RuoYi-Vue,注意这里我们演示的是2.3版本的

然后我们在idea中打开后端项目

下面需要先修改必要的配置

主数据库配置

上面已经说了,我们的数据库放在第一台机器上,所以首先修改配置如下,这里需要注意的是把useSSL=true改成false(搞了好久才发现)

看到后面的数据库是ry-vue 所以我们先创建这个数据库

我这里使用的是Dbeaver大家使用别的navicat什么的也都行然后 运行sql脚本(脚本文件在项目根路径下的sql文件夹下)即可得到所有的数据库表

redis配置

applicayion.yml文件中修改我们的主机地址、端口以及redis数据库的密码,这里需要我们提前在一号机上安装好redis哦

日志配置

日志这边就没什么好配置的 主要就是修改存放路径(这里是为了在本地先跑起来后面部署了改到一号机的路径当然不改也可以) 以及所有的输出我们都设置一下编码格式 防止出现乱码 上面这些配置好之后就可以本地启动了

前端项目的话不需要任何配置 上面的修改完毕就可以在本地跑起来了

PS:这里需要注意 如果redis或者主数据库不通我们最好先用telnet看一下服务器端口是不是对外开放 这里可以设置对外开放的端口 下面的配置可能会经常用到这几条指令(先看一下是否放开 没放开的话指定放开端口并重载一下)

1
2
3
查看想开的端口是否已开:firewall-cmd --query-port=6379/tcp
添加指定需要开放的端口:firewall-cmd --add-port=6379/tcp --permanent
重载入添加的端口:firewall-cmd --reload

前端项目打包部署

首先把我们的前端项目压缩一下

然后拖到我们的workspace文件夹(需要新建)下,在workspace下解压得到文件夹unzip ruoyi-ui.zip

rm -rf ruoyi-ui.zip这里我们可以把压缩包删掉,并进入到ruoyi-ui文件夹下

然后输入npm install --unsafe-perm --registry=https://registry.npm.taobao.org进行前端依赖的下载

最后npm run build:prod进行生产环境的打包,然后可以看到打包生成的dist

打包到这里就完成了,最后只剩下部署这里我们用nginx进行部署(需要提前安好nginx环境)

首先我们要修改nginx的配置文件在/usr/local/nginx/conf下的nginx.conf

根目录配置为我们前端项目打包的dist路径

以及用户设为root防止出现403等权限问题 然后在/usr/local/nginx/sbin目录下启动nginx即可

启动命令:./nginx

可以看到启动成功了

后端项目打包部署

这里我们直接拖过来就行,2和3都放上去,然后来到ruoyi目录下

jar包方式

我们知道springboot项目都是内嵌Tomcat的 所以我们不用tomcat直接打jar包也是可以的,只需要一条指令mvn package即可打包完成,前提是得安装好咱们的maven环境,打包完成之后把target目录下的jar包放到上一层中进行保存

部署的话直接用nohup java -jar ruoyi.jar & 我们可以使用指令

看一下运行的进程 可以看到确实有进程在运行 但是这时候前端页面还没有跟后端关联起来 还需要进行相应的配置

这里我们可以看到他请求的url 所以这时候还需要加上一号机的nginx代理,在location为/的下方新增一个

1
2
3
4
5
6
7
8
 location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.104:8080/;
}

这里我先部署的是我刚才启动的二号机的地址,这里根据你实际的地址进行改动,注意这里第二台实例8080端口一定要对外开放

可以看到验证码出现 也可以正常的登陆了

war包方式

在打war包之前,我们需要对代码进行一些修改

首先肯定是打包方式改为war

然后是加上这个依赖他表示的含义是在编译测试的时候会用内嵌的tomcat但是发布的时候会将其剔除

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

最后是我们需要在定义一个启动类,因为默认的启动类用的是内嵌的tomcat

1
2
3
4
5
6
public class RuoYiApplicationWar extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(RuoYiApplication.class);
}
}

修改完之后我们也要把服务器上的pom.xml和新添加的启动类加上才可以,记得两台服务器都要替换加上!

然后就可以进行打包了,首先到ruoyi这个文件夹下进行mvn clean把target打包内容清除掉 再使用mvn package打包 可以看到这次打出来的就是war包了

同样 我们也在上一层进行备份 到这里我们需要的jar包war包 都已经操作完毕 下面可以正式进行部署

上面我们使用了jar包的方式在二号机成功调通,下面使用war包的方式进行部署,首先关闭我们刚才jar包启动的实例

来到我们的tomcat文件夹下cd /usr/local/tomcat/apache-tomcat-8.5.55

把打包完成的war包扔到webapps文件夹下 我们这里可以选择用指令(在webapps目录下)拷过来cp /root/workspace/ruoyi/ruoyi.war ./

然后启动tomcat即可(在bin目录下)sh startup.sh

但是这时候我们发现需要加上后缀/ruoyi

才可以正常访问,所以这里需要修改一下tomcat的文件,目录是在/usr/local/tomcat/apache-tomcat-8.5.55/conf下的server.xml<Context path="/" docBase="/usr/local/tomcat/apache-tomcat-8.5.55/webapps/ruoyi" reloadable="false"/>加到如图所示位置 意思也很明了就是在根目录下访问后面的资源

重新启动一下服务器 可以看到确实有效果了

集群部署

我们把三号机也跟二号机做一样的配置 确保他可以正常打开

然后就可以用到我们的nginx做负载均衡了,还要回到一号机,修改nginx.conf,在server上新增一个upstream

1
2
3
4
upstream ruoyi{
server 192.168.1.104:8080 weight=5;
server 192.168.1.105:8080 weight=3;
}

以及转发的地址为刚才的ruoyi,然后reload一下nginx就可以啦/usr/local/nginx/sbin/nginx -s reload

ok 到这里所有的配置就大功告成了 有了这次的实操以后的服务器部署也都是大差不差了 感谢羊哥!!