初始化 RuoYi-Cloud 主仓库

- 配置 Git Submodules 架构
- 添加 14 个子模块仓库
- 配置 .gitignore 排除构建产物和运行时数据
- 添加项目文档和配置文件
This commit is contained in:
孙小云 2026-01-09 15:21:26 +08:00
commit 9fbee987ab
288 changed files with 22897 additions and 0 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
custom: http://doc.ruoyi.vip/ruoyi-cloud/other/donate.html

59
.gitignore vendored Normal file
View File

@ -0,0 +1,59 @@
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
!*/build/*.java
!*/build/*.html
!*/build/*.xml
######################################################################
# Docker & Runtime Data
docker/mysql/data/
docker/mysql/db/*.sql
docker/nacos/logs/
docker/redis/data/
*.jar
!gradle/wrapper/gradle-wrapper.jar
!.mvn/wrapper/maven-wrapper.jar
# K8s generated files
k8s/**/secrets/

42
.gitmodules vendored Normal file
View File

@ -0,0 +1,42 @@
[submodule "ruoyi-gateway"]
path = ruoyi-gateway
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-gateway.git
[submodule "ruoyi-ui"]
path = ruoyi-ui
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-ui.git
[submodule "ruoyi-auth"]
path = ruoyi-auth
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-auth.git
[submodule "ruoyi-visual/ruoyi-monitor"]
path = ruoyi-visual/ruoyi-monitor
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-visual.git
[submodule "ruoyi-modules/ruoyi-file"]
path = ruoyi-modules/ruoyi-file
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-file.git
[submodule "ruoyi-modules/ruoyi-gen"]
path = ruoyi-modules/ruoyi-gen
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-gen.git
[submodule "ruoyi-modules/ruoyi-job"]
path = ruoyi-modules/ruoyi-job
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-job.git
[submodule "ruoyi-modules/ruoyi-system"]
path = ruoyi-modules/ruoyi-system
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-system.git
[submodule "ruoyi-modules/tuoheng-airline"]
path = ruoyi-modules/tuoheng-airline
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-airline.git
[submodule "ruoyi-modules/tuoheng-approval"]
path = ruoyi-modules/tuoheng-approval
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-approval.git
[submodule "ruoyi-modules/tuoheng-device"]
path = ruoyi-modules/tuoheng-device
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-device.git
[submodule "ruoyi-modules/tuoheng-fms"]
path = ruoyi-modules/tuoheng-fms
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-fms.git
[submodule "ruoyi-modules/tuoheng-media"]
path = ruoyi-modules/tuoheng-media
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-media.git
[submodule "ruoyi-modules/tuoheng-task"]
path = ruoyi-modules/tuoheng-task
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-task.git

42
.gitmodules.backup Normal file
View File

@ -0,0 +1,42 @@
[submodule "ruoyi-gateway"]
path = ruoyi-gateway
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-gateway.git
[submodule "ruoyi-ui"]
path = ruoyi-ui
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-ui.git
[submodule "ruoyi-auth"]
path = ruoyi-auth
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-auth.git
[submodule "ruoyi-visual/ruoyi-monitor"]
path = ruoyi-visual/ruoyi-monitor
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-visual.git
[submodule "ruoyi-modules/ruoyi-file"]
path = ruoyi-modules/ruoyi-file
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-file.git
[submodule "ruoyi-modules/ruoyi-gen"]
path = ruoyi-modules/ruoyi-gen
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-gen.git
[submodule "ruoyi-modules/ruoyi-job"]
path = ruoyi-modules/ruoyi-job
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-job.git
[submodule "ruoyi-modules/ruoyi-system"]
path = ruoyi-modules/ruoyi-system
url = http://th.local.t-aaron.com:13000/THENG/a-ruoyi-system.git
[submodule "ruoyi-modules/tuoheng-airline"]
path = ruoyi-modules/tuoheng-airline
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-airline.git
[submodule "ruoyi-modules/tuoheng-approval"]
path = ruoyi-modules/tuoheng-approval
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-approval.git
[submodule "ruoyi-modules/tuoheng-device"]
path = ruoyi-modules/tuoheng-device
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-device.git
[submodule "ruoyi-modules/tuoheng-fms"]
path = ruoyi-modules/tuoheng-fms
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-fms.git
[submodule "ruoyi-modules/tuoheng-media"]
path = ruoyi-modules/tuoheng-media
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-media.git
[submodule "ruoyi-modules/tuoheng-task"]
path = ruoyi-modules/tuoheng-task
url = http://th.local.t-aaron.com:13000/THENG/a-tuoheng-task.git

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 若依
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

129
README.md Normal file
View File

