阿里云实战:RuoYi项目上云

文章目录

前言

本篇文章将以RuoYi项目为例,演示传统环境上云的操作过程。主要在云环境实现以下项目目标:

  1. RuoYi项目的前后端搭建
  2. 高并发和负载均衡
  3. 日志收集
    本项目将在阿里云平台实现,需要准备阿里云账号,操作过程中产生一定费用。
  • 注册和登陆阿里云,所有的操作都将在控制台进行。
  • 测试环境建议使用按量付费方式购买计算资源。
  • 保持账上大于100元现金(释放24小时后可提现),否则无法以按量付费的形式购买计算资源。
  • 测试完成后,不再使用的资源及时释放,避免不必要的扣费。

环境准备

架构拓扑图:
日志服务

SLS
负载均衡

SLB:CLB
前端ESC

nginx01
前端ESC

nginx02
后端ESC

springboot
数据库

RDS
Redis缓冲

Tair

SLB:CLB负载均衡:替代传统环境LVS+Keepalive服务器
SLS日志服务:替代传统环境ELK服务器,实际生产环境也可以自建ELK(ESC)和云kafka相结合。
RDS数据库:替代传统环境Mysql服务器
Tair非关系数据库:替代传统环境Redis服务器

资源组

资源组方便管理资产和账目,可以避免多项目之间资源误释放和账目管理混乱的问题。

  • 控制台(工作台) → 资源管理 → 资源组 → 创建资源组
  • 控制台(工作台) → 资源管理 → 资源组 → 自动转组 → 创建规则 → 名称包含:ruoyi
  • 本项目所有的资源都放入ruoyi资源组中
资源组标识 资源组名称
yjs1023 ruoyi

1_网络资源

管理全国各个节点之间的网络

  • 控制台(工作台) → 网络与CDN → 专有网络 VPC

1.1_专有网络

类似于一个虚拟的三层路由,每个城市一个节点。

  • 控制台(工作台) → 网络与CDN → 专有网络 VPC → 专有网络 → 创建专有网络
地域 名称 手动IPv4地址段
华东1(杭州) ruoyi-hz 172.16.0.0/16

1.2_交换机

类似于一个虚拟的二层交换,每个机房一个节点。

  • 控制台(工作台) → 网络与CDN → 专有网络 VPC → 交换机 → 创建交换机
地域 专有网络 交换机名称 可用区 IPv4网段
华东1(杭州) ruoyi-hz ruoyi-hzb 杭州 可用区B 172.16.1.0/24
华东1(杭州) ruoyi-hz ruoyi-hzj 杭州 可用区J 172.16.2.0/29
华东1(杭州) ruoyi-hz ruoyi-hzk 杭州 可用区k 172.16.2.8/29

1.3_负载均衡

  • 控制台(工作台) → 网络与CDN → 负载均衡 SLB → 传统型负载均衡 CLB
地域 可用区 实例类型 专有网络 交换机名称 实例名称
华东1(杭州) 华东 1 可用区 B 公网 ruoyi-hz ruoyi-hzb ruoyi-clb

2_云服务器

  • 控制台(工作台) → 计算 → 云服务器 ECS

2.1_安全组

  • 控制台(工作台) → 计算 → 云服务器 ECS → 安全组 → 创建安全组
安全组名称 网络 安全组类型 授权策略 访问来源 访问目的
nginx ruoyi-hz 普通安全组 入方向允许 0.0.0.0/0 HTTP(80) HTTPS(443)
springboot ruoyi-hz 普通安全组 入方向允许 私有地址 HTTP(8090)
ssh ruoyi-hz 普通安全组 入方向允许 办公地址 SSH(22) ICMP

办公地址可以搜ip百度查看,如果是动态获取的公网地址可以放宽网段,例如:12.23.45.0/24。减少DDos攻击面,一定程度避免流量损失和拥堵。

ICMP在业务稳定后可以关闭,避免黑客嗅探。

2.2_实例

  • 控制台(工作台) → 计算 → 云服务器 ECS → 实例 → 【价格更优】经济型e实例 → 立即购买 → 自定义购买
