文章目录
- 前言
- 环境准备
- 操作部分
-
- 1_项目打包
-
- [1.1 拉取项目](#1.1 拉取项目)
- 1.2_打包工具部署
- 1.3_前端打包
- 1.4_后端打包
-
- [① 配置文件修改](#① 配置文件修改)
- [② 打包后端代码](#② 打包后端代码)
- 2_数据库配置
- 3_后端配置
-
- 3.1_环境布置
-
- [① 配置主机名](#① 配置主机名)
- [② 安装java-1.8](#② 安装java-1.8)
- 3.2_运行ruoyi-admin.jar
- 3.3_nginx端验证
- 4_前端配置
-
- 4.1_环境布置
-
- [① 配置主机名](#① 配置主机名)
- [② 安装nginx](#② 安装nginx)
- [③ 验证安装](#③ 验证安装)
- 4.2_负载均衡配置
-
- [① 区别主页内容](#① 区别主页内容)
- [② 负载均衡配置](#② 负载均衡配置)
- [③ 验证流量分发](#③ 验证流量分发)
- 4.3_前后端动静分离
-
- [① 添加配置文件](#① 添加配置文件)
- [② 验证成果](#② 验证成果)
- 5_日志收集配置
- 结语
前言
本篇文章将以RuoYi项目为例,演示传统环境上云的操作过程。主要在云环境实现以下项目目标:
- RuoYi项目的前后端搭建
- 高并发和负载均衡
- 日志收集
本项目将在阿里云平台实现,需要准备阿里云账号,操作过程中产生一定费用。
- 注册和登陆阿里云,所有的操作都将在控制台进行。
- 测试环境建议使用按量付费方式购买计算资源。
- 保持账上大于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实例地址保持一致
usernamepassword:用户名和密码和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实例地址保持一致
usernamepassword:用户名和密码和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-nginx01和http://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)
-
控制台(工作台) → 存储 → 日志服务 SLS → 点击进入 Project列表:ruoyi-sls → Logtail配置 → 添加Logtail配置
-
搜索 Nginx - 文本日志 → 立即接入 → 创建主机组 → 心跳:OK → 下一步
| 实例ID/名称 | 机器组名称 | 全局配置名称 | 文件路径 | 处理模式 | 处理插件名称 |
|---|---|---|---|---|---|
| ruoyi-nginx01 | ruoyi-log-group | ruoyi-log-nginx | /var/log/nginx / *.log |
处理插件组合 | NGINX模式解析 |
- 点击 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"';
-
访问
http://ruoyi-nginx01/不停刷新 → 下一步 → 查询日志 → AUTO:15秒 开始刷新 -
不停访问
http://ruoyi-nginx01/和刷新,观察日志变化。

结语
通过本实战,你已经完成了从本地开发环境到阿里云上的完整迁移。所有操作都在阿里云控制台进行,适合快速部署和验证项目功能。
建议真正生产使用时,替换为自定义资源组、更详细的日志分析配置、更安全的网络策略。
