news 2026/9/9 17:54:12

若依项目上云迁移实施文档(阿里云)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
若依项目上云迁移实施文档(阿里云)

目录

  1. 〇、迁移来源盘点
  2. 一、购买资源(具体配置)
  3. 二、网络与安全组(先做,省得后面连不上)
  4. 三、初始化 RDS(建账号、建库、导数据)
  5. 四、初始化 ECS1(装环境 + 部署前后端)
  6. 五、复制到 ECS2
  7. 六、配置 SLB
  8. 七、配置 SLS 日志(替代 ELK)
  9. 八、验收清单(5 条标准,逐条给出证据)
  10. 九、收尾

📌 摘要

本文档完整记录将本地 Docker 部署的若依系统(RuoYi-Vue 3.9.1)迁移至阿里云高可用架构的实施过程:两台 ECS 分别承载 Nginx 前端与 SpringBoot 后端,公网 CLB 提供负载均衡与 HTTP 健康检查,MySQL 5.7 整库迁移至 RDS,缓存切换云 Redis,ELK 日志方案由 SLS 替代(Logtail 采集、保留 30 天)。RDS 与云 Redis 仅内网可达,通过安全组与白名单实现最小授权,停止任意一台 ECS 业务不中断。

若依项目上云迁移实施文档(阿里云)

目的:把本地虚拟机 192.168.64.56 上 Docker 部署的若依(RuoYi-Vue 3.9.1)迁移到阿里云,

架构升级为:2 台 ECS + SLB 负载均衡 + RDS MySQL + 云 Redis + SLS 日志服务,全内网通信。

〇、迁移来源盘点

本地 192.168.64.56(CentOS 7.9,Docker 环境)上的若依栈:

组件本地现状迁移去向
前端 Nginx容器 ruoyi-web(nginx:1.25.3,宿主机 8888 端口)ECS 上 yum 安装 Nginx
后端容器 java.server(ruoyi-java 镜像,8080)ECS 上 java -jar 直接运行
MySQL容器 mysql.server(mysql:5.7,数据卷 /opt/mysql-data4)阿里云 RDS MySQL 5.7
Redis容器 redis.server(无密码,仅 18 个缓存键)阿里云云 Redis(缓存无需迁数据)
ELK容器 es/logstash/kibana/filebeat(已停)阿里云 SLS(Logtail 采集)
数据库库名 ry-vue(注意带横线),utf8mb4,30 张表,2 个用户整库导出→导入 RDS

四份物料我已从 .56 导出,放在 Mac 桌面若依上云迁移/物料/ 目录,直接用:

文件说明
ruoyi-admin.jar(85M)后端成品包(2026-08-20 构建,无需重新 mvn 打包)
dist/(7M)前端成品(已含 /prod-api 前缀,无需重新 npm build)
ry-vue-mysql57.sql(62K)全库导出(30 张表,已去掉建库语句,专供 RDS 导入)
application-cloud.yml云上外置配置模板(连 RDS/云 Redis,替换占位符即可)
nginx.confECS 上 Nginx 的完整配置(前端 + /prod-api 反代 8080)
start-ruoyi.sh后端启动脚本
ruoyi-backend.servicesystemd 开机自启服务文件

核心思路(记这一句):jar 和 dist 都是现成的,不在云上重新编译;数据库/Redis 地址用外置 application-cloud.yml 覆盖(Spring 的 cloud profile 优先级高于 jar 内配置),所以 jar 一个字节都不用改。

图 1

图 2

一、购买资源(具体配置)

总原则:同一地域(推荐华东1-杭州)、同一 VPC、全部按量付费(做完就释放省钱)。

打开阿里云官网,在搜索框里输入ecs

图 3

图 4

图 5

1.1 两台 ECS

控制台 → 云服务器 ECS → 创建实例,买 2 台(可以先买 1 台,配置好后再"更换系统盘/复制配置",但实验直接买 2 台最省事):

