目录

前言

整体架构

环境准备

创建 VPC + VSwitch

ECS(两台)

RDS

购买rds

创建数据库用户

​编辑

创建数据库

Redis

购买并创建redis

添加创建白名单

SLB

配置负载均衡器

日志收集器sls

​编辑数据迁移

后端 jar 包配置

前端迁移

高可用测试

部署SLS

创建弹性公网IP


前言

ECS(云服务器):相当于你的电脑主机,用来运行代码。需求中提到的 CentOS 7.9+ 是操作系统。对于新手,建议先从 1台 2核4G 的 ECS 开始尝试,跑通全流程后再考虑扩展为多台。
RDS(云数据库):相当于专业的数据保险柜。千万不要把数据库装在ECS上,必须单独购买 RDS MySQL 高可用版。这样即使服务器宕机,数据也不会丢。
Redis(缓存):相当于一个高速暂存区,用来提升系统响应速度。

用户访问时,只认 SLB 的公网 IP。SLB 会把请求分发给后面的 ECS。如果其中一台 ECS 突然死机了,SLB 会发现并自动把流量切给另一台健康的 ECS,用户完全感觉不到系统出过故障。

整体架构

[ 互联网用户 ] 
      │ (访问公网IP)
      ▼
[ SLB 负载均衡 ] ──── (交通指挥员,负责分发流量、剔除故障机器)
      │ (内网转发)
      ▼
[ ECS 云服务器 ] ──── (应用处理车间)
  ├── Nginx (前端) ─── 负责展示 Vue 静态页面
  └── Spring Boot (后端) ── 负责处理业务逻辑
      │ (通过内网通信,速度极快)
      ▼
[ 云数据库与缓存 ] ──── (独立的数据保险柜与高速暂存区)
  ├── RDS MySQL (高可用版) ── 专门存储数据
  └── Redis (标准版) ──── 专门做缓存

将本地 Docker 环境中的若依(RuoYi-Vue v3.8.9)迁移到阿里云 RDS MySQL 8.0,实现数据库云化管理。

环境准备

创建 VPC + VSwitch

ECS(两台)

推荐配置:2c,4g 

搭载系统:centos7.9

RDS

购买rds

注意设置中交换机要和下面的使用的交换机一致

使用版本为rds mysql 5.7

创建数据库用户

普通用户即可

创建数据库

授权给上一步创建的用户,给予访问此数据库的权限

Redis

购买并创建redis

使用版本6.0,可用区选择单可用区

添加创建白名单

图中示例ip为实验使用,0.0.0.0/0公网可以直接访问,生产环境不可以这么做!交换机与之前相同。

设置白名单后

SLB

选择和之前相同的交换机

配置负载均衡器

使用三次握手tcp,监听端口80,添加两台ecs服务器

日志收集器sls



数据迁移

从本地终端导出数据到桌面

远程登录ecs01和ecs02

找到导出到桌面的ry-vue-export.sql文件,上传到/opt下。

嚯嚯嚯还有ai耍哦!

# 在 ECS-1 和ECS-2 上安装 MySQL 客户端
yum install -y mysql
mkdir -p /opt/ruoyi/logs

# 在 ECS-1 上ECS-1 和ECS-2 上导入 RDS,rm-xxx.mysql.rds.aliyuncs.com是RDS MySql的内网地址
mysql -h rm-bp1r2ns5i5r06q548.mysql.rds.aliyuncs.com -u ruoyi -p ry-vue < /root/ry-vue-export.sql

# 验证
mysql -h rm-bp1r2ns5i5r06q548.mysql.rds.aliyuncs.com -u ruoyi -p ry-vue -e "SHOW TABLES;"
# 结果:30张表

后端 jar 包配置

# 在ECS01和ECS02上进行
# 安装 JDK 1.8
yum install -y java-1.8.0-openjdk
# 验证
java -version

上传ruoyi-admin.jar到/opt/ruoyi目录下

yaml配置文件

