文章目录
- 一、阿里云的概念
- 1.1 什么是阿里云?
- 1.2 为什么要进行数据迁移?
- 1.2.1 本地部署的痛点
- 1.2.2 上云迁移的优势
- 二、云上架构图
- 三、迁移步骤
- 3.1 资源清单
- 3.2 创建 VPC 和交换机
- 3.3 购买 ECS(2台)
- 3.4 安全组配置
- 3.5 购买 RDS MySQL
- 3.6 购买云 Redis(Tair)
- 3.7 购买 SLB
- 3.8 购买SLS
- 3.9 获取RDS mysql 的内网地址和Redis 的内网地址
- 3.9.1 获取RDS mysql 的内网地址
- 3.9.2 获取Redis 的内网地址
- 3.10 数据迁移(SQL 导入)
- 3.10.1 在RDS MySQL中先创建库和账号
- 3.10.2 创建了数据库,然后在本地终端上进行数据导出
- 3.10.3 上传到 ECS-1
- 3.11 后端 jar 包配置与运行
- 3.11.1 在本地虚拟机从镜像中提取 jar 包
- 3.11.2 安装JDK 1.8
- 3.11.3 application-druid.yml文件
- 3.11.4 application.yml 文件
- 3.11.5 运行 jar 包
- 3.12 前端迁移
- 3.12.1 在本地虚拟机上找到dist文件
- 3.12.2 上传到 ECS-1和ECS-2后解压
- 3.12.3 在 ECS-1 和 ECS-2 上安装 Nginx
- 3.12.4 配置 Nginx 反向代理
- 3.13 测试高可用
- 3.14 安装 Logtail 采集日志到 SLS
- 3.14.1 创建弹性公网IP
- 3.14.2 安装 Logtail
- 3.14.3 在 SLS 控制台配置采集
- 四、迁移过程中出现的问题
一、阿里云的概念
1.1 什么是阿里云?
阿里云(Alibaba Cloud)是阿里巴巴集团旗下的云计算服务平台,成立于2009年,是全球领先的云计算及人工智能科技公司之一。阿里云提供包括弹性计算、数据库、存储、网络、安全、大数据、人工智能等在内的全方位云服务,服务范围覆盖全球200多个国家和地区。
1.2 为什么要进行数据迁移?
1.2.1 本地部署的痛点
| 痛点 | 说明 |
|---|---|
| 硬件成本高 | 需要购买服务器、交换机、防火墙等硬件设备,前期投入大 |
| 运维复杂 | 需要专业的运维团队负责服务器、网络、数据库的日常维护 |
| 扩展性差 | 业务增长时需要采购新硬件,周期长、成本高 |
| 高可用难保障 | 单点故障风险高,灾备方案复杂且昂贵 |
| 安全防护弱 | 需要自行应对DDoS攻击、数据泄露等安全威胁 |
1.2.2 上云迁移的优势
| 优势 | 说明 |
|---|---|
| 按量付费 | 无需一次性投入硬件成本,按需使用、按量付费 |
| 高可用 | 云平台提供SLB、RDS主备、多可用区等原生高可用能力 |
| 弹性扩展 | 支持随时升降配,从容应对业务流量变化 |
| 运维简化 | RDS、Redis等托管服务免去日常运维工作 |
| 安全合规 | 云平台提供DDoS防护、WAF、数据加密等安全能力 |
| 日志服务SLS日志服务替代传统ELK,免运维、低成本 |
二、云上架构图
三、迁移步骤
3.1 资源清单
| 资源 | 名称 | 规格 | 内网地址/公网IP |
|---|---|---|---|
| VPC | ruoyi-vpc | 10.0.0.0/16 | - |
| 交换机 A | ruoyi-switch-a | 10.0.1.0/24 | 可用区B |
| 交换机 B | ruoyi-switch-b | 10.0.2.0/24 | 可用区H |
| ECS-1 | ruoyi-ecs-01 | 2核4G CentOS 7.9 | 10.0.1.15 |
| ECS-2 | ruoyi-ecs-02 | 2核4G CentOS 7.9 | 10.0.2.101 |
| RDS | ruoyi-mysql | MySQL 5.7 2核4G | rm-xxx.mysql.rds.aliyuncs.com |
| Redis | ruoyi-redis | Redis 6.0 1GB | r-xxx.redis.rds.aliyuncs.com |
| SLB | ruoyi-slb | 公网型 HTTP:80 | 218.244.145.10 |
| SLS | ruoyi-logs-0829 | 日志存储30天 | - |
3.2 创建 VPC 和交换机
在阿里云中找到vpc进行以下操作,这里是一个vpc下有两个交换机
3.3 购买 ECS(2台)
这里以一台为例,购买两台2C4G的ECS,第二台ECS是把交换机这一个换了
3.4 安全组配置
此操作是为了将两个ECS放到同一个安全组中
添加规则
将两个实例添加到新建的安全组中,在创建vpc时会自动创建安全组,自动创建的不删除
3.5 购买 RDS MySQL
这个只买一个就可以
3.6 购买云 Redis(Tair)
redis也只要购买一个
3.7 购买 SLB
只买一个
3.8 购买SLS
开通后创建
这里选择取消,不接入数据
3.9 获取RDS mysql 的内网地址和Redis 的内网地址
3.9.1 获取RDS mysql 的内网地址
在 RDS 详情页,点击左侧菜单 “数据库连接” (或 “连接管理”)
3.9.2 获取Redis 的内网地址
设置白名单
3.10 数据迁移(SQL 导入)
3.10.1 在RDS MySQL中先创建库和账号
3.10.2 创建了数据库,然后在本地终端上进行数据导出
# 本地导出 SQLdockerexecmysql.server mysqldump-uroot-p123456\--default-character-set=utf8mb4\--single-transaction\--set-gtid-purged=OFF\--no-create-db ry-vue>/opt/ruoyi/sql/ry-vue-export.sql3.10.3 上传到 ECS-1
在ruoyi文件里的sql找到ry-vue-export.sql,将其放在电脑桌面上,然后远程连接实例,将数据上传到/opt目录下,在左边有个文件,点击文件,然后双击/opt下的ruoyi目录。即可看到上传文件
# 上传到 ECS-1(通过 Workbench)# 在 ECS-1 上导入 RDS,rm-xxx.mysql.rds.aliyuncs.com是RDS MySql 的内网地址mysql-hrm-bp1064d028w406i06.mysql.rds.aliyuncs.com-uruoyi-pry-vue</root/ry-vue-export.sql# 验证mysql-hrm-xxx.mysql.rds.aliyuncs.com-uruoyi-pry-vue-e"SHOW TABLES;"# 结果:30张表3.11 后端 jar 包配置与运行
在ECS-1和ECS-2上进行
3.11.1 在本地虚拟机从镜像中提取 jar 包
# 从 Docker 镜像中复制 jar 包出来dockerrun--rmruoyi-admin:1.0cat/opt/ruoyi-admin.jar>/tmp/ruoyi-admin.jar# 确认文件存在并将其放在桌面上ls-lh/tmp/ruoyi-admin.jar# 上传 /tmp/ruoyi-admin.jar 到 ECS-1 的 /opt3.11.2 安装JDK 1.8
# 安装 JDK 1.8yuminstall-yjava-1.8.0-openjdk# 验证java-version3.11.3 application-druid.yml文件
vimapplication-druid.yml# 数据源配置spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: master: url: jdbc:mysql://RDS MySql 的内网地址:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: ruoyi password: 你的RDS密码 slave: enabled:falseurl: username: password: initialSize:5minIdle:10maxActive:20maxWait:60000connectTimeout:30000socketTimeout:60000timeBetweenEvictionRunsMillis:60000minEvictableIdleTimeMillis:300000maxEvictableIdleTimeMillis:900000validationQuery: SELECT1FROM DUAL testWhileIdle:truetestOnBorrow:falsetestOnReturn:falsewebStatFilter: enabled:truestatViewServlet: enabled:trueallow: url-pattern: /druid/* login-username: ruoyi login-password:123456filter: stat: enabled:truelog-slow-sql:trueslow-sql-millis:1000merge-sql:truewall: config: multi-statement-allow:true3.11.4 application.yml 文件
vimapplication.yml ruoyi: name: RuoYi version:3.9.1 copyrightYear:2026profile: /opt/ruoyi/uploadPath addressEnabled:falsecaptchaType: math server: port:8080servlet: context-path: / tomcat: uri-encoding: UTF-8 accept-count:1000threads: max:800min-spare:100logging: level: com.ruoyi: debug org.springframework: warn user: password: maxRetryCount:5lockTime:10spring: messages: basename: i18n/messages profiles: active: druid servlet: multipart: max-file-size: 10MB max-request-size: 20MB devtools: restart: enabled:trueredis: host: redis内网地址 port:6379database:0password: 你的Redis密码 timeout: 10s lettuce: pool: min-idle:0max-idle:8max-active:8max-wait:-1mstoken: header: Authorization secret: abcdefghijklmnopqrstuvwxyz expireTime:30mybatis: typeAliasesPackage: com.ruoyi.**.domain mapperLocations: classpath*:mapper/**/*Mapper.xml configLocation: classpath:mybatis/mybatis-config.xml pagehelper: helperDialect: mysql supportMethodsArguments:trueparams:count=countSql swagger: enabled:truepathMapping: /dev-api referer: enabled:falseallowed-domains: localhost,127.0.0.1,ruoyi.vip,www.ruoyi.vip xss: enabled:trueexcludes: /system/notice urlPatterns: /system/*,/monitor/*,/tool/*3.11.5 运行 jar 包
cd/opt/ruoyi# 在ECS-1和ECS-2上运行 jar 包java-jarruoyi-admin.jar# 让后端在后台持续运行nohupjava-jarruoyi-admin.jar>/opt/ruoyi/logs/ruoyi.log2>&1&curlhttp://localhost:8080# 返回:欢迎使用Ruoyi后台管理框架,当前版本:v3.9.13.12 前端迁移
3.12.1 在本地虚拟机上找到dist文件
cd/path/to/ruoyi-ui# 安装依赖(如果 node_modules 不存在)npminstall# 打包生产环境npmrun build:prod# 压缩 distzip-rdist.zip dist/3.12.2 上传到 ECS-1和ECS-2后解压
cd/opt/ruoyiunzip-odist.zipcp-rdist /usr/share/nginx/html/3.12.3 在 ECS-1 和 ECS-2 上安装 Nginx
yuminstall-ynginx# 启动 Nginxsystemctl start nginx systemctlenablenginx# 验证curlhttp://localhost:803.12.4 配置 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# 重启 Nginxsystemctl restart nginx# 验证在浏览器访问 SLB 公网 IP:http://218.244.145.103.13 测试高可用
停止 ECS-1,然后再次访问SLB 公网 http://218.244.145.10
3.14 安装 Logtail 采集日志到 SLS
3.14.1 创建弹性公网IP
在ECS实例这一块的基础信息里,有一个弹性公网ip,创建弹性公网ip
这里需要绑定实例
3.14.2 安装 Logtail
# 下载安装脚本wget-T10-t2https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/linux64/logtail.sh-Ologtail.sh# 安装bashlogtail.shinstallauto# 启动 Logtail/etc/init.d/ilogtaild start# 查看状态/etc/init.d/ilogtaild status3.14.3 在 SLS 控制台配置采集
进入 SLS 控制台 → 选择 Project ruoyi-logs-0829
把ruoyi-ecs-group作为应用机器组
完成后,等待一会,就可以看到日志了
四、迁移过程中出现的问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| RDS 连接失败 | 本地虚拟机不在 VPC 网段 | 通过 ECS 中转导入 SQL |
| Logtail 无法下载 | ECS 无公网 IP | 临时绑定弹性 IP,装完释放 |
| RDS 白名单未配置 | 忘记添加 ECS IP | 添加 10.0.1.15, 10.0.2.101 |