配置项选择
计费模式按量付费
地域华东 1(杭州)⭐ 所有资源必须同地域
可用区随机/任意(讲究高可用可两台分属两个可用区)
实例规格2 vCPU / 4 GiB(如 ecs.e-c1m2.large 或 ecs.s6-c1m2.large,经济型即可)
镜像CentOS 7.9 64 位
系统盘40 GiB,高效云盘/ESSD
带宽分配公网 IPv4,按使用流量,峰值 5 Mbps(仅为传输文件用,正式流量走 SLB)
安全组新建,名字 ruoyi-sg(规则见第二节)
登录凭证自定义密码(记牢,下面用 <root 密码 > 代称)

图 6

点击立即购买

图 7

按量付费对于实验来说比较便宜。

图 8

图 9

这里的话我们创建一个专有网络

图 10

图 11

图 12

图 13

图 14

图 15

图 16

图 17

图 18

没有密钥对的创建一个

图 19

图 20

图 21

图 22

图 23

图 24

图 25

图 26

图 27

图 28

图 29

图 30

1.2 RDS MySQL(内网)

控制台 → 云数据库 RDS → 创建实例:

配置项选择
计费按量付费
地域/可用区华东 1(杭州),与 ECS 相同 VPC
数据库类型/版本MySQL 5.7(与本地 5.7 对齐)
系列基础系列(实验够用;预算够选高可用系列更符合"生产"话术)
规格通用型 1 核 2 GiB(入门最小规格)
存储20 GiB ESSD
网络VPC 内网(不放公网 IP)

兜底:若控制台里 MySQL 5.7 已停售/无货,直接选 MySQL 8.0 基础系列,其余配置不变——若依 3.9.1 的数据库驱动兼容 8.0,后面导入和连接步骤完全一样。

图 31

图 32

图 33

图 34

图 35

图 36

因为是实验环境目的主要是做实验,所以选个最便宜的就行了,我这个P L零最便宜,所以选这个

图 37

图 38

图 39

图 40

1.3 云 Redis(内网)

控制台 → 云数据库 Redis 版 → 创建实例:

配置项选择
计费按量付费
地域华东 1(杭州),同 VPC
版本Redis 6.0(社区版),兼容性没问题
架构/规格标准版(主从),1 GiB
网络VPC 内网
密码创建时设置(记牢,下面用 < 云 Redis 密码 > 代称)

图 41

图 42

图 43

图 44

图 45

图 46

图 47

图 48

1.4 SLB 负载均衡

控制台 → 负载均衡 CLB → 创建实例:

配置项选择
计费按量付费
地域华东 1(杭州)
实例类型公网(会自动分配一个公网 IP,即用户访问入口 <SLB 公网 IP>)
规格性能保障型 slb.s1.small(最小规格)

图 49

图 50

图 51

图 52

图 53

图 54

图 55

图 56

1.5 SLS 日志服务

控制台 → 日志服务 SLS:

费用预估(按量,做完即释放)

全部按量计费:做完立刻释放的话一般就几块钱(大头是少量流量费);挂着不管一天约 30~60 元。部署完成后记得把资源全部释放,尤其 RDS/Redis 按量计费挂着就扣钱。

图 57

图 58

图 59

图 60

图 61

图 62

然后点击进入控制台

图 63

图 64

图 65

图 66

点击创建logstore

点这个进去,

图 67

图 68

图 69

图 70

图 71

点这个➕可以创建logstore

二、网络与安全组(先做,省得后面连不上)

2.1 ECS 安全组 ruoyi-sg(两台 ECS 都用这个)

入方向规则:

协议端口授权对象说明
TCP22你 Mac 的公网 IP/32(查询:百度搜"我的IP")SSH 运维,别开 0.0.0.0/0
TCP800.0.0.0/0给 SLB 转发 + 健康检查
TCP4430.0.0.0/0预留 HTTPS
TCP8080VPC 网段(如 172.16.0.0/12,控制台能选)后端仅内网可访问