@ -0,0 +1,129 @@
<p align="center">
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-b99b286755aef70355a7084753f89cdb7c9.png">
</p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.6.7</h1>
<h4 align="center">基于 Vue/Element UI 和 Spring Boot/Spring Cloud & Alibaba 前后端分离的分布式微服务架构</h4>
<p align="center">
<a href="https://gitee.com/y_project/RuoYi-Cloud/stargazers"><img src="https://gitee.com/y_project/RuoYi-Cloud/badge/star.svg?theme=dark"></a>
<a href="https://gitee.com/y_project/RuoYi-Cloud"><img src="https://img.shields.io/badge/RuoYi-v3.6.7-brightgreen.svg"></a>
<a href="https://gitee.com/y_project/RuoYi-Cloud/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
</p>
## 平台简介
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
* 采用前后端分离的模式,微服务版本前端(基于 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue))。
* 后端采用Spring Boot、Spring Cloud & Alibaba。
* 注册中心、配置中心选型Nacos权限认证使用Redis。
* 流量控制框架选型Sentinel分布式事务选型Seata。
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Cloud-Vue3](https://gitcode.com/yangzongzhuan/RuoYi-Cloud-Vue3),保持同步更新。
* 如需不分离应用,请移步 [RuoYi](https://gitee.com/y_project/RuoYi),如需分离应用,请移步 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)
* 阿里云优惠券:[点我进入](http://aly.ruoyi.vip),腾讯云优惠券:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;
## 系统模块
~~~
com.ruoyi
├── ruoyi-ui // 前端框架 [80]
├── ruoyi-gateway // 网关模块 [8080]
├── ruoyi-auth // 认证中心 [9200]
├── ruoyi-api // 接口模块
│ └── ruoyi-api-system // 系统接口
├── ruoyi-common // 通用模块
│ └── ruoyi-common-core // 核心模块
│ └── ruoyi-common-datascope // 权限范围
│ └── ruoyi-common-datasource // 多数据源
│ └── ruoyi-common-log // 日志记录
│ └── ruoyi-common-redis // 缓存服务
│ └── ruoyi-common-seata // 分布式事务
│ └── ruoyi-common-security // 安全模块
│ └── ruoyi-common-sensitive // 数据脱敏
│ └── ruoyi-common-swagger // 系统接口
├── ruoyi-modules // 业务模块
│ └── ruoyi-system // 系统模块 [9201]
│ └── ruoyi-gen // 代码生成 [9202]
│ └── ruoyi-job // 定时任务 [9203]
│ └── ruoyi-file // 文件服务 [9300]
├── ruoyi-visual // 图形化管理模块
│ └── ruoyi-visual-monitor // 监控中心 [9100]
├──pom.xml // 公共依赖
~~~
## 架构图
<img src="https://oscimg.oschina.net/oscnet/up-82e9722ecb846786405a904bafcf19f73f3.png"/>
## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
8. 通知公告:系统通知公告信息发布维护。
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成前后端代码的生成java、html、xml、sql支持CRUD下载 。
14. 系统接口根据业务代码自动生成相关的api接口文档。
15. 服务监控监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 在线构建器拖动表单元素生成相应的HTML代码。
17. 连接池监视监视当前系统数据库连接池状态可进行分析SQL找出系统性能瓶颈。
## 在线体验
- admin/admin123
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址http://ruoyi.vip
文档地址http://doc.ruoyi.vip
## 演示图
<table>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-4148b24f58660a9dc347761e4cf6162f28f.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-ece3fd37a3d4bb75a3926e905a3c5629055.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-92ffb7f3835855cff100fa0f754a6be0d99.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-ff9e3066561574aca73005c5730c6a41f15.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
</tr>
</table>
## 若依微服务交流群
QQ群 [![加入QQ群](https://img.shields.io/badge/已满-42799195-blue.svg)](https://jq.qq.com/?_wv=1027&k=yqInfq0S) [![加入QQ群](https://img.shields.io/badge/已满-170157040-blue.svg)](https://jq.qq.com/?_wv=1027&k=Oy1mb3p8) [![加入QQ群](https://img.shields.io/badge/已满-130643120-blue.svg)](https://jq.qq.com/?_wv=1027&k=rvxkJtXK) [![加入QQ群](https://img.shields.io/badge/已满-225920371-blue.svg)](https://jq.qq.com/?_wv=1027&k=0Ck3PvTe) [![加入QQ群](https://img.shields.io/badge/已满-201705537-blue.svg)](https://jq.qq.com/?_wv=1027&k=FnHHP4TT) [![加入QQ群](https://img.shields.io/badge/已满-236543183-blue.svg)](https://jq.qq.com/?_wv=1027&k=qdT1Ojpz) [![加入QQ群](https://img.shields.io/badge/已满-213618602-blue.svg)](https://jq.qq.com/?_wv=1027&k=nw3OiyXs) [![加入QQ群](https://img.shields.io/badge/已满-148794840-blue.svg)](https://jq.qq.com/?_wv=1027&k=kiU5WDls) [![加入QQ群](https://img.shields.io/badge/已满-118752664-blue.svg)](https://jq.qq.com/?_wv=1027&k=MtBy6YfT) [![加入QQ群](https://img.shields.io/badge/已满-101038945-blue.svg)](https://jq.qq.com/?_wv=1027&k=FqImHgH2) [![加入QQ群](https://img.shields.io/badge/已满-128355254-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G4jZ4EtdT50PhnMBudTnEwgonxkXOscJ&authKey=FkGHYfoTKlGE6wHdKdjH9bVoOgQjtLP9WM%2Fj7pqGY1msoqw9uxDiBo39E2mLgzYg&noverify=0&group_code=128355254) [![加入QQ群](https://img.shields.io/badge/已满-179219821-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=irnwcXhbLOQEv1g-TwGifjNTA_f4wZiA&authKey=4bpzEwhcUY%2FvsPDHvzYn6xfoS%2FtOArvZ%2BGXzfr7O0%2FEqLfkKA%2BuCDXlzHIFg8t93&noverify=0&group_code=179219821) [![加入QQ群](https://img.shields.io/badge/已满-158753145-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=lx1uEdEDuxeM7rUvF3qmlFdqKqdJ5Z-R&authKey=rgyPW9yhhh4IIURKVFa6NgP3qiqH04WAzrJ0trsgkr3pjzm6sKIOGyA58oOjoj%2FJ&noverify=0&group_code=158753145) [![加入QQ群](https://img.shields.io/badge/112869560-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Kuaw0Xdlw2Nlgn6s8h9elzuquHGxGObD&authKey=cSrQcWQ%2BzQZAFFrwxaR%2BbzcumX4WRduZnd1O6JO1dlclQMiu%2BKwxAy8t2JfNp67V&noverify=0&group_code=112869560) 点击按钮入群。

12
bin/clean.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 清理工程target生成路径。
echo.
%~d0
cd %~dp0
cd ..
call mvn clean
pause

59
bin/clean.sh Executable file
View File

@ -0,0 +1,59 @@
#!/bin/bash
echo ""
echo "[信息] 清理所有target文件夹"
echo ""
# 切换到脚本所在目录
cd "$(dirname "$0")"
# 返回上级目录
cd ..
# 执行 Maven 清理
mvn clean
echo ""
echo "[信息] 清理 Docker 相关文件"
echo ""
# 清理 docker/mysql/data 文件夹下的内容
if [ -d "docker/mysql/data" ]; then
echo "清理 docker/mysql/data 文件夹..."
rm -rf docker/mysql/data/*
echo "docker/mysql/data 清理完成"
fi
# 清理 docker/nacos/logs 文件夹下的内容
if [ -d "docker/nacos/logs" ]; then
echo "清理 docker/nacos/logs 文件夹..."
rm -rf docker/nacos/logs/*
echo "docker/nacos/logs 清理完成"
fi
# 清理 docker/mysql/db 文件夹下的 .sql 文件
if [ -d "docker/mysql/db" ]; then
echo "清理 docker/mysql/db 文件夹下的 .sql 文件..."
rm -f docker/mysql/db/*.sql
echo "docker/mysql/db/*.sql 清理完成"
fi
# 清理 docker/nginx/html/dist 文件夹下的内容
if [ -d "docker/nginx/html/dist" ]; then
echo "清理 docker/nginx/html/dist 文件夹..."
rm -rf docker/nginx/html/dist/*
echo "docker/nginx/html/dist 清理完成"
fi
# 清理 docker 目录下的所有 .jar 文件
if [ -d "docker" ]; then
echo "清理 docker 目录下的所有 .jar 文件..."
find docker -name "*.jar" -type f -delete
echo "docker 目录下的 .jar 文件清理完成"
fi
echo ""
echo "[信息] 所有清理任务完成"
echo ""
echo "按任意键继续..."
read -n 1 -s -r

12
bin/package.bat Normal file
View File

@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 打包Web工程生成war/jar包文件。
echo.
%~d0
cd %~dp0
cd ..
call mvn clean package -Dmaven.test.skip=true
pause

18
bin/package.sh Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
echo ""
echo "[信息] 打包Web工程生成war/jar包文件"
echo ""
# 切换到脚本所在目录
cd "$(dirname "$0")"
# 返回上级目录
cd ..
# 执行 Maven 打包,跳过测试
mvn clean package -Dmaven.test.skip=true
#echo ""
echo "按任意键继续..."
#read -n 1 -s -r

14
bin/run-auth.bat Normal file
View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Auth工程。
echo.
cd %~dp0
cd ../ruoyi-auth/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-auth.jar
cd bin
pause

14
bin/run-gateway.bat Normal file
View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Gateway工程。
echo.
cd %~dp0
cd ../ruoyi-gateway/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-gateway.jar
cd bin
pause

14
bin/run-modules-file.bat Normal file
View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Modules-File工程。
echo.
cd %~dp0
cd ../ruoyi-modules/ruoyi-file/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-file.jar
cd bin
pause

14
bin/run-modules-gen.bat Normal file
View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Modules-Gen工程。
echo.
cd %~dp0
cd ../ruoyi-modules/ruoyi-gen/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-gen.jar
cd bin
pause

14
bin/run-modules-job.bat Normal file
View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Modules-Job工程。
echo.
cd %~dp0
cd ../ruoyi-modules/ruoyi-job/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-job.jar
cd bin
pause

View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Modules-System工程。
echo.
cd %~dp0
cd ../ruoyi-modules/ruoyi-system/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-system.jar
cd bin
pause

14
bin/run-monitor.bat Normal file
View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Monitor工程。
echo.
cd %~dp0
cd ../ruoyi-visual/ruoyi-monitor/target
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-visual-monitor.jar
cd bin
pause

10
docker/clear.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/sh
# 清理 docker 目录下的所有 jar 文件
echo "开始清理 docker 目录下的所有 jar 文件..."
# 查找并删除所有 jar 文件
find . -name "*.jar" -type f -delete
echo "清理完成!"
echo "已删除所有 jar 文件"

59
docker/copy.sh Executable file
View File

@ -0,0 +1,59 @@
#!/bin/sh
# 复制项目的文件到对应docker路径便于一键生成镜像。
usage() {
echo "Usage: sh copy.sh"
exit 1
}
# copy sql
echo "begin copy sql "
cp ../sql/ry_20250523.sql ./mysql/db
cp ../sql/ry_config_20250902.sql ./mysql/db
# copy html
echo "begin copy html "
cp -r ../ruoyi-ui/dist/** ./nginx/html/dist
# copy jar
echo "begin copy ruoyi-gateway "
cp ../ruoyi-gateway/target/ruoyi-gateway.jar ./ruoyi/gateway/jar
echo "begin copy ruoyi-auth "
cp ../ruoyi-auth/target/ruoyi-auth.jar ./ruoyi/auth/jar
echo "begin copy ruoyi-visual "
cp ../ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar ./ruoyi/visual/monitor/jar
echo "begin copy ruoyi-modules-system "
cp ../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar ./ruoyi/modules/system/jar
echo "begin copy ruoyi-modules-file "
cp ../ruoyi-modules/ruoyi-file/target/ruoyi-modules-file.jar ./ruoyi/modules/file/jar
echo "begin copy ruoyi-modules-job "
cp ../ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar ./ruoyi/modules/job/jar
echo "begin copy ruoyi-modules-gen "
cp ../ruoyi-modules/ruoyi-gen/target/ruoyi-modules-gen.jar ./ruoyi/modules/gen/jar
echo "begin copy tuoheng-approval "
cp ../ruoyi-modules/tuoheng-approval/target/tuoheng-approval.jar ./ruoyi/modules/approval/jar
echo "begin copy tuoheng-device "
cp ../ruoyi-modules/tuoheng-device/target/tuoheng-device.jar ./ruoyi/modules/device/jar
echo "begin copy tuoheng-airline "
cp ../ruoyi-modules/tuoheng-airline/target/tuoheng-airline.jar ./ruoyi/modules/airline/jar
echo "begin copy tuoheng-task "
cp ../ruoyi-modules/tuoheng-task/target/tuoheng-task.jar ./ruoyi/modules/task/jar
echo "begin copy tuoheng-fms "
cp ../ruoyi-modules/tuoheng-fms/target/tuoheng-fms.jar ./ruoyi/modules/fms/jar
echo "begin copy tuoheng-media "
cp ../ruoyi-modules/tuoheng-media/target/tuoheng-media.jar ./ruoyi/modules/media/jar

83
docker/deploy.sh Normal file
View File

@ -0,0 +1,83 @@
#!/bin/sh
# 使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [port|base|modules|stop|rm]"
exit 1
}
# 开启所需端口
port(){
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=8848/tcp --permanent
firewall-cmd --add-port=9848/tcp --permanent
firewall-cmd --add-port=9849/tcp --permanent
firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --add-port=9100/tcp --permanent
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9201/tcp --permanent
firewall-cmd --add-port=9202/tcp --permanent
firewall-cmd --add-port=9203/tcp --permanent
firewall-cmd --add-port=9204/tcp --permanent
firewall-cmd --add-port=9205/tcp --permanent
firewall-cmd --add-port=9206/tcp --permanent
firewall-cmd --add-port=9207/tcp --permanent
firewall-cmd --add-port=9208/tcp --permanent
firewall-cmd --add-port=9209/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent
service firewalld restart
}
# 启动基础环境(必须)
docker-compose build --no-cache ruoyi-mysql && docker-compose up -d ruoyi-mysql
docker-compose build --no-cache ruoyi-redis && docker-compose up -d ruoyi-redis
docker-compose build --no-cache ruoyi-nacos && docker-compose up -d ruoyi-nacos
docker-compose build --no-cache ruoyi-gateway && docker-compose up -d ruoyi-gateway
docker-compose build --no-cache ruoyi-nginx && docker-compose up -d ruoyi-nginx
docker-compose build --no-cache ruoyi-auth && docker-compose up -d ruoyi-auth
docker-compose build --no-cache ruoyi-modules-system && docker-compose up -d ruoyi-modules-system
docker-compose build --no-cache ruoyi-modules-gen && docker-compose up -d ruoyi-modules-gen
docker-compose build --no-cache ruoyi-modules-job && docker-compose up -d ruoyi-modules-job
docker-compose build --no-cache ruoyi-modules-file && docker-compose up -d ruoyi-modules-file
docker-compose build --no-cache ruoyi-visual-monitor && docker-compose up -d ruoyi-visual-monitor
docker-compose build --no-cache tuoheng-modules-approval && docker-compose up -d tuoheng-modules-approval
docker-compose build --no-cache tuoheng-modules-device && docker-compose up -d tuoheng-modules-device
docker-compose build --no-cache tuoheng-modules-airline && docker-compose up -d tuoheng-modules-airline
docker-compose build --no-cache tuoheng-modules-task && docker-compose up -d tuoheng-modules-task
docker-compose build --no-cache tuoheng-modules-fms && docker-compose up -d tuoheng-modules-fms
docker-compose build --no-cache tuoheng-modules-media && docker-compose up -d tuoheng-modules-media
# 关闭所有环境/模块
stop(){
docker-compose stop
}
# 删除所有环境/模块
rm(){
docker-compose rm
docker-compose down
}
# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"port")
port
;;
"base")
base
;;
"modules")
modules
;;
"stop")
stop
;;
"rm")
rm
;;
*)
usage
;;
esac

231
docker/docker-compose.yml Normal file
View File

@ -0,0 +1,231 @@
version : '3.8'
services:
ruoyi-nacos:
container_name: ruoyi-nacos
image: nacos-runtime
build:
context: ./nacos
environment:
- MODE=standalone
volumes:
- ./nacos/logs/:/home/nacos/logs
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
depends_on:
- ruoyi-mysql
ruoyi-mysql:
container_name: ruoyi-mysql
image: mysql-runtime
build:
context: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/logs
- ./mysql/data:/var/lib/mysql
command: [
'mysqld',
'--innodb-buffer-pool-size=80M',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
'--default-time-zone=+8:00',
'--lower-case-table-names=1'
]
environment:
MYSQL_DATABASE: 'ry-cloud'
MYSQL_ROOT_PASSWORD: password
ruoyi-redis:
container_name: ruoyi-redis
image: redis-runtime
build:
context: ./redis
ports:
- "6379:6379"
volumes:
- ./redis/conf/redis.conf:/home/ruoyi/redis/redis.conf
- ./redis/data:/data
command: redis-server /home/ruoyi/redis/redis.conf
ruoyi-nginx:
container_name: ruoyi-nginx
image: nginx-runtime
build:
context: ./nginx
ports:
- "80:80"
volumes:
- ./nginx/html/dist:/home/ruoyi/projects/ruoyi-ui
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- ruoyi-gateway
links:
- ruoyi-gateway
ruoyi-gateway:
container_name: ruoyi-gateway
image: gateway-runtime
build:
context: ./ruoyi/gateway
dockerfile: dockerfile
ports:
- "8080:8080"
depends_on:
- ruoyi-redis
links:
- ruoyi-redis
ruoyi-auth:
container_name: ruoyi-auth
image: ruoyi-auth-runtime
build:
context: ./ruoyi/auth
dockerfile: dockerfile
ports:
- "9200:9200"
depends_on:
- ruoyi-redis
links:
- ruoyi-redis
ruoyi-modules-system:
container_name: ruoyi-modules-system
image: ruoyi-modules-system-runtime
build:
context: ./ruoyi/modules/system
dockerfile: dockerfile
ports:
- "9201:9201"
depends_on:
- ruoyi-redis
- ruoyi-mysql
links:
- ruoyi-redis
- ruoyi-mysql
ruoyi-modules-gen:
container_name: ruoyi-modules-gen
image: ruoyi-modules-gen-runtime
build:
context: ./ruoyi/modules/gen
dockerfile: dockerfile
ports:
- "9202:9202"
depends_on:
- ruoyi-mysql
links:
- ruoyi-mysql
ruoyi-modules-job:
container_name: ruoyi-modules-job
image: ruoyi-modules-job-runtime
build:
context: ./ruoyi/modules/job
dockerfile: dockerfile
ports:
- "9203:9203"
depends_on:
- ruoyi-mysql
links:
- ruoyi-mysql
ruoyi-modules-file:
container_name: ruoyi-modules-file
image: ruoyi-modules-file-runtime
build:
context: ./ruoyi/modules/file
dockerfile: dockerfile
ports:
- "9300:9300"
volumes:
- ./ruoyi/uploadPath:/home/ruoyi/uploadPath
ruoyi-visual-monitor:
container_name: ruoyi-visual-monitor
image: ruoyi-visual-monitor-runtime
build:
context: ./ruoyi/visual/monitor
dockerfile: dockerfile
ports:
- "9100:9100"
tuoheng-modules-approval:
container_name: tuoheng-modules-approval
image: tuoheng-modules-approval-runtime
build:
context: ./ruoyi/modules/approval
dockerfile: dockerfile
ports:
- "9204:9201"
depends_on:
- ruoyi-redis
- ruoyi-mysql
links:
- ruoyi-redis
- ruoyi-mysql
tuoheng-modules-device:
container_name: tuoheng-modules-device
image: tuoheng-modules-device-runtime
build:
context: ./ruoyi/modules/device
dockerfile: dockerfile
ports:
- "9205:9201"
depends_on:
- ruoyi-redis
- ruoyi-mysql
links:
- ruoyi-redis
- ruoyi-mysql
tuoheng-modules-airline:
container_name: tuoheng-modules-airline
image: tuoheng-modules-airline-runtime
build:
context: ./ruoyi/modules/airline
dockerfile: dockerfile
ports:
- "9206:9201"
depends_on:
- ruoyi-redis
- ruoyi-mysql
links:
- ruoyi-redis
- ruoyi-mysql
tuoheng-modules-task:
container_name: tuoheng-modules-task
image: tuoheng-modules-task-runtime
build:
context: ./ruoyi/modules/task
dockerfile: dockerfile
ports:
- "9207:9201"
depends_on:
- ruoyi-redis
- ruoyi-mysql
links:
- ruoyi-redis
- ruoyi-mysql
tuoheng-modules-fms:
container_name: tuoheng-modules-fms
image: tuoheng-modules-fms-runtime
build:
context: ./ruoyi/modules/fms
dockerfile: dockerfile
ports:
- "9208:9201"
depends_on:
- ruoyi-redis
- ruoyi-mysql
links:
- ruoyi-redis
- ruoyi-mysql
tuoheng-modules-media:
container_name: tuoheng-modules-media
image: tuoheng-modules-media-runtime
build:
context: ./ruoyi/modules/media
dockerfile: dockerfile
ports:
- "9209:9201"
depends_on:
- ruoyi-redis
- ruoyi-mysql
links:
- ruoyi-redis
- ruoyi-mysql

View File

@ -0,0 +1 @@
存放sql目录下的所有脚本用于docker自动执行。

7
docker/mysql/dockerfile Normal file
View File

@ -0,0 +1,7 @@
# 基础镜像
FROM registry.t-aaron.com/mysql:8.0
# author
MAINTAINER ruoyi
# 执行sql脚本
ADD ./db/*.sql /docker-entrypoint-initdb.d/

View File

@ -0,0 +1,32 @@
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://ruoyi-mysql:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
db.user=root
db.password=password
nacos.naming.empty-service.auto-clean=true
nacos.naming.empty-service.clean.initial-delay-ms=50000
nacos.naming.empty-service.clean.period-time-ms=30000
management.endpoints.web.exposure.include=*
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=/home/ruoyi/nacos/tomcat/logs
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=false
nacos.core.auth.default.token.expire.seconds=18000
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.istio.mcp.server.enabled=false

7
docker/nacos/dockerfile Normal file
View File

@ -0,0 +1,7 @@
# 基础镜像
FROM registry.t-aaron.com/nacos/nacos-server:v2.5.2
# author
MAINTAINER ruoyi
# 复制conf文件到路径
COPY ./conf/application.properties /home/nacos/conf/application.properties

View File

@ -0,0 +1,41 @@
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /home/ruoyi/projects/ruoyi-ui;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://ruoyi-gateway:8080/;
}
# 避免actuator暴露
if ($uri ~ "/actuator") {
return 403;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

15
docker/nginx/dockerfile Normal file
View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/nginx:latest
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi/projects/ruoyi-ui
# 创建目录
RUN mkdir -p /home/ruoyi/projects/ruoyi-ui
# 指定路径
WORKDIR /home/ruoyi/projects/ruoyi-ui
# 复制conf文件到路径
COPY ./conf/nginx.conf /etc/nginx/nginx.conf
# 复制html文件到路径
COPY ./html/dist /home/ruoyi/projects/ruoyi-ui

View File

@ -0,0 +1 @@
# requirepass 123456

13
docker/redis/dockerfile Normal file
View File

@ -0,0 +1,13 @@
# 基础镜像
FROM registry.t-aaron.com/redis:latest
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi/redis
# 创建目录
RUN mkdir -p /home/ruoyi/redis
# 指定路径
WORKDIR /home/ruoyi/redis
# 复制conf文件到路径
COPY ./conf/redis.conf /home/ruoyi/redis/redis.conf

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-auth.jar /home/ruoyi/ruoyi-auth.jar
# 启动认证服务
ENTRYPOINT ["java","-jar","ruoyi-auth.jar"]

View File

@ -0,0 +1 @@
存放认证中心打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-gateway.jar /home/ruoyi/ruoyi-gateway.jar
# 启动网关服务
ENTRYPOINT ["java","-jar","ruoyi-gateway.jar"]

View File

@ -0,0 +1 @@
存放网关模块打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER tuoheng
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/tuoheng-airline.jar /home/ruoyi/tuoheng-airline.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","tuoheng-airline.jar"]

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER tuoheng
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/tuoheng-approval.jar /home/ruoyi/tuoheng-approval.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","tuoheng-approval.jar"]

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER tuoheng
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/tuoheng-device.jar /home/ruoyi/tuoheng-device.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","tuoheng-device.jar"]

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-modules-file.jar /home/ruoyi/ruoyi-modules-file.jar
# 启动文件服务
ENTRYPOINT ["java","-jar","ruoyi-modules-file.jar"]

View File

@ -0,0 +1 @@
存放文件服务打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER tuoheng
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/tuoheng-fms.jar /home/ruoyi/tuoheng-fms.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","tuoheng-fms.jar"]

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-modules-gen.jar /home/ruoyi/ruoyi-modules-gen.jar
# 启动代码生成服务
ENTRYPOINT ["java","-jar","ruoyi-modules-gen.jar"]

View File

@ -0,0 +1 @@
存放代码生成打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-modules-job.jar /home/ruoyi/ruoyi-modules-job.jar
# 启动定时任务服务
ENTRYPOINT ["java","-jar","ruoyi-modules-job.jar"]

View File

@ -0,0 +1 @@
存放定时任务打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER tuoheng
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/tuoheng-media.jar /home/ruoyi/tuoheng-media.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","tuoheng-media.jar"]

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-modules-system.jar /home/ruoyi/ruoyi-modules-system.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","ruoyi-modules-system.jar"]

View File

@ -0,0 +1 @@
存放系统模块打包好的jar文件用于docker启动应用。

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER tuoheng
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/tuoheng-task.jar /home/ruoyi/tuoheng-task.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","tuoheng-task.jar"]

View File

@ -0,0 +1,15 @@
# 基础镜像
FROM registry.t-aaron.com/eclipse-temurin:21.0.9_10-jre-alpine-3.23
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-visual-monitor.jar /home/ruoyi/ruoyi-visual-monitor.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","ruoyi-visual-monitor.jar"]

View File

@ -0,0 +1 @@
存放监控中心打包好的jar文件用于docker启动应用。

27
k8s/00-init/README.md Normal file
View File

@ -0,0 +1,27 @@
# 00-初始化环境
## 说明
初始化 Kubernetes 环境,创建 `ruoyi` 命名空间。
## 文件说明
- `namespace.yaml` - 命名空间配置
- `deploy.sh` - 部署脚本
## 部署步骤
```bash
# 进入目录
cd 00-init
# 执行部署脚本
./deploy.sh
```
## 验证
```bash
# 查看命名空间
kubectl get namespace ruoyi
```

37
k8s/00-init/deploy.sh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/bash
set -e
echo "=========================================="
echo "初始化 Kubernetes 环境"
echo "=========================================="
# 创建命名空间
echo "创建命名空间 ruoyi..."
kubectl apply -f namespace.yaml
# 等待一下确保资源创建完成
sleep 2
# 检查命名空间是否创建成功
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
if kubectl get namespace ruoyi &> /dev/null; then
echo "✓ 命名空间 ruoyi 创建成功"
kubectl get namespace ruoyi
echo ""
echo "=========================================="
echo "✓ 初始化完成!"
echo "=========================================="
exit 0
else
echo "✗ 命名空间创建失败"
echo ""
echo "=========================================="
echo "✗ 初始化失败!"
echo "=========================================="
exit 1
fi

View File

@ -0,0 +1,6 @@
apiVersion: v1
kind: Namespace
metadata:
name: ruoyi
labels:
name: ruoyi

60
k8s/01-mysql/README.md Normal file
View File

@ -0,0 +1,60 @@
# 01-MySQL 部署
## 说明
部署 MySQL 数据库服务,使用 StatefulSet 保证数据持久化。
## 部署流程
1. **复制 SQL 文件** - 将 SQL 文件复制到 docker/mysql/db 目录
2. **构建镜像** - 使用 docker-compose 构建包含 SQL 的 MySQL 镜像
3. **部署到 K8s** - 部署 Service 和 StatefulSet
4. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-mysql
- **端口**: 3306
- **存储**: 10Gi PVC
- **密码**: password
- **数据库**: ry-cloud
- **镜像**: mysql-runtime通过 docker-compose 构建)
## 文件说明
- `service.yaml` - MySQL Service 配置
- `statefulset.yaml` - MySQL StatefulSet 配置
- `deploy.sh` - 一键部署脚本(包含镜像构建)
## 部署步骤
```bash
# 进入目录
cd 01-mysql
# 执行部署脚本(会自动复制 SQL、构建镜像、部署到 K8s
./deploy.sh
```
## 验证
```bash
# 查看 Pod 状态
kubectl get pods -n ruoyi -l app=mysql
# 查看 Service
kubectl get svc -n ruoyi ruoyi-mysql
# 查看 PVC
kubectl get pvc -n ruoyi
```
## 连接测试
```bash
# 进入 MySQL Pod
kubectl exec -it mysql-0 -n ruoyi -- mysql -uroot -ppassword
# 查看数据库
SHOW DATABASES;
```

173
k8s/01-mysql/deploy.sh Executable file
View File

@ -0,0 +1,173 @@
#!/bin/bash
set -e
DOCKER_DIR="../../docker"
SQL_DIR="../../sql"
echo "=========================================="
echo "部署 MySQL"
echo "=========================================="
# 检查是否需要清理旧数据
echo ""
echo "检查现有 MySQL 部署..."
if kubectl get statefulset mysql -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 MySQL 部署,自动清理..."
echo "删除旧的 MySQL StatefulSet..."
kubectl delete statefulset mysql -n ruoyi --ignore-not-found=true
echo "删除旧的 MySQL Service..."
kubectl delete service ruoyi-mysql -n ruoyi --ignore-not-found=true
echo "删除旧的 PVC数据将被清空..."
kubectl delete pvc -l app=mysql -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧数据清理完成"
fi
echo ""
# 步骤 1: 复制 SQL 文件
echo "步骤 1: 复制 SQL 文件到 docker/mysql/db..."
cp "$SQL_DIR/ry_20250523.sql" "$DOCKER_DIR/mysql/db/"
cp "$SQL_DIR/ry_config_20250902.sql" "$DOCKER_DIR/mysql/db/"
echo "✓ SQL 文件复制完成"
# 步骤 2: 构建 MySQL 镜像
echo ""
echo "步骤 2: 构建 MySQL 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-mysql
if [ $? -eq 0 ]; then
echo "✓ MySQL 镜像构建完成"
else
echo "✗ MySQL 镜像构建失败"
exit 1
fi
# 步骤 2.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(镜像较大,可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/mysql-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" mysql-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 3: 部署到 K8s
echo ""
echo "步骤 3: 部署到 Kubernetes..."
cd -
kubectl apply -f service.yaml
kubectl apply -f statefulset.yaml
# 步骤 4: 等待 Pod 启动
echo ""
echo "步骤 4: 等待 MySQL Pod 启动..."
kubectl wait --for=condition=ready pod -l app=mysql -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ MySQL Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 MySQL Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=mysql -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ MySQL Pod 运行正常"
kubectl get pods -n ruoyi -l app=mysql
else
echo "✗ MySQL Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=mysql
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 MySQL Service 状态..."
if kubectl get svc ruoyi-mysql -n ruoyi &> /dev/null; then
echo "✓ MySQL Service 创建成功"
kubectl get svc -n ruoyi ruoyi-mysql
else
echo "✗ MySQL Service 创建失败"
exit 1
fi
echo ""
# 检查 PVC 状态
echo "检查 MySQL PVC 状态..."
PVC_STATUS=$(kubectl get pvc -n ruoyi -l app=mysql -o jsonpath='{.items[0].status.phase}')
if [ "$PVC_STATUS" == "Bound" ]; then
echo "✓ MySQL PVC 绑定成功"
kubectl get pvc -n ruoyi -l app=mysql
else
echo "✗ MySQL PVC 状态异常: $PVC_STATUS"
kubectl get pvc -n ruoyi -l app=mysql
exit 1
fi
echo ""
echo "=========================================="
echo "✓ MySQL 部署完成!"
echo "=========================================="
echo ""
echo "连接信息:"
echo " Service: ruoyi-mysql.ruoyi.svc.cluster.local"
echo " 端口: 3306"
echo " 用户: root"
echo " 密码: password"
echo " 数据库: ry-cloud"
echo ""
exit 0

13
k8s/01-mysql/service.yaml Normal file
View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-mysql
namespace: ruoyi
spec:
ports:
- port: 3306
targetPort: 3306
name: mysql
selector:
app: mysql
clusterIP: None

View File

@ -0,0 +1,45 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: ruoyi
spec:
serviceName: ruoyi-mysql
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql-runtime
imagePullPolicy: Never
ports:
- containerPort: 3306
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
- name: MYSQL_DATABASE
value: "ry-cloud"
args:
- --innodb-buffer-pool-size=80M
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-time-zone=+8:00
- --lower-case-table-names=1
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi

45
k8s/02-redis/README.md Normal file
View File

@ -0,0 +1,45 @@
# 02-Redis 部署
## 说明
部署 Redis 缓存服务,使用 StatefulSet 保证数据持久化。
## 部署流程
1. **构建镜像** - 使用 docker-compose 构建 Redis 镜像
2. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
3. **部署到 K8s** - 部署 Service 和 StatefulSet
4. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-redis
- **端口**: 6379
- **存储**: 5Gi PVC
- **镜像**: redis-runtime通过 docker-compose 构建)
## 文件说明
- `service.yaml` - Redis Service 配置
- `statefulset.yaml` - Redis StatefulSet 配置
- `deploy.sh` - 一键部署脚本(包含镜像构建)
## 部署步骤
```bash
# 进入目录
cd 02-redis
# 执行部署脚本
./deploy.sh
```
## 验证
```bash
# 查看 Pod 状态
kubectl get pods -n ruoyi -l app=redis
# 测试 Redis 连接
kubectl exec -it redis-0 -n ruoyi -- redis-cli ping
```

166
k8s/02-redis/deploy.sh Executable file
View File

@ -0,0 +1,166 @@
#!/bin/bash
set -e
DOCKER_DIR="../../docker"
echo "=========================================="
echo "部署 Redis"
echo "=========================================="
# 检查是否需要清理旧数据
echo ""
echo "检查现有 Redis 部署..."
if kubectl get statefulset redis -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Redis 部署"
echo ""
read -p "是否删除旧的 Redis 部署和数据?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "删除旧的 Redis StatefulSet..."
kubectl delete statefulset redis -n ruoyi --ignore-not-found=true
echo "删除旧的 Redis Service..."
kubectl delete service ruoyi-redis -n ruoyi --ignore-not-found=true
echo "删除旧的 PVC数据将被清空..."
kubectl delete pvc -l app=redis -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧数据清理完成"
else
echo "⚠️ 保留旧数据"
fi
fi
echo ""
# 步骤 1: 构建 Redis 镜像
echo "步骤 1: 构建 Redis 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-redis
if [ $? -eq 0 ]; then
echo "✓ Redis 镜像构建完成"
else
echo "✗ Redis 镜像构建失败"
exit 1
fi
# 步骤 1.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/redis-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" redis-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 2: 部署到 K8s
echo ""
echo "步骤 2: 部署到 Kubernetes..."
cd -
kubectl apply -f service.yaml
kubectl apply -f statefulset.yaml
# 步骤 3: 等待 Pod 启动
echo ""
echo "步骤 3: 等待 Redis Pod 启动..."
kubectl wait --for=condition=ready pod -l app=redis -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Redis Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Redis Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=redis -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Redis Pod 运行正常"
kubectl get pods -n ruoyi -l app=redis
else
echo "✗ Redis Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=redis
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Redis Service 状态..."
if kubectl get svc ruoyi-redis -n ruoyi &> /dev/null; then
echo "✓ Redis Service 创建成功"
kubectl get svc -n ruoyi ruoyi-redis
else
echo "✗ Redis Service 创建失败"
exit 1
fi
echo ""
# 检查 PVC 状态
echo "检查 Redis PVC 状态..."
PVC_STATUS=$(kubectl get pvc -n ruoyi -l app=redis -o jsonpath='{.items[0].status.phase}')
if [ "$PVC_STATUS" == "Bound" ]; then
echo "✓ Redis PVC 绑定成功"
kubectl get pvc -n ruoyi -l app=redis
else
echo "✗ Redis PVC 状态异常: $PVC_STATUS"
kubectl get pvc -n ruoyi -l app=redis
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Redis 部署完成!"
echo "=========================================="
echo ""
echo "连接信息:"
echo " Service: ruoyi-redis.ruoyi.svc.cluster.local"
echo " 端口: 6379"
echo ""
exit 0

13
k8s/02-redis/service.yaml Normal file
View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-redis
namespace: ruoyi
spec:
ports:
- port: 6379
targetPort: 6379
name: redis
selector:
app: redis
clusterIP: None

View File

@ -0,0 +1,39 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
namespace: ruoyi
spec:
serviceName: ruoyi-redis
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
securityContext:
fsGroup: 999
containers:
- name: redis
image: redis-runtime
imagePullPolicy: Never
securityContext:
runAsUser: 999
runAsGroup: 999
ports:
- containerPort: 6379
name: redis
volumeMounts:
- name: redis-data
mountPath: /var/lib/redis
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi

46
k8s/03-nacos/README.md Normal file
View File

@ -0,0 +1,46 @@
# 03-Nacos 部署
## 说明
部署 Nacos 服务注册与配置中心,使用 StatefulSet 保证数据持久化。
## 部署流程
1. **构建镜像** - 使用 docker-compose 构建 Nacos 镜像
2. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
3. **部署到 K8s** - 部署 Service 和 StatefulSet
4. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-nacos
- **端口**: 8848 (HTTP), 9848 (Client RPC), 9849 (Raft RPC)
- **存储**: 5Gi PVC
- **模式**: standalone单机模式
- **镜像**: nacos-runtime通过 docker-compose 构建)
## 文件说明
- `service.yaml` - Nacos Service 配置
- `statefulset.yaml` - Nacos StatefulSet 配置
- `deploy.sh` - 一键部署脚本(包含镜像构建)
## 部署步骤
```bash
# 进入目录
cd 03-nacos
# 执行部署脚本
./deploy.sh
```
## 验证
```bash
# 查看 Pod 状态
kubectl get pods -n ruoyi -l app=nacos
# 查看 Nacos 日志
kubectl logs -f nacos-0 -n ruoyi
```

168
k8s/03-nacos/deploy.sh Executable file
View File

@ -0,0 +1,168 @@
#!/bin/bash
set -e
DOCKER_DIR="../../docker"
echo "=========================================="
echo "部署 Nacos"
echo "=========================================="
# 检查是否需要清理旧数据
echo ""
echo "检查现有 Nacos 部署..."
if kubectl get statefulset nacos -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Nacos 部署"
echo ""
read -p "是否删除旧的 Nacos 部署和数据?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "删除旧的 Nacos StatefulSet..."
kubectl delete statefulset nacos -n ruoyi --ignore-not-found=true
echo "删除旧的 Nacos Service..."
kubectl delete service ruoyi-nacos -n ruoyi --ignore-not-found=true
echo "删除旧的 PVC数据将被清空..."
kubectl delete pvc -l app=nacos -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧数据清理完成"
else
echo "⚠️ 保留旧数据"
fi
fi
echo ""
# 步骤 1: 构建 Nacos 镜像
echo "步骤 1: 构建 Nacos 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-nacos
if [ $? -eq 0 ]; then
echo "✓ Nacos 镜像构建完成"
else
echo "✗ Nacos 镜像构建失败"
exit 1
fi
# 步骤 1.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/nacos-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" nacos-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 10 分钟
COUNT=0
MAX_COUNT=300
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 10 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 2: 部署到 K8s
echo ""
echo "步骤 2: 部署到 Kubernetes..."
cd -
kubectl apply -f service.yaml
kubectl apply -f statefulset.yaml
# 步骤 3: 等待 Pod 启动
echo ""
echo "步骤 3: 等待 Nacos Pod 启动..."
kubectl wait --for=condition=ready pod -l app=nacos -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Nacos Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Nacos Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=nacos -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Nacos Pod 运行正常"
kubectl get pods -n ruoyi -l app=nacos
else
echo "✗ Nacos Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=nacos
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Nacos Service 状态..."
if kubectl get svc ruoyi-nacos -n ruoyi &> /dev/null; then
echo "✓ Nacos Service 创建成功"
kubectl get svc -n ruoyi ruoyi-nacos
else
echo "✗ Nacos Service 创建失败"
exit 1
fi
echo ""
# 检查 PVC 状态
echo "检查 Nacos PVC 状态..."
PVC_STATUS=$(kubectl get pvc -n ruoyi -l app=nacos -o jsonpath='{.items[0].status.phase}')
if [ "$PVC_STATUS" == "Bound" ]; then
echo "✓ Nacos PVC 绑定成功"
kubectl get pvc -n ruoyi -l app=nacos
else
echo "✗ Nacos PVC 状态异常: $PVC_STATUS"
kubectl get pvc -n ruoyi -l app=nacos
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Nacos 部署完成!"
echo "=========================================="
echo ""
echo "连接信息:"
echo " Service: ruoyi-nacos.ruoyi.svc.cluster.local"
echo " HTTP 端口: 8848"
echo " Client RPC 端口: 9848"
echo " Raft RPC 端口: 9849"
echo ""
exit 0

19
k8s/03-nacos/service.yaml Normal file
View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-nacos
namespace: ruoyi
spec:
ports:
- port: 8848
targetPort: 8848
name: http
- port: 9848
targetPort: 9848
name: client-rpc
- port: 9849
targetPort: 9849
name: raft-rpc
selector:
app: nacos
clusterIP: None

View File

@ -0,0 +1,41 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos
namespace: ruoyi
spec:
serviceName: ruoyi-nacos
replicas: 1
selector:
matchLabels:
app: nacos
template:
metadata:
labels:
app: nacos
spec:
containers:
- name: nacos
image: nacos-runtime
imagePullPolicy: Never
ports:
- containerPort: 8848
name: http
- containerPort: 9848
name: client-rpc
- containerPort: 9849
name: raft-rpc
env:
- name: MODE
value: "standalone"
volumeMounts:
- name: nacos-data
mountPath: /var/lib/nacos/logs
volumeClaimTemplates:
- metadata:
name: nacos-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi

43
k8s/04-gateway/README.md Normal file
View File

@ -0,0 +1,43 @@
# 04-Gateway 部署
## 说明
部署 Gateway 网关服务,作为系统的统一入口。
## 部署流程
1. **复制 jar 文件** - 复制编译好的 jar 到 docker 目录
2. **构建镜像** - 使用 docker-compose 构建 Gateway 镜像
3. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
4. **部署到 K8s** - 部署 Service 和 Deployment
5. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-gateway
- **端口**: 8080
- **NodePort**: 30080外部访问端口
- **镜像**: gateway-runtime
## 文件说明
- `service.yaml` - Gateway Service 配置NodePort
- `deployment.yaml` - Gateway Deployment 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 04-gateway
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 通过 NodePort 访问
http://localhost:30080
```

164
k8s/04-gateway/deploy.sh Executable file
View File

@ -0,0 +1,164 @@
#!/bin/bash
set -e
DOCKER_DIR="../../docker"
echo "=========================================="
echo "部署 Gateway"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 Gateway 部署..."
if kubectl get deployment gateway -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Gateway 部署,自动清理..."
echo "删除旧的 Gateway Deployment..."
kubectl delete deployment gateway -n ruoyi --ignore-not-found=true
echo "删除旧的 Gateway Service..."
kubectl delete service ruoyi-gateway -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 Gateway
echo "步骤 1: 打包 Gateway jar..."
cd ../../bin
sh package.sh ruoyi-gateway
if [ $? -eq 0 ]; then
echo "✓ Gateway 打包完成"
else
echo "✗ Gateway 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 Gateway jar 文件..."
cd -
cp ../../ruoyi-gateway/target/ruoyi-gateway.jar "$DOCKER_DIR/ruoyi/gateway/jar/"
echo "✓ jar 文件复制完成"
# 步骤 5: 构建 Gateway 镜像
echo ""
echo "步骤 3: 构建 Gateway 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-gateway
if [ $? -eq 0 ]; then
echo "✓ Gateway 镜像构建完成"
else
echo "✗ Gateway 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/gateway-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" gateway-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 5: 部署到 K8s
echo ""
echo "步骤 3: 部署到 Kubernetes..."
cd -
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 4: 等待 Gateway Pod 启动..."
kubectl wait --for=condition=ready pod -l app=gateway -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Gateway Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Gateway Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=gateway -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Gateway Pod 运行正常"
kubectl get pods -n ruoyi -l app=gateway
else
echo "✗ Gateway Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=gateway
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Gateway Service 状态..."
if kubectl get svc ruoyi-gateway -n ruoyi &> /dev/null; then
echo "✓ Gateway Service 创建成功"
kubectl get svc -n ruoyi ruoyi-gateway
else
echo "✗ Gateway Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Gateway 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-gateway.ruoyi.svc.cluster.local"
echo " 端口: 8080"
echo " NodePort: 30080"
echo " 访问地址: http://localhost:30080"
echo ""
exit 0

View File

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: gateway
template:
metadata:
labels:
app: gateway
spec:
containers:
- name: gateway
image: gateway-runtime
imagePullPolicy: Never
ports:
- containerPort: 8080
name: http

View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-gateway
namespace: ruoyi
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30080
name: http
selector:
app: gateway

44
k8s/05-nginx/README.md Normal file
View File

@ -0,0 +1,44 @@
# 05-Nginx 部署
## 说明
部署 Nginx 前端服务,提供静态资源访问和反向代理。
## 部署流程
1. **构建前端** - 在 ruoyi-ui 目录执行 npm run build:prod
2. **复制 dist** - 复制构建产物到 docker/nginx/html
3. **构建镜像** - 使用 docker-compose 构建 Nginx 镜像
4. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
5. **部署到 K8s** - 部署 Service 和 Deployment
6. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-nginx
- **端口**: 80
- **NodePort**: 30080外部访问端口
- **镜像**: nginx-runtime
## 文件说明
- `service.yaml` - Nginx Service 配置NodePort
- `deployment.yaml` - Nginx Deployment 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 05-nginx
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 通过 NodePort 访问
http://localhost:30080
```

174
k8s/05-nginx/deploy.sh Executable file
View File

@ -0,0 +1,174 @@
#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
UI_DIR="$SCRIPT_DIR/../../ruoyi-ui"
echo "=========================================="
echo "部署 Nginx"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 Nginx 部署..."
if kubectl get deployment nginx -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Nginx 部署"
# echo ""
# read -p "是否删除旧的 Nginx 部署?(y/N): " -n 1 -r
# echo
# if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "删除旧的 Nginx Deployment..."
kubectl delete deployment nginx -n ruoyi --ignore-not-found=true
echo "删除旧的 Nginx Service..."
kubectl delete service ruoyi-nginx -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
# else
# echo "⚠️ 保留旧部署"
# fi
fi
echo ""
# 步骤 1: 构建前端
echo "步骤 1: 构建前端项目..."
cd "$UI_DIR"
npm run build:prod
if [ $? -eq 0 ]; then
echo "✓ 前端构建完成"
else
echo "✗ 前端构建失败"
exit 1
fi
# 步骤 2: 复制 dist 文件
echo ""
echo "步骤 2: 复制 dist 文件到 docker/nginx/html..."
rm -rf "$DOCKER_DIR/nginx/html/dist"
mkdir -p "$DOCKER_DIR/nginx/html/dist"
cp -r dist/* "$DOCKER_DIR/nginx/html/dist/"
echo "✓ dist 文件复制完成"
# 步骤 3: 构建 Nginx 镜像
echo ""
echo "步骤 3: 构建 Nginx 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-nginx
if [ $? -eq 0 ]; then
echo "✓ Nginx 镜像构建完成"
else
echo "✗ Nginx 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/nginx-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" nginx-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 Nginx Pod 启动..."
kubectl wait --for=condition=ready pod -l app=nginx -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Nginx Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Nginx Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=nginx -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Nginx Pod 运行正常"
kubectl get pods -n ruoyi -l app=nginx
else
echo "✗ Nginx Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=nginx
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Nginx Service 状态..."
if kubectl get svc ruoyi-nginx -n ruoyi &> /dev/null; then
echo "✓ Nginx Service 创建成功"
kubectl get svc -n ruoyi ruoyi-nginx
else
echo "✗ Nginx Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Nginx 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-nginx.ruoyi.svc.cluster.local"
echo " 端口: 80"
echo " NodePort: 30081"
echo " 访问地址: http://localhost:30081"
echo ""
exit 0

View File

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx-runtime
imagePullPolicy: Never
ports:
- containerPort: 80
name: http

14
k8s/05-nginx/service.yaml Normal file
View File

@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-nginx
namespace: ruoyi
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30081
name: http
selector:
app: nginx

44
k8s/06-auth/README.md Normal file
View File

@ -0,0 +1,44 @@
# 06-Auth 部署
## 说明
部署 Auth 认证服务,提供用户认证和授权功能。
## 部署流程
1. **打包 Auth** - 执行 bin/package.sh ruoyi-auth
2. **复制 jar** - 复制 jar 文件到 docker/ruoyi/auth/jar
3. **构建镜像** - 使用 docker-compose 构建 Auth 镜像
4. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
5. **部署到 K8s** - 部署 Service 和 Deployment
6. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-auth
- **端口**: 9200
- **镜像**: ruoyi-auth-runtime
- **依赖**: Redis
## 文件说明
- `service.yaml` - Auth Service 配置ClusterIP
- `deployment.yaml` - Auth Deployment 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 06-auth
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 集群内访问
ruoyi-auth.ruoyi.svc.cluster.local:9200
```

163
k8s/06-auth/deploy.sh Executable file
View File

@ -0,0 +1,163 @@
#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
echo "=========================================="
echo "部署 Auth"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 Auth 部署..."
if kubectl get deployment auth -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Auth 部署,自动清理..."
echo "删除旧的 Auth Deployment..."
kubectl delete deployment auth -n ruoyi --ignore-not-found=true
echo "删除旧的 Auth Service..."
kubectl delete service ruoyi-auth -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 Auth
echo "步骤 1: 打包 Auth jar..."
cd "$SCRIPT_DIR/../../bin"
sh package.sh ruoyi-auth
if [ $? -eq 0 ]; then
echo "✓ Auth 打包完成"
else
echo "✗ Auth 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 Auth jar 文件..."
cp "$SCRIPT_DIR/../../ruoyi-auth/target/ruoyi-auth.jar" "$DOCKER_DIR/ruoyi/auth/jar/"
echo "✓ jar 文件复制完成"
# 步骤 3: 构建 Auth 镜像
echo ""
echo "步骤 3: 构建 Auth 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-auth
if [ $? -eq 0 ]; then
echo "✓ Auth 镜像构建完成"
else
echo "✗ Auth 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/ruoyi-auth-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" ruoyi-auth-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 Auth Pod 启动..."
kubectl wait --for=condition=ready pod -l app=auth -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Auth Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Auth Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=auth -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Auth Pod 运行正常"
kubectl get pods -n ruoyi -l app=auth
else
echo "✗ Auth Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=auth
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Auth Service 状态..."
if kubectl get svc ruoyi-auth -n ruoyi &> /dev/null; then
echo "✓ Auth Service 创建成功"
kubectl get svc -n ruoyi ruoyi-auth
else
echo "✗ Auth Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Auth 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-auth.ruoyi.svc.cluster.local"
echo " 端口: 9200"
echo ""
exit 0

View File

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: ruoyi-auth-runtime
imagePullPolicy: Never
ports:
- containerPort: 9200
name: http

13
k8s/06-auth/service.yaml Normal file
View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-auth
namespace: ruoyi
spec:
type: ClusterIP
ports:
- port: 9200
targetPort: 9200
name: http
selector:
app: auth

44
k8s/07-system/README.md Normal file
View File

@ -0,0 +1,44 @@
# 07-System 部署
## 说明
部署 System 系统模块,提供用户、角色、菜单、部门等系统管理功能。
## 部署流程
1. **打包 System** - 执行 bin/package.sh ruoyi-modules-system
2. **复制 jar** - 复制 jar 文件到 docker/ruoyi/modules/system/jar
3. **构建镜像** - 使用 docker-compose 构建 System 镜像
4. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
5. **部署到 K8s** - 部署 Service 和 Deployment
6. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-modules-system
- **端口**: 9201
- **镜像**: ruoyi-modules-system-runtime
- **依赖**: Redis, MySQL
## 文件说明
- `service.yaml` - System Service 配置ClusterIP
- `deployment.yaml` - System Deployment 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 07-system
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 集群内访问
ruoyi-modules-system.ruoyi.svc.cluster.local:9201
```

163
k8s/07-system/deploy.sh Executable file
View File

@ -0,0 +1,163 @@
#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
echo "=========================================="
echo "部署 System"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 System 部署..."
if kubectl get deployment system -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 System 部署,自动清理..."
echo "删除旧的 System Deployment..."
kubectl delete deployment system -n ruoyi --ignore-not-found=true
echo "删除旧的 System Service..."
kubectl delete service ruoyi-modules-system -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 System
echo "步骤 1: 打包 System jar..."
cd "$SCRIPT_DIR/../../bin"
sh package.sh ruoyi-modules-system
if [ $? -eq 0 ]; then
echo "✓ System 打包完成"
else
echo "✗ System 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 System jar 文件..."
cp "$SCRIPT_DIR/../../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar" "$DOCKER_DIR/ruoyi/modules/system/jar/"
echo "✓ jar 文件复制完成"
# 步骤 3: 构建 System 镜像
echo ""
echo "步骤 3: 构建 System 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-modules-system
if [ $? -eq 0 ]; then
echo "✓ System 镜像构建完成"
else
echo "✗ System 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/ruoyi-modules-system-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" ruoyi-modules-system-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 System Pod 启动..."
kubectl wait --for=condition=ready pod -l app=system -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ System Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 System Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=system -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ System Pod 运行正常"
kubectl get pods -n ruoyi -l app=system
else
echo "✗ System Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=system
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 System Service 状态..."
if kubectl get svc ruoyi-modules-system -n ruoyi &> /dev/null; then
echo "✓ System Service 创建成功"
kubectl get svc -n ruoyi ruoyi-modules-system
else
echo "✗ System Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ System 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-modules-system.ruoyi.svc.cluster.local"
echo " 端口: 9201"
echo ""
exit 0

View File

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: system
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: system
template:
metadata:
labels:
app: system
spec:
containers:
- name: system
image: ruoyi-modules-system-runtime
imagePullPolicy: Never
ports:
- containerPort: 9201
name: http

View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-modules-system
namespace: ruoyi
spec:
type: ClusterIP
ports:
- port: 9201
targetPort: 9201
name: http
selector:
app: system

44
k8s/08-gen/README.md Normal file
View File

@ -0,0 +1,44 @@
# 08-Gen 部署
## 说明
部署 Gen 代码生成模块,提供代码生成功能。
## 部署流程
1. **打包 Gen** - 执行 bin/package.sh ruoyi-modules-gen
2. **复制 jar** - 复制 jar 文件到 docker/ruoyi/modules/gen/jar
3. **构建镜像** - 使用 docker-compose 构建 Gen 镜像
4. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
5. **部署到 K8s** - 部署 Service 和 Deployment
6. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-modules-gen
- **端口**: 9202
- **镜像**: ruoyi-modules-gen-runtime
- **依赖**: MySQL
## 文件说明
- `service.yaml` - Gen Service 配置ClusterIP
- `deployment.yaml` - Gen Deployment 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 08-gen
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 集群内访问
ruoyi-modules-gen.ruoyi.svc.cluster.local:9202
```

163
k8s/08-gen/deploy.sh Executable file
View File

@ -0,0 +1,163 @@
#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
echo "=========================================="
echo "部署 Gen"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 Gen 部署..."
if kubectl get deployment gen -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Gen 部署,自动清理..."
echo "删除旧的 Gen Deployment..."
kubectl delete deployment gen -n ruoyi --ignore-not-found=true
echo "删除旧的 Gen Service..."
kubectl delete service ruoyi-modules-gen -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 Gen
echo "步骤 1: 打包 Gen jar..."
cd "$SCRIPT_DIR/../../bin"
sh package.sh ruoyi-modules-gen
if [ $? -eq 0 ]; then
echo "✓ Gen 打包完成"
else
echo "✗ Gen 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 Gen jar 文件..."
cp "$SCRIPT_DIR/../../ruoyi-modules/ruoyi-gen/target/ruoyi-modules-gen.jar" "$DOCKER_DIR/ruoyi/modules/gen/jar/"
echo "✓ jar 文件复制完成"
# 步骤 3: 构建 Gen 镜像
echo ""
echo "步骤 3: 构建 Gen 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-modules-gen
if [ $? -eq 0 ]; then
echo "✓ Gen 镜像构建完成"
else
echo "✗ Gen 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/ruoyi-modules-gen-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" ruoyi-modules-gen-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 Gen Pod 启动..."
kubectl wait --for=condition=ready pod -l app=gen -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Gen Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Gen Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=gen -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Gen Pod 运行正常"
kubectl get pods -n ruoyi -l app=gen
else
echo "✗ Gen Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=gen
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Gen Service 状态..."
if kubectl get svc ruoyi-modules-gen -n ruoyi &> /dev/null; then
echo "✓ Gen Service 创建成功"
kubectl get svc -n ruoyi ruoyi-modules-gen
else
echo "✗ Gen Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Gen 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-modules-gen.ruoyi.svc.cluster.local"
echo " 端口: 9202"
echo ""
exit 0

View File

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: gen
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: gen
template:
metadata:
labels:
app: gen
spec:
containers:
- name: gen
image: ruoyi-modules-gen-runtime
imagePullPolicy: Never
ports:
- containerPort: 9202
name: http

13
k8s/08-gen/service.yaml Normal file
View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-modules-gen
namespace: ruoyi
spec:
type: ClusterIP
ports:
- port: 9202
targetPort: 9202
name: http
selector:
app: gen

44
k8s/09-job/README.md Normal file
View File

@ -0,0 +1,44 @@
# 09-Job 部署
## 说明
部署 Job 定时任务模块,提供定时任务调度功能。
## 部署流程
1. **打包 Job** - 执行 bin/package.sh ruoyi-modules-job
2. **复制 jar** - 复制 jar 文件到 docker/ruoyi/modules/job/jar
3. **构建镜像** - 使用 docker-compose 构建 Job 镜像
4. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
5. **部署到 K8s** - 部署 Service 和 Deployment
6. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-modules-job
- **端口**: 9203
- **镜像**: ruoyi-modules-job-runtime
- **依赖**: MySQL
## 文件说明
- `service.yaml` - Job Service 配置ClusterIP
- `deployment.yaml` - Job Deployment 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 09-job
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 集群内访问
ruoyi-modules-job.ruoyi.svc.cluster.local:9203
```

164
k8s/09-job/deploy.sh Executable file
View File

@ -0,0 +1,164 @@
#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
echo "=========================================="
echo "部署 Job"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 Job 部署..."
if kubectl get deployment job -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Job 部署,自动清理..."
echo "删除旧的 Job Deployment..."
kubectl delete deployment job -n ruoyi --ignore-not-found=true
echo "删除旧的 Job Service..."
kubectl delete service ruoyi-modules-job -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 Job
echo "步骤 1: 打包 Job jar..."
cd "$SCRIPT_DIR/../../bin"
sh package.sh ruoyi-modules-job
if [ $? -eq 0 ]; then
echo "✓ Job 打包完成"
else
echo "✗ Job 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 Job jar 文件..."
cp "$SCRIPT_DIR/../../ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar" "$DOCKER_DIR/ruoyi/modules/job/jar/"
echo "✓ jar 文件复制完成"
# 步骤 3: 构建 Job 镜像
echo ""
echo "步骤 3: 构建 Job 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-modules-job
if [ $? -eq 0 ]; then
echo "✓ Job 镜像构建完成"
else
echo "✗ Job 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/ruoyi-modules-job-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" ruoyi-modules-job-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
rm -f "$TEMP_IMAGE"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 Job Pod 启动..."
kubectl wait --for=condition=ready pod -l app=job -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Job Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Job Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=job -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Job Pod 运行正常"
kubectl get pods -n ruoyi -l app=job
else
echo "✗ Job Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=job
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Job Service 状态..."
if kubectl get svc ruoyi-modules-job -n ruoyi &> /dev/null; then
echo "✓ Job Service 创建成功"
kubectl get svc -n ruoyi ruoyi-modules-job
else
echo "✗ Job Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Job 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-modules-job.ruoyi.svc.cluster.local"
echo " 端口: 9203"
echo ""
exit 0

View File

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: job
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: job
template:
metadata:
labels:
app: job
spec:
containers:
- name: job
image: ruoyi-modules-job-runtime
imagePullPolicy: Never
ports:
- containerPort: 9203
name: http

13
k8s/09-job/service.yaml Normal file
View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-modules-job
namespace: ruoyi
spec:
type: ClusterIP
ports:
- port: 9203
targetPort: 9203
name: http
selector:
app: job

46
k8s/10-file/README.md Normal file
View File

@ -0,0 +1,46 @@
# 10-File 部署
## 说明
部署 File 文件服务模块,提供文件上传和下载功能。
## 部署流程
1. **打包 File** - 执行 bin/package.sh ruoyi-modules-file
2. **复制 jar** - 复制 jar 文件到 docker/ruoyi/modules/file/jar
3. **构建镜像** - 使用 docker-compose 构建 File 镜像
4. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
5. **部署到 K8s** - 部署 PVC、Service 和 Deployment
6. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-modules-file
- **端口**: 9300
- **镜像**: ruoyi-modules-file-runtime
- **存储**: 10Gi PVC 用于文件上传
- **上传路径**: /var/lib/uploadPath
## 文件说明
- `service.yaml` - File Service 配置ClusterIP
- `deployment.yaml` - File Deployment 配置
- `pvc.yaml` - 文件上传 PVC 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 10-file
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 集群内访问
ruoyi-modules-file.ruoyi.svc.cluster.local:9300
```

179
k8s/10-file/deploy.sh Executable file
View File

@ -0,0 +1,179 @@
#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
echo "=========================================="
echo "部署 File"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 File 部署..."
if kubectl get deployment file -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 File 部署,自动清理..."
echo "删除旧的 File Deployment..."
kubectl delete deployment file -n ruoyi --ignore-not-found=true
echo "删除旧的 File Service..."
kubectl delete service ruoyi-modules-file -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 File
echo "步骤 1: 打包 File jar..."
cd "$SCRIPT_DIR/../../bin"
sh package.sh ruoyi-modules-file
if [ $? -eq 0 ]; then
echo "✓ File 打包完成"
else
echo "✗ File 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 File jar 文件..."
cp "$SCRIPT_DIR/../../ruoyi-modules/ruoyi-file/target/ruoyi-modules-file.jar" "$DOCKER_DIR/ruoyi/modules/file/jar/"
echo "✓ jar 文件复制完成"
# 步骤 3: 构建 File 镜像
echo ""
echo "步骤 3: 构建 File 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-modules-file
if [ $? -eq 0 ]; then
echo "✓ File 镜像构建完成"
else
echo "✗ File 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/ruoyi-modules-file-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" ruoyi-modules-file-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
rm -f "$TEMP_IMAGE"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f pvc.yaml
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 File Pod 启动..."
kubectl wait --for=condition=ready pod -l app=file -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ File Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 File Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=file -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ File Pod 运行正常"
kubectl get pods -n ruoyi -l app=file
else
echo "✗ File Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=file
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 File Service 状态..."
if kubectl get svc ruoyi-modules-file -n ruoyi &> /dev/null; then
echo "✓ File Service 创建成功"
kubectl get svc -n ruoyi ruoyi-modules-file
else
echo "✗ File Service 创建失败"
exit 1
fi
echo ""
# 检查 PVC 状态
echo "检查 File PVC 状态..."
PVC_STATUS=$(kubectl get pvc -n ruoyi file-upload-pvc -o jsonpath='{.status.phase}')
if [ "$PVC_STATUS" == "Bound" ]; then
echo "✓ File PVC 绑定成功"
kubectl get pvc -n ruoyi file-upload-pvc
else
echo "✗ File PVC 状态异常: $PVC_STATUS"
kubectl get pvc -n ruoyi file-upload-pvc
exit 1
fi
echo ""
echo "=========================================="
echo "✓ File 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-modules-file.ruoyi.svc.cluster.local"
echo " 端口: 9300"
echo " 上传路径: /var/lib/uploadPath"
echo ""
exit 0

View File

@ -0,0 +1,29 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: file
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: file
template:
metadata:
labels:
app: file
spec:
containers:
- name: file
image: ruoyi-modules-file-runtime
imagePullPolicy: Never
ports:
- containerPort: 9300
name: http
volumeMounts:
- name: upload-path
mountPath: /var/lib/uploadPath
volumes:
- name: upload-path
persistentVolumeClaim:
claimName: file-upload-pvc

11
k8s/10-file/pvc.yaml Normal file
View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: file-upload-pvc
namespace: ruoyi
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

13
k8s/10-file/service.yaml Normal file
View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-modules-file
namespace: ruoyi
spec:
type: ClusterIP
ports:
- port: 9300
targetPort: 9300
name: http
selector:
app: file

43
k8s/11-monitor/README.md Normal file
View File

@ -0,0 +1,43 @@
# 11-Monitor 部署
## 说明
部署 Monitor 监控服务模块,提供服务监控功能。
## 部署流程
1. **打包 Monitor** - 执行 bin/package.sh ruoyi-visual-monitor
2. **复制 jar** - 复制 jar 文件到 docker/ruoyi/visual/monitor/jar
3. **构建镜像** - 使用 docker-compose 构建 Monitor 镜像
4. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
5. **部署到 K8s** - 部署 Service 和 Deployment
6. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: ruoyi-visual-monitor
- **端口**: 9100
- **镜像**: ruoyi-visual-monitor-runtime
## 文件说明
- `service.yaml` - Monitor Service 配置ClusterIP
- `deployment.yaml` - Monitor Deployment 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 11-monitor
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 集群内访问
ruoyi-visual-monitor.ruoyi.svc.cluster.local:9100
```

164
k8s/11-monitor/deploy.sh Executable file
View File

@ -0,0 +1,164 @@
#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
echo "=========================================="
echo "部署 Monitor"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 Monitor 部署..."
if kubectl get deployment monitor -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Monitor 部署,自动清理..."
echo "删除旧的 Monitor Deployment..."
kubectl delete deployment monitor -n ruoyi --ignore-not-found=true
echo "删除旧的 Monitor Service..."
kubectl delete service ruoyi-visual-monitor -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 Monitor
echo "步骤 1: 打包 Monitor jar..."
cd "$SCRIPT_DIR/../../bin"
sh package.sh ruoyi-visual-monitor
if [ $? -eq 0 ]; then
echo "✓ Monitor 打包完成"
else
echo "✗ Monitor 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 Monitor jar 文件..."
cp "$SCRIPT_DIR/../../ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar" "$DOCKER_DIR/ruoyi/visual/monitor/jar/"
echo "✓ jar 文件复制完成"
# 步骤 3: 构建 Monitor 镜像
echo ""
echo "步骤 3: 构建 Monitor 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache ruoyi-visual-monitor
if [ $? -eq 0 ]; then
echo "✓ Monitor 镜像构建完成"
else
echo "✗ Monitor 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/ruoyi-visual-monitor-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" ruoyi-visual-monitor-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
rm -f "$TEMP_IMAGE"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 Monitor Pod 启动..."
kubectl wait --for=condition=ready pod -l app=monitor -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Monitor Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Monitor Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=monitor -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Monitor Pod 运行正常"
kubectl get pods -n ruoyi -l app=monitor
else
echo "✗ Monitor Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=monitor
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Monitor Service 状态..."
if kubectl get svc ruoyi-visual-monitor -n ruoyi &> /dev/null; then
echo "✓ Monitor Service 创建成功"
kubectl get svc -n ruoyi ruoyi-visual-monitor
else
echo "✗ Monitor Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Monitor 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: ruoyi-visual-monitor.ruoyi.svc.cluster.local"
echo " 端口: 9100"
echo ""
exit 0

View File

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: monitor
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: monitor
template:
metadata:
labels:
app: monitor
spec:
containers:
- name: monitor
image: ruoyi-visual-monitor-runtime
imagePullPolicy: Never
ports:
- containerPort: 9100
name: http

View File

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: ruoyi-visual-monitor
namespace: ruoyi
spec:
type: ClusterIP
ports:
- port: 9100
targetPort: 9100
name: http
selector:
app: monitor

44
k8s/12-approval/README.md Normal file
View File

@ -0,0 +1,44 @@
# 12-Approval 部署
## 说明
部署 Approval 审批模块,提供审批流程管理功能。
## 部署流程
1. **打包 Approval** - 执行 bin/package.sh tuoheng-approval
2. **复制 jar** - 复制 jar 文件到 docker/ruoyi/modules/approval/jar
3. **构建镜像** - 使用 docker-compose 构建 Approval 镜像
4. **导入镜像** - 如果是 Minikube 环境,自动导入镜像
5. **部署到 K8s** - 部署 Service 和 Deployment
6. **等待启动** - 等待 Pod 就绪
## 配置说明
- **Service 名称**: tuoheng-modules-approval
- **端口**: 9201
- **镜像**: tuoheng-modules-approval-runtime
- **依赖**: Redis, MySQL
## 文件说明
- `service.yaml` - Approval Service 配置ClusterIP
- `deployment.yaml` - Approval Deployment 配置
- `deploy.sh` - 一键部署脚本
## 部署步骤
```bash
# 进入目录
cd 12-approval
# 执行部署脚本
./deploy.sh
```
## 访问
```bash
# 集群内访问
tuoheng-modules-approval.ruoyi.svc.cluster.local:9201
```

163
k8s/12-approval/deploy.sh Executable file
View File

@ -0,0 +1,163 @@
#!/bin/bash
set -e
# 保存脚本所在目录的绝对路径
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DOCKER_DIR="$SCRIPT_DIR/../../docker"
echo "=========================================="
echo "部署 Approval"
echo "=========================================="
# 检查是否需要清理旧部署
echo ""
echo "检查现有 Approval 部署..."
if kubectl get deployment approval -n ruoyi &> /dev/null; then
echo "⚠️ 检测到已存在的 Approval 部署,自动清理..."
echo "删除旧的 Approval Deployment..."
kubectl delete deployment approval -n ruoyi --ignore-not-found=true
echo "删除旧的 Approval Service..."
kubectl delete service tuoheng-modules-approval -n ruoyi --ignore-not-found=true
echo "等待资源清理完成..."
sleep 5
echo "✓ 旧部署清理完成"
fi
echo ""
# 步骤 1: 打包 Approval
echo "步骤 1: 打包 Approval jar..."
cd "$SCRIPT_DIR/../../bin"
sh package.sh tuoheng-approval
if [ $? -eq 0 ]; then
echo "✓ Approval 打包完成"
else
echo "✗ Approval 打包失败"
exit 1
fi
# 步骤 2: 复制 jar 文件
echo ""
echo "步骤 2: 复制 Approval jar 文件..."
cp "$SCRIPT_DIR/../../ruoyi-modules/tuoheng-approval/target/tuoheng-approval.jar" "$DOCKER_DIR/ruoyi/modules/approval/jar/"
echo "✓ jar 文件复制完成"
# 步骤 3: 构建 Approval 镜像
echo ""
echo "步骤 3: 构建 Approval 镜像..."
cd "$DOCKER_DIR"
docker-compose build --no-cache tuoheng-modules-approval
if [ $? -eq 0 ]; then
echo "✓ Approval 镜像构建完成"
else
echo "✗ Approval 镜像构建失败"
exit 1
fi
# 步骤 3.5: 检测环境并导入镜像(仅 Minikube 需要)
echo ""
if command -v minikube &> /dev/null && minikube status &> /dev/null; then
echo "检测到 Minikube 环境,导入镜像(可能需要 1-2 分钟)..."
# 先导出镜像到临时文件
TEMP_IMAGE="/tmp/tuoheng-modules-approval-runtime-$$.tar"
echo "导出镜像到临时文件..."
docker save -o "$TEMP_IMAGE" tuoheng-modules-approval-runtime
# 导入到 Minikube
echo "导入镜像到 Minikube..."
minikube image load "$TEMP_IMAGE" &
PID=$!
# 显示进度,最多等待 5 分钟
COUNT=0
MAX_COUNT=150
while kill -0 $PID 2>/dev/null; do
echo -n "."
sleep 2
COUNT=$((COUNT + 1))
if [ $COUNT -ge $MAX_COUNT ]; then
kill $PID 2>/dev/null
echo ""
echo "✗ 镜像导入超时(超过 5 分钟)"
exit 1
fi
done
wait $PID
EXIT_CODE=$?
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ 镜像导入到 Minikube 完成"
else
echo "✗ 镜像导入失败"
rm -f "$TEMP_IMAGE"
exit 1
fi
# 清理临时文件
rm -f "$TEMP_IMAGE"
else
echo "检测到 k3s/k8s 环境,跳过镜像导入(使用本地 Docker 镜像)"
fi
# 步骤 4: 部署到 K8s
echo ""
echo "步骤 4: 部署到 Kubernetes..."
cd "$SCRIPT_DIR"
kubectl apply -f service.yaml
kubectl apply -f deployment.yaml
# 步骤 5: 等待 Pod 启动
echo ""
echo "步骤 5: 等待 Approval Pod 启动..."
kubectl wait --for=condition=ready pod -l app=approval -n ruoyi --timeout=300s
if [ $? -ne 0 ]; then
echo "✗ Approval Pod 启动超时"
exit 1
fi
# 检查部署状态
echo ""
echo "=========================================="
echo "检查部署结果"
echo "=========================================="
# 检查 Pod 状态
echo "检查 Approval Pod 状态..."
POD_STATUS=$(kubectl get pods -n ruoyi -l app=approval -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" == "Running" ]; then
echo "✓ Approval Pod 运行正常"
kubectl get pods -n ruoyi -l app=approval
else
echo "✗ Approval Pod 状态异常: $POD_STATUS"
kubectl get pods -n ruoyi -l app=approval
exit 1
fi
echo ""
# 检查 Service 状态
echo "检查 Approval Service 状态..."
if kubectl get svc tuoheng-modules-approval -n ruoyi &> /dev/null; then
echo "✓ Approval Service 创建成功"
kubectl get svc -n ruoyi tuoheng-modules-approval
else
echo "✗ Approval Service 创建失败"
exit 1
fi
echo ""
echo "=========================================="
echo "✓ Approval 部署完成!"
echo "=========================================="
echo ""
echo "访问信息:"
echo " Service: tuoheng-modules-approval.ruoyi.svc.cluster.local"
echo " 端口: 9201"
echo ""
exit 0

View File

@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: approval
namespace: ruoyi
spec:
replicas: 1
selector:
matchLabels:
app: approval
template:
metadata:
labels:
app: approval
spec:
containers:
- name: approval
image: tuoheng-modules-approval-runtime
imagePullPolicy: Never
ports:
- containerPort: 9201
name: http

Some files were not shown because too many files have changed in this diff Show More