双机部署若依 (RuoYi‑Vue) 传统环境部署---实战

机器规划

|-----------|--------------------------------------------|
| 主机 IP | 承担服务 |
| 10.8.0.28 | 前端 Nginx + SpringBoot 后端 (ruoyi‑admin) |
| 10.8.0.29 | MySQL5.7 + Redis5.x 数据库缓存服务 |

架构数据流:浏览器 → 10.8.0.28 (Nginx80 端口) → 本机 SpringBoot 8080 → 跨网络访问 10.8.0.29 的 MySQL (3306)、Redis (6379)

注意:两台机器网络互通,防火墙放行端口:

  • 10.8.0.28:放行 80、8080
  • 10.8.0.29:放行 3306、6379 端口,允许 10.8.0.28 访问数据库缓存

整体分工:

1. 10.8.0.29:部署 MySQL5.7、Redis5.x,创建库、授权远程账号

2. 10.8.0.28:部署 JDK8、Maven3.6.3、Node12、Git、Nginx;拉取源码、修改配置指向 10.8.0.29 数据库;前端后端打包;后端 jar 启动;Nginx 部署 dist 静态资源 + 反向代理

一、操作 10.8.0.29(数据库缓存服务器)

1. 安装基础依赖源

复制代码
yum install -y epel-release
yum install -y wget vim net-tools unzip lrzsz gcc gcc-c++ make

2. 安装 MySQL5.7

复制代码
# 1. 导入 MySQL5.7 的 yum 源rpm包
rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 2. 【重要】导入GPG密钥(不然会报gpg校验失败,这是5.7常见坑)
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 3. 安装mysql5.7服务端
yum install -y mysql-community-server
# 4. 启动 + 设置开机自启
systemctl start mysqld
systemctl enable mysqld

获取初始密码

复制代码
grep 'temporary password' /var/log/mysqld.log

登录 mysql,修改 root 密码,并开放 10.8.0.28 远程访问权限

复制代码
mysql -uroot -p
复制代码
--修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@123456';
--允许10.8.0.28这台主机使用root访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.8.0.28' IDENTIFIED BY 'Root@123456';
FLUSH PRIVILEGES;
--创建若依数据库
create database `ry-vue` default character set utf8mb4 collate utf8mb4_general_ci;
exit;

注:数据库名 ry-vue 里面包含横杠 -,属于特殊字符,MySQL 不能直接用单引号 ' ' 包裹,要用反引号 ``(键盘 ESC 下面那个按键)包裹标识符。

⚠️防火墙放行 3306

复制代码
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

3. 安装 Redis5.x,允许远程访问

yum 方式安装 redis

复制代码
yum install -y redis
systemctl enable redis

修改 redis 配置:vim /etc/redis.conf

复制代码
bind 0.0.0.0     #注释原来bind 127.0.0.1,监听全部网卡
protected-mode no #关闭保护模式
port 6379
daemonize yes

启动 redis

复制代码
systemctl start redis
redis-cli ping
#返回PONG代表正常

防火墙放行 6379 端口

复制代码
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload

测试:在 10.8.0.28 执行下面命令确认连通性(等10.8.0.29部署完成后测试)

复制代码
mysql -h10.8.0.28 -uroot -pRoot@123456
redis-cli -h 10.8.0.29 ping

⚠️数据库初始化 SQL 脚本不在 29 机器执行!SQL 脚本放在 10.8.0.28 源码目录,远程导入到 10.8.0.29 的 ry‑vue 库。

二、操作 10.8.0.28(应用服务器:Nginx+SpringBoot)

1. 安装基础环境工具

复制代码
yum install -y epel-release
yum install -y wget vim net-tools unzip lrzsz gcc gcc-c++ make
1.1 Git
复制代码
yum install -y git
git --version
1.2 JDK8
复制代码
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version
1.3 Maven3.6.3
复制代码
tar -zxvf apache-maven-3.6.3.tar.gz -C /usr/local/

vim /etc/profile

#追加

export MAVEN_HOME=/usr/local/apache-maven-3.6.3

export PATH=MAVEN_HOME/bin:PATH

source /etc/profile

mvn -version

1.4 Node.js12
复制代码
curl -fsSL https://rpm.nodesource.com/setup_12.x | bash -
yum install -y nodejs
node -v
npm -v
1.5 Nginx
复制代码
yum install -y nginx
nginx -v
systemctl enable nginx
#防火墙放行80、8080端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

