机器规划
|
主机 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) 一台。