图 72

图 73

图 74

这个加一条80和443

图 75

图 76

图 77

图 78

2.2 RDS 白名单

RDS 实例详情 → 白名单与安全组 → 白名单设置 → default 分组:添加两台 ECS 的内网 IP(精确到 /32 两条)。购买时选择“加入白名单:是”的,default 分组已自动包含 VPC 网段。

不申请外网地址——这就是"数据库无公网"的验收点。

图 79

图 80

2.3 云 Redis 白名单

同样操作:白名单加两台 ECS 内网 IP,不开外网。

购买完在 ECS 控制台记下:<ECS1公网IP>、<ECS1内网IP>、<ECS2公网IP>、<ECS2内网IP>,以及 RDS/Redis 控制台里的内网连接地址 <RDS内网地址>(形如 rm-xxxxx.mysql.rds.aliyuncs.com)、<云Redis内网地址>(形如 r-xxxxx.redis.rds.aliyuncs.com)。下文占位符都换成这些值。

图 81

这个就算好了

图 82

三、初始化 RDS(建账号、建库、导数据)

兜底:若控制台建库时不接受带横线的库名,在 ECS1 装好 mysql 客户端后用命令建(高权限账号有权限):

图 83

图 84

图 85

图 86

图 87

mysql -h <RDS内网地址> -u ruoyi -p'你的RDS密码' -e "CREATE DATABASE \`ry-vue\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"

# 在 Mac 上:把 SQL 传到 ECS1

cd ~/Desktop/若依上云迁移/物料 scp ry-vue-mysql57.sql root@<ECS1公网IP>:/root/

# 在 ECS1 上:导入 RDS

mysql -h <RDS内网地址> -u ruoyi -p'RDS账号密码' ry-vue < /root/ry-vue-mysql57.sql

# 验证:30 张表、2 个用户