2. 拉取若依源码

复制代码
cd /opt
git clone https://gitee.com/humajun/ruoyi.git
cd /opt/ruoyi/RuoYi-Vue
#克隆的这个是 RuoYi-Vue 前后端分离版,
#前端目录名字不是 RuoYi-Vue,是 ruoyi-ui,
#所以 cd /opt/ruoyi/RuoYi-Vue 报错找不到目录。

3. 修改后端配置【关键点!数据库、redis 指向 10.8.0.29】

① 修改 druid 数据库配置

vim ruoyi-admin/src/main/resources/application-druid.yml

复制代码
url: jdbc:mysql://10.8.0.29:3306/ry-vue?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
username: root
password: Root@123456
② 修改 application.yml redis 配置

vim ruoyi-admin/src/main/resources/application.yml

复制代码
redis:
  host: 10.8.0.29
  port: 6379
  password:

注:设置密码后,在10.8.0.29上

vim /etc/redis.conf

取消注释,改好统一密码

4. 远程导入 SQL 脚本到 10.8.0.29 的 MySQL

在 10.8.0.28 机器执行,远程把 sql 推送到 10.8.0.29 数据库

在 10.8.0.28 执行:

复制代码
yum install -y mysql

装好之后,再执行导入命令:

复制代码
cd /opt/ruoyi/sql
mysql -h10.8.0.29 -uroot -pRoot@123456 ry-vue < ry_202xxxx.sql

确认:登录 10.8.0.29 mysql 查看 ry‑vue 库是否生成表。

去 10.8.0.29 验证(确认表有没有导入进去)

在 10.8.0.29 机器执行:

复制代码
mysql -uroot -pRoot@123456

然后 mysql 内执行:

复制代码
use ry-vue;
show tables;

如果能看到一堆系统表(sys_user、sys_menu......),代表导入完成。

5. 前端打包

复制代码
cd /opt/ruoyi/RuoYi-Vue/ruoyi-ui
npm install --registry=https://registry.npmmirror.com
npm run build:prod

打包产物路径:/opt/ruoyi/ruoyi-ui/dist

6. 后端 Maven 打包

复制代码
cd /opt/ruoyi
mvn clean package -DskipTests

jar 包产物路径:ruoyi-admin/target/ruoyi-admin.jar

7. 启动 SpringBoot 后端服务(10.8.0.28 本机运行 8080 端口)

复制代码
cd /opt/ruoyi/ruoyi-admin/target
#后台启动
nohup java -jar ruoyi-admin.jar > /opt/ruoyi/ruoyi.log 2>&1 &

#查看日志
tail -f /opt/ruoyi/ruoyi.log
#查看端口监听
netstat -ntlp |grep 8080

8.Nginx 部署前端静态资源 + 反向代理配置

1)复制 dist 静态文件到 nginx 站点目录