vim application-druid.yml

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            master:
                url: jdbc:mysql://rm-bp1r2ns5i5r06q548.mysql.rds.aliyuncs.com:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: ruoyi
                password: 你的RDS密码
            slave:
                enabled: false
                url:
                username:
                password:
            initialSize: 5
            minIdle: 10
            maxActive: 20
            maxWait: 60000
            connectTimeout: 30000
            socketTimeout: 60000
            timeBetweenEvictionRunsMillis: 60000
            minEvictableIdleTimeMillis: 300000
            maxEvictableIdleTimeMillis: 900000
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter:
                enabled: true
            statViewServlet:
                enabled: true
                allow:
                url-pattern: /druid/*
                login-username: ruoyi
                login-password: 123456
            filter:
                stat:
                    enabled: true
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true

vim application.yml

ruoyi:
  name: RuoYi
  version: 3.9.1
  copyrightYear: 2026
  profile: /opt/ruoyi/uploadPath
  addressEnabled: false
  captchaType: math

server:
  port: 8080
  servlet:
    context-path: /
  tomcat:
    uri-encoding: UTF-8
    accept-count: 1000
    threads:
      max: 800
      min-spare: 100

logging:
  level:
    com.ruoyi: debug
    org.springframework: warn

user:
  password:
    maxRetryCount: 5
    lockTime: 10

spring:
  messages:
    basename: i18n/messages
  profiles:
    active: druid
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 20MB
  devtools:
    restart:
      enabled: true
  redis:
    host: r-bp1vdxj9vfadxiidqd.redis.rds.aliyuncs.com
    port: 6379
    database: 0
    password: Root@123456
    timeout: 10s
    lettuce:
      pool:
        min-idle: 0
        max-idle: 8
        max-active: 8
        max-wait: -1ms
token:
  header: Authorization
  secret: abcdefghijklmnopqrstuvwxyz
  expireTime: 30

mybatis:
  typeAliasesPackage: com.ruoyi.**.domain
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  configLocation: classpath:mybatis/mybatis-config.xml

pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql

swagger:
  enabled: true
  pathMapping: /dev-api

referer:
  enabled: false
  allowed-domains: localhost,127.0.0.1,ruoyi.vip,www.ruoyi.vip

xss:
  enabled: true
  excludes: /system/notice
  urlPatterns: /system/*,/monitor/*,/tool/*

运行jar包

cd /opt/ruoyi

# 在ECS-1和ECS-2上运行 jar 包
java -jar ruoyi-admin.jar

# 一般来说在同一目录下yaml文件会覆盖jar包的错误IP,如果覆盖不了就强制执行下面这个操作
java -jar ruoyi-admin.jar --spring.datasource.druid.master.url="jdbc:mysql://rm-bp1r2ns5i5r06q548.mysql.rds.aliyuncs.com:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8" --spring.datasource.druid.master.username="ruoyi" --spring.datasource.druid.master.password="Root@123456" --spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

# 让后端在后台持续运行
nohup java -jar ruoyi-admin.jar > /opt/ruoyi/logs/ruoyi.log 2>&1 &
curl http://localhost:8080

前端迁移

找到dist文件并导出到桌面

# 在 ECS01 和 ECS02 上操作
cd /opt/ruoyi/ruoyi-ui

# 压缩 dist
zip -r dist.zip dist/

下载nginx

yum install -y nginx

# 启动 Nginx
systemctl start nginx
systemctl enable nginx

# 复制dist到nginx下
cp -r dist /usr/share/nginx/html/

# 验证
curl http://localhost:80

输出内容如下

配置nginx反向代理

cat > /etc/nginx/conf.d/ruoyi.conf << 'EOF'
server {
    listen 80;
    server_name _;
    
    root /usr/share/nginx/html/dist;
    index index.html index.htm;
    
    location / {
        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;
    }
}
EOF

# 测试配置
nginx -t

# 重启 Nginx
systemctl restart nginx

# 验证
在浏览器访问 SLB 公网 IP:http://120.26.253.116

高可用测试

slb负载均衡通过健康检查可在一台服务器吹西安问题可自动切换服务服务器。停止一台服务器验证功能正常。

再次访问

部署SLS

创建弹性公网IP

EIP 就是给服务器开通访问 SLS 公网域名的上网能力,日志才能发出去上报到 SLS

安装 Logtail

# 下载安装脚本
wget -T 10 -t 2 https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/linux64/logtail.sh -O logtail.sh

# 安装
bash logtail.sh install auto

# 启动 Logtail
/etc/init.d/ilogtaild start

# 查看状态
/etc/init.d/ilogtaild status

在sls控制台配置采集

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