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

发布时间:2026/8/31 3:04:36
若依项目上云迁移实施文档(阿里云) 目录〇、迁移来源盘点一、购买资源具体配置二、网络与安全组先做省得后面连不上三、初始化 RDS建账号、建库、导数据四、初始化 ECS1装环境 部署前后端五、复制到 ECS2六、配置 SLB七、配置 SLS 日志替代 ELK八、验收清单5 条标准逐条给出证据九、收尾 摘要本文档完整记录将本地 Docker 部署的若依系统RuoYi-Vue 3.9.1迁移至阿里云高可用架构的实施过程两台 ECS 分别承载 Nginx 前端与 SpringBoot 后端公网 CLB 提供负载均衡与 HTTP 健康检查MySQL 5.7 整库迁移至 RDS缓存切换云 RedisELK 日志方案由 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.56CentOS 7.9Docker 环境上的若依栈组件本地现状迁移去向前端 Nginx容器 ruoyi-webnginx:1.25.3宿主机 8888 端口ECS 上 yum 安装 Nginx后端容器 java.serverruoyi-java 镜像8080ECS 上 java -jar 直接运行MySQL容器 mysql.servermysql:5.7数据卷 /opt/mysql-data4阿里云 RDS MySQL 5.7Redis容器 redis.server无密码仅 18 个缓存键阿里云云 Redis缓存无需迁数据ELK容器 es/logstash/kibana/filebeat已停阿里云 SLSLogtail 采集数据库库名 ry-vue注意带横线utf8mb430 张表2 个用户整库导出→导入 RDS四份物料我已从 .56 导出放在 Mac 桌面若依上云迁移/物料/ 目录直接用文件说明ruoyi-admin.jar85M后端成品包2026-08-20 构建无需重新 mvn 打包dist/7M前端成品已含 /prod-api 前缀无需重新 npm buildry-vue-mysql57.sql62K全库导出30 张表已去掉建库语句专供 RDS 导入application-cloud.yml云上外置配置模板连 RDS/云 Redis替换占位符即可nginx.confECS 上 Nginx 的完整配置前端 /prod-api 反代 8080start-ruoyi.sh后端启动脚本ruoyi-backend.servicesystemd 开机自启服务文件核心思路记这一句jar 和 dist 都是现成的不在云上重新编译数据库/Redis 地址用外置 application-cloud.yml 覆盖Spring 的 cloud profile 优先级高于 jar 内配置所以 jar 一个字节都不用改。图 1图 2一、购买资源具体配置总原则同一地域推荐华东1-杭州、同一 VPC、全部按量付费做完就释放省钱。打开阿里云官网在搜索框里输入ecs图 3图 4图 51.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图 301.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图 401.3 云 Redis内网控制台 → 云数据库 Redis 版 → 创建实例配置项选择计费按量付费地域华东 1杭州同 VPC版本Redis 6.0社区版兼容性没问题架构/规格标准版主从1 GiB网络VPC 内网密码创建时设置记牢下面用 云 Redis 密码 代称图 41图 42图 43图 44图 45图 46图 47图 481.4 SLB 负载均衡控制台 → 负载均衡 CLB → 创建实例配置项选择计费按量付费地域华东 1杭州实例类型公网会自动分配一个公网 IP即用户访问入口 SLB 公网 IP规格性能保障型 slb.s1.small最小规格图 49图 50图 51图 52图 53图 54图 55图 561.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查询百度搜我的IPSSH 运维别开 0.0.0.0/0TCP800.0.0.0/0给 SLB 转发 健康检查TCP4430.0.0.0/0预留 HTTPSTCP8080VPC 网段如 172.16.0.0/12控制台能选后端仅内网可访问图 72图 73图 74这个加一条80和443图 75图 76图 77图 782.2 RDS 白名单RDS 实例详情 → 白名单与安全组 → 白名单设置 → default 分组添加两台 ECS 的内网 IP精确到 /32 两条。购买时选择“加入白名单是”的default 分组已自动包含 VPC 网段。不申请外网地址——这就是数据库无公网的验收点。图 79图 802.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图 87mysql -h RDS内网地址 -u ruoyi -p你的RDS密码 -e CREATE DATABASE \ry-vue\ DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;# 在 Mac 上把 SQL 传到 ECS1cd ~/Desktop/若依上云迁移/物料 scp ry-vue-mysql57.sql rootECS1公网IP:/root/# 在 ECS1 上导入 RDSmysql -h RDS内网地址 -u ruoyi -pRDS账号密码 ry-vue /root/ry-vue-mysql57.sql# 验证30 张表、2 个用户mysql -h RDS内网地址 -u ruoyi -pRDS账号密码 -e SELECT COUNT(*) FROM information_schema.tables WHERE table_schemary-vue; SELECT user_name FROM \ry-vue\.sys_user;四、初始化 ECS1装环境 部署前后端SSH 登录ssh rootECS1公网IP密钥对登陆也行ssh -i 密钥地址 rootip# 1. 第一次用先改权限只需一次chmod 400 ~/Desktop/test1.pem# 2. 登录 ECSIP 换成你的公网 IPssh -i ~/Desktop/test1.pem rootECS公网IP图 884.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图 924.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 rootECS1公网IP:/opt/ruoyi/ scp -r dist rootECS1公网IP:/opt/ruoyi/图 93图 94图 95图 96图 974.3 改外置配置整个迁移唯一要动脑的一步在 ECS1 上编辑 /opt/ruoyi/application-cloud.yml把 4 个占位符换成真实值RDS内网地址、RDS账号密码、云Redis内网地址、云Redis密码。顺便把文件末尾加一行原配置里上传路径是 Windows 风格的 D:/ 盘符云上改成 Linux 路径ruoyi:profile: /opt/ruoyi/uploadPath图 98图 99图 100图 1014.4 部署前端 Nginxrm -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/htmllocation /prod-api/ 反代 http://127.0.0.1:8080/——即 Nginx 和后端同机。图 102图 1034.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图 1054.6 单机自检不过关别往下走# 后端起来了8080 在监听netstat -lntp | grep 8080# 验证码接口直连 200curl -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图 1124.7 RDS 导入回到第三节第 3 步执行导入和验证。# 在 Mac 上把 SQL 传到 ECS1图 113cd ~/Desktop/若依上云迁移/物料 scp ry-vue-mysql57.sql rootECS1公网IP:/root/# 在 ECS1 上导入 RDSmysql -h RDS内网地址 -u ruoyi -pRDS账号密码 ry-vue /root/ry-vue-mysql57.sql# 验证30 张表、2 个用户mysql -h RDS内网地址 -u ruoyi -pRDS账号密码 -e SELECT COUNT(*) FROM information_schema.tables WHERE table_schemary-vue; SELECT user_name FROM \ry-vue\.sys_user; cd ~/Desktop/若依上云迁移/物料 scp -i ~/Desktop/test1.pem ry-vue-mysql57.sql root120.26.180.40:/root/在 ECS 上执行导入密码回车后交互输入填你 application-cloud.yml 里那个数据库密码RuoYi2026mysql -h rm-bp194kr55nwqwcu7p.mysql.rds.aliyuncs.com -u ruoyi -p --default-character-setutf8mb4 ry-vue /root/ry-vue-mysql57.sql验证应该看到表数 30、用户 admin 和 rymysql -h rm-bp194kr55nwqwcu7p.mysql.rds.aliyuncs.com -u ruoyi -p -e SELECT COUNT(*) FROM information_schema.tables WHERE table_schemary-vue; SELECT user_name FROM \ry-vue\.sys_user;导完不用手动重启——systemd 每 5 秒自动重拉后端表一在它就能起来。等半分钟再跑一遍netstat -lntp | grep 8080curl -i http://127.0.0.1:8080/captchaImage curl -i http://127.0.0.1/prod-api/captchaImage出 200 JSON 就通了。到那一步整个单机部署就完成了图 114图 115systemctl restart ruoyi-backend# 等 40 秒左右然后netstat -lntp | grep 8080curl -i http://127.0.0.1/prod-api/captchaImage图 116图 117图 118五、复制到 ECS2对 ECS2 重复第四节的 4.1~4.6Mac 上把 scp 目标换成 ECS2公网IP 即可。RDS 只需导入一次ECS2 跳过第三节。偷懒法可选ECS1 配好后实例→创建自定义镜像再用该镜像开 ECS2。实验场景直接重复 scp 更直观。这次我们采用自定义镜像克隆实例的方式创建第二台 ECS图 119图 120图 121图 122新实例出现后先改 RDS/Redis 白名单 → test1 分组改成 172.16.0.0/12再启动/验证图 123图 124六、配置 SLBCLB 控制台 → 实例 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 日志替代 ELK7.1 两台 ECS 各装一次 Logtailwget 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图 1417.2 控制台配置采集SLS 控制台 → Project ruoyi-prodnginx-access nginx-log采集配置名Logstore日志路径设置nginx-accessnginx-log日志路径 /var/log/nginx文件名 *.logaccess 和 error 一起收ruoyi-appruoyi-app日志路径 /home/ruoyi/logs文件名 *.logsys-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刷新一下能正常访问九、收尾附一页总结发布口径本地 LVSNginxSpringBootMySQLRedisELK 的若依环境迁移为阿里云高可用架构2 台 ECSCentOS 7.9Nginxjar 前后端同机部署挂载公网 CLBMySQL 5.7 整库迁移至 RDS缓存切换云 RedisELK 以 SLSLogtail 采集保留 30 天替代。RDS/Redis 仅内网可达ECS 业务端口受安全组收敛停任意一台 ECS 服务不中断实现全内网、同地域、高可用的上云迁移。