地域 网络及可用区 安装组 私网IP地址 镜像 实例名称 组件
华东1(杭州) ruoyi-hz | ruoyi-hzb nginx、ssh 172.16.1.1 CentOS 7.9 ruoyi-nginx01 nginx-1.20.1
华东1(杭州) ruoyi-hz | ruoyi-hzb nginx、ssh 172.16.1.2 CentOS 7.9 ruoyi-nginx02 nginx-1.20.1
华东1(杭州) ruoyi-hz | ruoyi-hzb springboot、ssh 172.16.1.65 CentOS 7.9 ruoyi-spring01 java-1.8

2.3_密钥对

  • 控制台(工作台) → 计算 → 云服务器 ECS → 全部菜单 → 网络与安全 → 密钥对
  • 创建后会下载到本地,需要好好保存。
  • 使用密钥对连接ssh,需要 去掉 密钥对文件 所属组和其他人 权限。
shell 复制代码
chown 600 .ssh/default.pem
# ssh -i ~/.ssh/default.pem root@服务器域名或hosts映射或IP地址
ssh -i ~/.ssh/default.pem root@ruoyi-nginx01
ini 复制代码
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html

Welcome to Alibaba Cloud Elastic Compute Service !

[root@iZbp138f2so8oboxwfcac5Z ~]#

3_数据库

  • 控制台(工作台) → 数据库

3.1_关系型数据库 RDS

  • 控制台(工作台) → 数据库 → 云数据库 RDS
① Mysql实例
  • 控制台(工作台) → 数据库 → 云数据库 RDS → 实例列表 → 创建实例
地域 引擎 VPC 实例名称
华东1(杭州) MySQL 5.7 ruoyi-hz ruoyi-mysql
② 连接信息
  • 控制台(工作台) → 数据库 → 云数据库 RDS → 实例列表 → 点进ruoyi-mysql
内网地址 数据库 账号 密码 权限
rm-bp1fy526cejhqi821.mysql.rds.aliyuncs.com ry-vue ruoyi 1234qwerASDF 读写(DDL+DML)
③ 白名单模板
  • 控制台(工作台) → 数据库 → 云数据库 RDS → 白名单模板 → 创建白名单模板
白名单模板名称 组内白名单
ruoyi_springboot 172.16.1.64/26

3.2_非关系数据库 Tair

  • 控制台(工作台) → 数据库 → 云数据库 Tair(兼容 Redis)
① Redis实例
  • 控制台(工作台) → 数据库 → 云数据库 Tair(兼容 Redis)→ 实例列表 → 创建实例
产品 地域 专有网络 大版本 实例名称
Redis 开源版 华东1(杭州) ruoyi-hz Redis 6.0 ruoyi-mysql
② 连接信息
  • 控制台(工作台) → 数据库 → 云数据库 Tair(兼容 Redis) → 实例列表 → 点进ruoyi-redis
连接地址 账号 密码
r-bp1sxtrhrjl960lpzk.redis.rds.aliyuncs.com default(免账号) 1234qwerASDF
r-bp1sxtrhrjl960lpzk.redis.rds.aliyuncs.com r-bp1sxtrhrjl960lpzk 1234qwerASDF
② IP白名单模板
  • 控制台(工作台) → 数据库 → 云数据库 Tair(兼容 Redis)→ IP白名单模板 → 创建IP白名单模板
IP白名单模板名称 白名单内IP地址 关联实例
ruoyi_springboot 172.16.1.64/26 ruoyi-spring01

操作部分

1_项目打包

本地

1.1 拉取项目

  • 安装git
shell 复制代码
yum -y install git
  • 克隆若依项目
shell 复制代码
mkdir /opt/ruoyi && cd /opt/ruoyi
git clone https://gitee.com/y_project/RuoYi-Vue.git
cd RuoYi-Vue
ls
ini 复制代码
bin      pom.xml      ruoyi-common     ruoyi-quartz  ry.bat
doc      README.md    ruoyi-framework  ruoyi-system  ry.sh
LICENSE  ruoyi-admin  ruoyi-generator  ruoyi-ui      sql

1.2_打包工具部署

  • 安装docker
