初始化 RuoYi-Cloud 主仓库
- 配置 Git Submodules 架构 - 添加 14 个子模块仓库 - 配置 .gitignore 排除构建产物和运行时数据 - 添加项目文档和配置文件
This commit is contained in:
commit
9fbee987ab
|
|
@ -0,0 +1 @@
|
||||||
|
custom: http://doc.ruoyi.vip/ruoyi-cloud/other/donate.html
|
||||||
|
|
@ -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/
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
## 系统模块
|
||||||
|
|
||||||
|
~~~
|
||||||
|
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群: [](https://jq.qq.com/?_wv=1027&k=yqInfq0S) [](https://jq.qq.com/?_wv=1027&k=Oy1mb3p8) [](https://jq.qq.com/?_wv=1027&k=rvxkJtXK) [](https://jq.qq.com/?_wv=1027&k=0Ck3PvTe) [](https://jq.qq.com/?_wv=1027&k=FnHHP4TT) [](https://jq.qq.com/?_wv=1027&k=qdT1Ojpz) [](https://jq.qq.com/?_wv=1027&k=nw3OiyXs) [](https://jq.qq.com/?_wv=1027&k=kiU5WDls) [](https://jq.qq.com/?_wv=1027&k=MtBy6YfT) [](https://jq.qq.com/?_wv=1027&k=FqImHgH2) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G4jZ4EtdT50PhnMBudTnEwgonxkXOscJ&authKey=FkGHYfoTKlGE6wHdKdjH9bVoOgQjtLP9WM%2Fj7pqGY1msoqw9uxDiBo39E2mLgzYg&noverify=0&group_code=128355254) [](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) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=lx1uEdEDuxeM7rUvF3qmlFdqKqdJ5Z-R&authKey=rgyPW9yhhh4IIURKVFa6NgP3qiqH04WAzrJ0trsgkr3pjzm6sKIOGyA58oOjoj%2FJ&noverify=0&group_code=158753145) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Kuaw0Xdlw2Nlgn6s8h9elzuquHGxGObD&authKey=cSrQcWQ%2BzQZAFFrwxaR%2BbzcumX4WRduZnd1O6JO1dlclQMiu%2BKwxAy8t2JfNp67V&noverify=0&group_code=112869560) 点击按钮入群。
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
@echo off
|
||||||
|
echo.
|
||||||
|
echo [信息] 清理工程target生成路径。
|
||||||
|
echo.
|
||||||
|
|
||||||
|
%~d0
|
||||||
|
cd %~dp0
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
call mvn clean
|
||||||
|
|
||||||
|
pause
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# 清理 docker 目录下的所有 jar 文件
|
||||||
|
echo "开始清理 docker 目录下的所有 jar 文件..."
|
||||||
|
|
||||||
|
# 查找并删除所有 jar 文件
|
||||||
|
find . -name "*.jar" -type f -delete
|
||||||
|
|
||||||
|
echo "清理完成!"
|
||||||
|
echo "已删除所有 jar 文件"
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
存放sql目录下的所有脚本,用于docker自动执行。
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
# 基础镜像
|
||||||
|
FROM registry.t-aaron.com/mysql:8.0
|
||||||
|
# author
|
||||||
|
MAINTAINER ruoyi
|
||||||
|
|
||||||
|
# 执行sql脚本
|
||||||
|
ADD ./db/*.sql /docker-entrypoint-initdb.d/
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
# requirepass 123456
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
存放认证中心打包好的jar文件,用于docker启动应用。
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
存放网关模块打包好的jar文件,用于docker启动应用。
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
存放文件服务打包好的jar文件,用于docker启动应用。
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
存放代码生成打包好的jar文件,用于docker启动应用。
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
存放定时任务打包好的jar文件,用于docker启动应用。
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
存放系统模块打包好的jar文件,用于docker启动应用。
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -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"]
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
存放监控中心打包好的jar文件,用于docker启动应用。
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
# 00-初始化环境
|
||||||
|
|
||||||
|
## 说明
|
||||||
|
|
||||||
|
初始化 Kubernetes 环境,创建 `ruoyi` 命名空间。
|
||||||
|
|
||||||
|
## 文件说明
|
||||||
|
|
||||||
|
- `namespace.yaml` - 命名空间配置
|
||||||
|
- `deploy.sh` - 部署脚本
|
||||||
|
|
||||||
|
## 部署步骤
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 进入目录
|
||||||
|
cd 00-init
|
||||||
|
|
||||||
|
# 执行部署脚本
|
||||||
|
./deploy.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 验证
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看命名空间
|
||||||
|
kubectl get namespace ruoyi
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: ruoyi
|
||||||
|
labels:
|
||||||
|
name: ruoyi
|
||||||
|
|
@ -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;
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: file-upload-pvc
|
||||||
|
namespace: ruoyi
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10Gi
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
Loading…
Reference in New Issue