复制代码
rm -rf /usr/share/nginx/html/*
cp -r /opt/ruoyi/ruoyi-ui/dist/* /usr/share/nginx/html/

2)编写若依 nginx 配置文件,新建/etc/nginx/conf.d/ruoyi.conf

复制代码
server {
    listen 80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    location /prod-api/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    location /websocket/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 60s;
    }
}

3)检查 nginx 语法并重启

复制代码
nginx -t
systemctl restart nginx

三、访问验证

浏览器访问 http://10.8.0.28,输入默认账号密码登录。

双机完整链路梳理

浏览器 → 10.8.0.28:80(Nginx)

  静态页面直接读取本机 dist 资源

  API 请求 /prod-api/ → 转发给本机 SpringBoot 127.0.0.1:8080

  SpringBoot 后端跨机器访问 10.8.0.29:3306 MySQL、10.8.0.29:6379 Redis

四、常见故障排查点

1、10.8.0.28 访问不了 10.8.0.29 数据库:检查防火墙、MySQL 授权账号 host 是否为10.8.0.28,bind 地址;

2、后端启动报错连不上 redis:确认 redis bind 0.0.0.0,关闭保护模式;

3、Nginx 页面空白,接口 404:确认proxy_pass后端地址是本机 127.0.0.1:8080,不要写 10.8.0.29;

4、前端打包失败:使用淘宝镜像npm install --registry=https://registry.npmmirror.com。

5、出现502报错:

第 1 步:先检查后端是否正常启动(最高概率问题)

复制代码
# 查看8080端口有没有监听
ss -lntp | grep 8080
# 或者
netstat -ntlp | grep 8080

✅ 有输出:后端进程存在,继续往下查

❌ 没有任何输出:jar 包没起来 / 启动报错退出了

复制代码
# 看后端日志,找报错!
tail -f /opt/ruoyi/ruoyi.log

常见启动失败原因:

连不上 10.8.0.29 的 MySQL/Redis(账号密码错、防火墙、授权不对)

数据库没导入 SQL,库不存在

8080 端口被别的程序占用

yml 配置缩进写错(yaml 对空格非常敏感)

第 2 步:本机直接 curl 测试后端,绕开 Nginx

在 10.8.0.28 执行:

复制代码
curl http://127.0.0.1:8080/

✅ 有返回:后端服务本身正常 → 问题在 Nginx 配置

❌ Connection refused:后端没启动,回到第一步看日志

第 3 步:检查 Nginx 错误日志

复制代码
tail -n 50 /var/log/nginx/error.log

日志关键字对照:

connect() failed (111: Connection refused) → 127.0.0.1:8080 没服务(后端挂了,最常见)

connect() failed (113: No route to host) → 网络不通(本案例一般不会)

第 4 步:核对 nginx 配置 /etc/nginx/conf.d/ruoyi.conf

你之前给的配置,重点看 /prod-api/

复制代码
location /prod-api/ {
    proxy_pass http://127.0.0.1:8080/;
    # 注意!末尾这个 / 不能漏!
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

⚠️坑:很多人写成 proxy_pass http://127.0.0.1:8080(末尾无斜杠)会路由异常

改完校验语法、重载:

复制代码
nginx -t
systemctl restart nginx

第 5 步:如果后端启动报错,单独检查跨机连通(10.8.0.28 → 10.8.0.29)

在 10.8.0.28 测试:

复制代码
# 测试mysql连通
mysql -h10.8.0.29 -uroot -pRoot@123456
# 测试redis连通
redis-cli -h 10.8.0.29 ping

mysql 连不上:检查 29 机防火墙 3306、mysql 授权语句是否是 'root'@'10.8.0.28'

redis ping 不通:检查 redis.conf bind 0.0.0.0、protected-mode no,放行 6379

第 6 步:快速重启整套后端(如果日志没明显报错,进程意外死掉)

复制代码
# 先杀掉旧的ruoyi进程
pkill -f ruoyi-admin.jar
# 重新后台启动
cd /opt/ruoyi/RuoYi-Vue/ruoyi-admin/target
nohup java -jar ruoyi-admin.jar > /opt/ruoyi/ruoyi.log 2>&1 &
# 等待10秒,再看端口
sleep 10
ss -lntp | grep 8080

结论:

就是 SELinux 阻止 Nginx 去访问 8080 端口,和我们刚才判断的一模一样。

直接执行这条放行命令(永久生效):

复制代码
setsebool -P httpd_can_network_connect 1

执行完重启 Nginx:

复制代码
systemctl restart nginx

然后刷新浏览器登录页面,验证码就出来、502 报错消失了。

拓展变体:也可以后端部署到 29,Nginx 部署 28。本流程采用更常用的:数据库缓存独立一台,应用 (Nginx+Springboot) 一台。

相关推荐
开开心心就好1 小时前
竖式除法出题工具,整除余数混合模式
运维·服务器·前端·javascript·ocr·perl·1024程序员节
updayday8542 小时前
客户附件不该发往旧邮箱,如何在发送前拦截 - Ping64 邮件安全管控
大数据·网络·数据库·安全·智能路由器
倔强的石头_2 小时前
连接异常排障手册:拒连、超时、认证失败、空闲断开
数据库
领麦微红外2 小时前
红外测温传感器 赋能充电桩热安全与运维智能化
运维·安全·产品经理·智能硬件
CQU_JIAKE2 小时前
10.30【A】
linux
Zevalin爱灰灰2 小时前
Linux入门第二部分(ARM裸机篇) 第一章 开发环境搭建与了解
linux·arm开发·嵌入式
lhbweilai2 小时前
QT(了解各个控件和布局)上
数据库·qt
夕除2 小时前
redis--resp
redis