shell 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io
  • docker加速器
shell 复制代码
mkdir /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors":[
    "https://xdisb0be.mirror.aliyuncs.com",
    "https://1c786b17d3614c7a876977ea63b80b7e.mirror.swr.myhuaweicloud.com"
  ]
}
EOF

systemctl daemon-reload
systemctl enable --now docker
  • 拉取maven和nodejs镜像
shell 复制代码
docker pull node:12
docker pull maven:3.6.3-openjdk-11
docker images
ini 复制代码
REPOSITORY   TAG                IMAGE ID       CREATED       SIZE
node         12                 6c8de432fc7f   3 years ago   918MB
maven        3.6.3-openjdk-11   e23b595c92ad   4 years ago   658MB

1.3_前端打包

  • Node容器启动
shell 复制代码
docker run -it --rm -v /opt/ruoyi/RuoYi-Vue/ruoyi-ui:/opt node:12 /bin/bash

docker run:创建并运行容器
-it:交互式终端
--rm:退出自动删除容器
-v:卷映射(本地./ruoyi-ui→容器/opt

  • 打包前端代码
shell 复制代码
cd /opt
npm install
npm run build:prod
ini 复制代码
 DONE  Build complete. The dist directory is ready to be deployed.
 INFO  Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html

npm install:安装前端依赖
npm run build:prod:生产环境打包命令

输出目录:/opt/ruoyi/RuoYi-Vue/ruoyi-ui/dist(包含前端静态文件)

  • 将打包好的静态资源上传到两台nginx服务器
shell 复制代码
scp -r -i ~/.ssh/default.pem /opt/ruoyi/RuoYi-Vue/ruoyi-ui/dist/ root@ruoyi-nginx02:/usr/share/nginx/html/

scp -r -i ~/.ssh/default.pem /opt/ruoyi/RuoYi-Vue/ruoyi-ui/dist/ root@ruoyi-nginx01:/usr/share/nginx/html/

1.4_后端打包

① 配置文件修改
  • application-druid.yml:数据库连接配置
shell 复制代码
vim /opt/ruoyi/RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml
yml 复制代码
            # 主库数据源
            master:
                url: jdbc:mysql://rm-bp1fy526cejhqi821.mysql.rds.aliyuncs.com:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: ruoyi
                password: 1234qwerASDF

rm-bp1fy526cejhqi821.mysql.rds.aliyuncs.com:3306:连接地址和创建的RDS实例地址保持一致
username password:用户名和密码和RDS实例创建的用户密码保持一致

  • application.yml:主应用配置
shell 复制代码
vim /opt/ruoyi/RuoYi-Vue/ruoyi-admin/src/main/resources/application.yml
yml 复制代码
spring:
  redis:
    host: r-bp1sxtrhrjl960lpzk.redis.rds.aliyuncs.com
    port: 6379
    password: "1234qwerASDF"
    username: r-bp1sxtrhrjl960lpzk
    database: 0

需修改Redis地址等生产参数
r-bp1sxtrhrjl960lpzk.redis.rds.aliyuncs.com:连接地址和创建的Redis实例地址保持一致
username password:用户名和密码和RDS实例创建的用户密码保持一致

② 打包后端代码
  • Maven容器启动
shell 复制代码
docker run -it --rm -v /opt/ruoyi/RuoYi-Vue:/vue maven:3.6.3-openjdk-11 /bin/bash

镜像:maven:3.6.3-openjdk-11

卷映射:本地代码→容器/vue目录

  • JAR包构建
shell 复制代码
cd /vue
mvn package
# 或
mvn -DskipTests -B clean package
ini 复制代码
[INFO] BUILD SUCCESS

mvn package:Maven打包命令
mvn:调用 Maven 工具
clean:清理之前生成的文件(比如旧的编译结果)
package:重新编译代码并打包(生成 jar/war 等文件)
-DskipTests:跳过测试(省时间,适合快速打包)
-B:批处理模式(减少无关输出,日志更简洁)
输出文件/opt/ruoyi/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar
功能:将Java源码编译为可执行JAR

  • 将打包好的静态资源上传到springboot服务器
shell 复制代码
scp -r -i ~/.ssh/default.pem /opt/ruoyi/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar root@ruoyi-spring01:/opt/

2_数据库配置

2.1_Mysql配置

导入数据

  • 控制台(工作台) → 数据库 → 云数据库 RDS → 实例列表 → 登陆数据库 → 左上角三杠 → 数据导入
数据库 上传文件(在之前克隆的若依项目)
ry-vue【ruoyi-mysql】 /opt/ruoyi/RuoYi-Vue/sql/quartz.sql /opt/ruoyi/RuoYi-Vue/sql/ry_20250522.sql

2.2_Redis配置

暂不需要配置

3_后端配置

3.1_环境布置

ruoyi-spring01

① 配置主机名
  • 每台服务器配置和实例名称一致,方便区分主机。
shell 复制代码
hostnamectl set-hostname ruoyi-spring01
② 安装java-1.8
  • 创建ESC实例的时候可以选择java版本
  • 也可以手动安装
shell 复制代码
yum -y install java-1.8.0-openjdk
  • 查看java版本信息

    [root@ruoyi-spring01 ~]# java -version
    openjdk version "1.8.0_452"

3.2_运行ruoyi-admin.jar

shell 复制代码
cd /opt
nohup java -jar ruoyi-admin.jar &
ss -antulp |grep java
ini 复制代码
tcp    LISTEN     0      128    [::]:8080               [::]:*                   users:(("java",pid=12310,fd=37))

3.3_nginx端验证

ruoyi-nginx01 & ruoyi-nginx02

shell 复制代码
curl 172.16.1.65:8080
ini 复制代码
欢迎使用RuoYi后台管理框架,当前版本:v3.9.1,请通过前端地址访问。

4_前端配置

4.1_环境布置

ruoyi-nginx01 & ruoyi-nginx02

① 配置主机名
  • 每台服务器配置和实例名称一致,方便区分主机。
shell 复制代码
# nginx01
hostnamectl set-hostname ruoyi-nginx01

# nginx02
hostnamectl set-hostname ruoyi-nginx02
② 安装nginx
  • 安装启动nginx-1.20.1(两台都要装)
shell 复制代码
yum -y install nginx-1.20.1
systemctl enable --now nginx

生产环境推荐编译安装,教程看22.web原理。这里直接使用yum安装减少文章篇幅。

③ 验证安装
  • 查看版本
shell 复制代码
nginx -v
ini 复制代码
nginx version: nginx/1.20.1
  • 查看服务状态
shell 复制代码
systemctl status nginx.service
ini 复制代码
Active: active (running) 
  • 浏览器访问http://ruoyi-nginx01http://ruoyi-nginx02

4.2_负载均衡配置

① 区别主页内容

ruoyi-nginx01

shell 复制代码
sudo sed -i 's/Welcome to CentOS/Welcome to ruoyi-nginx01/g' /usr/share/nginx/html/index.html

ruoyi-nginx02

shell 复制代码
sudo sed -i 's/Welcome to CentOS/Welcome to ruoyi-nginx02/g' /usr/share/nginx/html/index.html
② 负载均衡配置
  • 控制台(工作台) → 网络与CDN → 负载均衡 SLB → 传统型负载均衡 CLB → 点击进入ruoyi-clb或直接点击监听配置向导
实例名称 监听 默认服务器组 端口
ruoyi-clb 80 ruoyi-nginx01 ruoyi-nginx02 80

监听:出口接听的地址

默认服务器组:统一转发到组成员相同端口,适合简单的业务。

虚拟服务器组:根据策略转发到组成员不同端口,适合复杂灵活的转发业务。

主备服务器组:提供主备高可用模式,主节点故障时自动切至备节点。
本项目业务单一,只设置 默认服务器组 即可

③ 验证流量分发
  • 使用不同的浏览器访问ruoyi-cli地址
shell 复制代码
firefox http://121.41.51.22
chromium http://121.41.51.22
curl http://121.41.51.22
  • 不同的连接分别显示 Welcome to ruoyi-nginx01 和 Welcome to ruoyi-nginx02 ,说明流量被分发到不同的nginx服务器。

4.3_前后端动静分离

① 添加配置文件
  • 添加nginx从配置文件ruoyi.conf
shell 复制代码
vim /etc/nginx/conf.d/ruoyi.conf
nginx 复制代码
server {
    listen 80;
    server_name _;
    charset utf-8;
    index index.html index.htm;
    root /usr/share/nginx/html/dist;

    location / {
		try_files $uri $uri/ /index.html;
    }

    location /prod-api/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://172.16.1.65:8080/;
        proxy_redirect off;
    }
}