mysql -h <RDS内网地址> -u ruoyi -p'RDS账号密码' -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='ry-vue'; SELECT user_name FROM \`ry-vue\`.sys_user;"

四、初始化 ECS1(装环境 + 部署前后端)

SSH 登录:ssh root@<ECS1公网IP>

密钥对登陆也行

ssh -i 密钥地址 root@ip

# 1. 第一次用先改权限(只需一次)

chmod 400 ~/Desktop/test1.pem

# 2. 登录 ECS(IP 换成你的公网 IP)

ssh -i ~/Desktop/test1.pem root@<ECS公网IP>

图 88

4.1 装基础软件

# 关掉系统防火墙(端口管控交给安全组,避免双重拦截)

systemctl stop firewalld && systemctl disable firewalld

# Nginx + JDK8 + mysql 客户端

yum install -y epel-release yum install -y nginx java-1.8.0-openjdk java-1.8.0-openjdk-devel mariadb vim wget systemctl enable nginx

# 关键:允许 Nginx 反代后端 8080(本地部署时踩过 SELinux 这个坑)

setsebool -P httpd_can_network_connect 1

万一 yum 报源错误(CentOS 7 已停止官方维护),换阿里云源再装:curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && yum clean all && yum makecache

图 89

图 90

图 91

图 92

4.2 建目录、传文件

mkdir -p /opt/ruoyi/logs /usr/share/nginx/html

在 Mac 上传物料(两条都执行):

cd ~/Desktop/若依上云迁移/物料

# 后端 jar + 配置文件

scp -i ~/Desktop/test1.pem ruoyi-admin.jar application-cloud.yml start-ruoyi.sh ruoyi-backend.service nginx.conf root@<ECS1公网IP>:/opt/ruoyi/ scp -r dist root@<ECS1公网IP>:/opt/ruoyi/

图 93

图 94

图 95

图 96

图 97

4.3 改外置配置(整个迁移唯一要动脑的一步)

在 ECS1 上编辑 /opt/ruoyi/application-cloud.yml,把 4 个占位符换成真实值:

<RDS内网地址>、<RDS账号密码>、<云Redis内网地址>、<云Redis密码>。

顺便把文件末尾加一行(原配置里上传路径是 Windows 风格的 D:/ 盘符,云上改成 Linux 路径):

ruoyi:

profile: /opt/ruoyi/uploadPath

图 98

图 99

图 100

图 101

4.4 部署前端 + Nginx

rm -rf /usr/share/nginx/html/* cp -r /opt/ruoyi/dist/* /usr/share/nginx/html/ cp /opt/ruoyi/nginx.conf /etc/nginx/nginx.conf nginx -t && systemctl restart nginx

(物料里的 nginx.conf 内容:location / 指向 /usr/share/nginx/html,location /prod-api/ 反代 http://127.0.0.1:8080/——即 Nginx 和后端同机。)

图 102

图 103

4.5 启动后端(二选一)

方式 A——脚本(调试用):

chmod +x /opt/ruoyi/start-ruoyi.sh && /opt/ruoyi/start-ruoyi.sh

方式 B——systemd(推荐,宕机自动拉起、开机自启):

cp /opt/ruoyi/ruoyi-backend.service /etc/systemd/system/ systemctl daemon-reload systemctl enable --now ruoyi-backend

图 104

图 105

4.6 单机自检(不过关别往下走)

# 后端起来了(8080 在监听)

netstat -lntp | grep 8080

# 验证码接口直连 200

curl -i http://127.0.0.1:8080/captchaImage

# 走 Nginx 也 200(前端页面 + 反代都通)

curl -I http://127.0.0.1/ curl -i http://127.0.0.1/prod-api/captchaImage

任何一步不对,看日志:

journalctl -u ruoyi-backend -n 50 # 后端启动日志 tail -50 /home/ruoyi/logs/sys-error.log # 应用错误日志 tail -20 /var/log/nginx/error.log # Nginx 错误

排障顺序(本地踩过的坑照搬):页面没验证码 → 先 curl 127.0.0.1:8080/captchaImage(不通是后端/Redis 连不上),再 curl 127.0.0.1/prod-api/captchaImage(不通是 SELinux 或 Nginx 反代),别一上来就怀疑 Redis。

这里前面做错了,ecs和rds云redis不是同一个vpc

图 106

补救一下,添加一个新的交换机

Rds更换一下

图 107

图 108

然后是redis

图 109

图 110

图 111

图 112

4.7 RDS 导入

回到第三节第 3 步执行导入和验证。

# 在 Mac 上:把 SQL 传到 ECS1

图 113

cd ~/Desktop/若依上云迁移/物料 scp ry-vue-mysql57.sql root@<ECS1公网IP>:/root/

# 在 ECS1 上:导入 RDS

mysql -h <RDS内网地址> -u ruoyi -p'RDS账号密码' ry-vue < /root/ry-vue-mysql57.sql

# 验证:30 张表、2 个用户

mysql -h <RDS内网地址> -u ruoyi -p'RDS账号密码' -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='ry-vue'; SELECT user_name FROM \`ry-vue\`.sys_user;" cd ~/Desktop/若依上云迁移/物料 scp -i ~/Desktop/test1.pem ry-vue-mysql57.sql root@120.26.180.40:/root/

在 ECS 上执行导入(密码回车后交互输入,填你 application-cloud.yml 里那个数据库密码):RuoYi@2026

mysql -h rm-bp194kr55nwqwcu7p.mysql.rds.aliyuncs.com -u ruoyi -p --default-character-set=utf8mb4 ry-vue < /root/ry-vue-mysql57.sql

验证(应该看到表数 30、用户 admin 和 ry):

mysql -h rm-bp194kr55nwqwcu7p.mysql.rds.aliyuncs.com -u ruoyi -p -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='ry-vue'; SELECT user_name FROM \`ry-vue\`.sys_user;"

导完不用手动重启——systemd 每 5 秒自动重拉后端,表一在它就能起来。等半分钟再跑一遍:

netstat -lntp | grep 8080

curl -i http://127.0.0.1:8080/captchaImage curl -i http://127.0.0.1/prod-api/captchaImage

出 200 + JSON 就通了。到那一步整个单机部署就完成了

图 114

图 115

systemctl restart ruoyi-backend

# 等 40 秒左右,然后:

netstat -lntp | grep 8080

curl -i http://127.0.0.1/prod-api/captchaImage

图 116

图 117

图 118

五、复制到 ECS2

对 ECS2 重复第四节的 4.1~4.6(Mac 上把 scp 目标换成 <ECS2公网IP> 即可)。

RDS 只需导入一次,ECS2 跳过第三节。

偷懒法(可选):ECS1 配好后"实例→创建自定义镜像",再用该镜像开 ECS2。实验场景直接重复 scp 更直观。

这次我们采用自定义镜像(克隆实例)的方式创建第二台 ECS:

图 119

图 120

图 121

图 122

新实例出现后,先改 RDS/Redis 白名单 → test1 分组改成 172.16.0.0/12,再启动/验证

图 123

图 124

六、配置 SLB

CLB 控制台 → 实例 <SLB公网IP>:

配置完约 10 秒生效,验证:

curl -I http://<SLB公网IP>/ # 期待 200 curl -i http://<SLB公网IP>/prod-api/captchaImage # 期待 200 + JSON

浏览器访问 http://<SLB公网IP>,登录 admin / admin123。

图 125

图 126

图 127

图 128

图 129

图 130

图 131

图 132

图 133

图 134

图 135

图 136

图 137

图 138

七、配置 SLS 日志(替代 ELK)

7.1 两台 ECS 各装一次 Logtail

wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/linux64/logtail.sh -O logtail.sh chmod 755 logtail.sh

./logtail.sh install cn-hangzhou

地域换了就把 cn-hangzhou 对应替换(控制台接入数据 → Logtail 有一键安装命令可直接复制)。

图 139

图 140

图 141

7.2 控制台配置采集

SLS 控制台 → Project ruoyi-prod:

nginx-access nginx-log
采集配置名Logstore日志路径设置
nginx-accessnginx-log日志路径 /var/log/nginx,文件名 *.log(access 和 error 一起收)
ruoyi-appruoyi-app日志路径 /home/ruoyi/logs,文件名 *.log(sys-info/sys-error/sys-user 全收)

一个采集配置只能填一个"目录 + 文件名",文件名支持 * 通配;/home/ruoyi/logs 下只有若依的日志,*.log 一条配置全收。

(后端 logback 输出在 /home/ruoyi/logs/,jar 内置配置,目录自动创建,和本地容器里的路径一致。)

图 142

图 143

图 144

图 145

图 146

图 147

图 148

图 149

图 150

然后ruoyiapp的

图 151

图 152

图 153

图 154

图 155

八、验收清单(5 条标准,逐条给出证据)

#验收项怎么验
1SLB 公网 IP 访问若依正常浏览器开 http://<SLB 公网 IP>,出验证码、admin/admin123 能登
2RDS/Redis 只有内网能连Mac 上 nc -vz <RDS 内网地址 > 3306 不通(它压根没公网地址);ECS 上 mysql -h <RDS 内网地址 > -u ruoyi -p 能连。Redis 同理
3SLS 能查到日志SLS 控制台查询 nginx-log:刷新几次页面再搜,有 access 记录;登录一次系统,ruoyi-app 里出现 sys-user 日志
4停一台 ECS 业务不中断控制台把 ECS1 停机 → SLB 健康检查约 10~30 秒摘除它 → 浏览器持续刷新 http://<SLB 公网 IP> 全程可用;再开机恢复双机

截图清单(验收素材):资源列表全景(ECS×2/RDS/Redis/CLB/SLS 同地域)、SLB 监听+健康检查状态为"正常"、SLS 查询命中页面、ECS1 停机期间页面正常访问的录屏/截图、架构图(见架构图.html)。

停止一台 ECS 停机验收(停机期间页面正常访问):

图 156

图 157

图 158

图 159

图 160

图 161

图 162

图 163

图 164

刷新一下,能正常访问

九、收尾

附:一页总结(发布口径)

本地 LVS+Nginx+SpringBoot+MySQL+Redis+ELK 的若依环境,迁移为阿里云高可用架构:2 台 ECS(CentOS 7.9,Nginx+jar 前后端同机部署)挂载公网 CLB,MySQL 5.7 整库迁移至 RDS,缓存切换云 Redis,ELK 以 SLS(Logtail 采集,保留 30 天)替代。RDS/Redis 仅内网可达,ECS 业务端口受安全组收敛,停任意一台 ECS 服务不中断,实现全内网、同地域、高可用的上云迁移。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 17:53:47

HyperMesh基础培训:网格质量、单位与节点显示问题解析

HyperMesh 是很多 CAE 工程师绕不开的网格前处理工具&#xff0c;平时做结构仿真、碰撞分析、NVH 分析都会用到它。我接触过的学员里&#xff0c;大部分卡住的点不在建模思路&#xff0c;而在基础设置和显示控制。很多线上培训课程内容其实很系统&#xff0c;但学员一旦跟不上操…

作者头像 李华
网站建设 2026/9/5 7:14:38

AI患者管理从“管得住”到“管出疗效”:算法、架构与工程闭环

AI 患者管理跑了几年&#xff0c;从“能建档、能随访、能发提醒”的数字化阶段&#xff0c;到如今大模型、机器学习逐步进场&#xff0c;行业里一个明显共识是&#xff1a; 系统上线不等于管理生效&#xff0c;“管得住”和“管出疗效”之间&#xff0c;差着一整套数据分析、算…

作者头像 李华
网站建设 2026/9/9 17:52:33

大模型安全评估独立性如何保障?从评估框架到工程化落地实践

近几年&#xff0c;大模型安全评估逐渐从“锦上添花”变成“上线必备”。不过很多团队在落地 AI 安全评估时&#xff0c;常常遇到一个尴尬问题&#xff1a;评估团队和开发团队同属一个项目组&#xff0c;评估结论容易受业务进度、绩效压力甚至组织架构调整影响&#xff0c;独立…

作者头像 李华
网站建设 2026/9/9 17:54:00

医学英语神经系统构词法:从neuron与nerve学起

医学英语学习最让人头疼的地方&#xff0c;不是语法&#xff0c;而是永远背不完的术语。尤其是神经系统相关的内容&#xff0c;翻开一篇英文文献&#xff0c;neuron、nerve、neuropathy、neuritis、neuralgia 这一串词长得非常像&#xff0c;意思却完全不同。很多人用“逐个背、…

作者头像 李华
网站建设 2026/9/3 15:39:05

399美元Microduck:Hugging Face低成本机器人开发平台解析

开年以来&#xff0c;Hugging Face 的动向一直是 AI 圈的关注焦点。从模型仓库到数据集平台&#xff0c;再到推出面向机器人开发的低成本硬件方案 Microduck&#xff0c;这家公司正在把自己从“AI 领域的 GitHub”延伸为连接算法与物理世界的桥梁。看到 399 美元这个定价时&…

作者头像 李华
网站建设 2026/9/5 19:06:51

AI检测器为何不可靠:从原理到工程兜底的完整解读

老师在批改期末论文时&#xff0c;把整篇文章贴进检测工具&#xff0c;系统显示“94% AI 生成”。学生一边反复修改措辞&#xff0c;一边坚持那是自己一稿一稿写出来的。过去一年里&#xff0c;这种对峙几乎成了大学课堂里的常见场景&#xff1a;AI 检测工具给出一个看似精确的…

作者头像 李华