server_name _;:匹配所有url的访问
try_files $uri $uri/ /index.html;:如果后端页面找不到则交给前端处理,避免前后端分离导致刷新界面出现404报错 。按顺序检查/index文件和/index/目录是否存在,如果不存在返回到/index.html。

故障日志

  • nginx反向代理、mysql、redis和springboot都能连同,但无法加载验证码。
shell 复制代码
cat nohup.out
ini 复制代码
at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

openjdk不支持该api导致字体库缺失,yum -y install fontconfig安装字体库重启jar包即可。

② 验证成果
  • 浏览器访问CLB地址,会丢给前端nginx展示静态界面,然后转发到后端springboot处理应用请求。
shell 复制代码
firefox http://http://121.41.51.22/

输入验证码后登陆若依管理系统,各项表单展示正常即说明项目部署成功。

5_日志收集配置

5.1_创建Project

  • 控制台(工作台) → 存储 → 日志服务 SLS → 开通日志服务 → 创建Project
Project名称 资源组
ruoyi-sls ruoyi

5.2_创建日志库(Logstore)

  • 控制台(工作台) → 存储 → 日志服务 SLS → 点击进入 Project列表:ruoyi-sls → 创建日志库
Logstore名称
ruoyi-log

5.3_日志数据接入(Logtail)

  1. 控制台(工作台) → 存储 → 日志服务 SLS → 点击进入 Project列表:ruoyi-sls → Logtail配置 → 添加Logtail配置

  2. 搜索 Nginx - 文本日志 → 立即接入 → 创建主机组 → 心跳:OK → 下一步

实例ID/名称 机器组名称 全局配置名称 文件路径 处理模式 处理插件名称
ruoyi-nginx01 ruoyi-log-group ruoyi-log-nginx /var/log/nginx / *.log 处理插件组合 NGINX模式解析
  1. 点击 NGINX模式解析 → NGINX日志配置 → 原始字段:content → 确认 下一步
    NGINX日志配置:
nginx 复制代码
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
  1. 访问http://ruoyi-nginx01/不停刷新 → 下一步 → 查询日志 → AUTO:15秒 开始刷新

  2. 不停访问http://ruoyi-nginx01/和刷新,观察日志变化。

结语

通过本实战,你已经完成了从本地开发环境到阿里云上的完整迁移。所有操作都在阿里云控制台进行,适合快速部署和验证项目功能。

建议真正生产使用时,替换为自定义资源组、更详细的日志分析配置、更安全的网络策略。

相关推荐
kingmax542120082 小时前
AWS ML Specialist 考试备考指南
云计算·aws·ai证书·ai认证
可爱又迷人的反派角色“yang”2 小时前
K8s(六)
linux·运维·云原生·容器·kubernetes
运维小贺12 小时前
Kubernetes之Deployment无状态控制器
云原生·容器·kubernetes
@HNUSTer16 小时前
基于 GEE 利用多波段合成的方法高效处理并下载数据——以 MODIS 潜热通量(LE)年均值数据产品下载为例
云计算·数据集·遥感大数据·gee·云平台·modis·潜热通量(le)
lisanmengmeng19 小时前
cephfs 在k8s挂载文档
云原生·容器·kubernetes
运维成长记1 天前
关于k8s和harbor脚本安装的一系列操作
云原生·容器·kubernetes
王九思1 天前
云原生HashiCorp Vault加密
云原生
-dcr1 天前
52.kubernetes基础
运维·云原生·kubernetes
Leon-zy1 天前
Redis7.4.5集群部署3主3从
redis·分布式·缓存·云原生