Java Kubernetes本地部署RuoYi框架jar包

作者:自由的疯日期:2025/10/18

在本地 Kubernetes 集群中部署 RuoYi 框架的 JAR 包是一个很好的实践,可以帮助你更好地理解和掌握 Kubernetes 的应用部署流程。以下是详细的步骤,指导你在本地 Kubernetes 集群中部署 RuoYi 框架的 JAR 包。

1. 准备环境

1.1 安装 Minikube 或 kind

首先,确保你已经安装了 Minikube 或 kind 来本地运行 Kubernetes 集群。这里以 Minikube 为例进行说明。

  1. 安装 kubectl
1curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
2chmod +x kubectl
3sudo mv kubectl /usr/local/bin/
4
  1. 安装 Minikube
1curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
2chmod +x minikube
3sudo mv minikube /usr/local/bin/
4
  1. 启动 Minikube
1minikube start --driver=docker
2

2. 准备 RuoYi 框架的 JAR 包

2.1 构建 RuoYi 框架的 JAR 包

假设你已经有一个 RuoYi 框架的项目,需要构建 JAR 包。

  1. 构建 JAR 包
1cd /path/to/ruoyi-project
2mvn clean package -DskipTests
3
  1. 找到生成的 JAR 包: 构建完成后,JAR 包通常位于 ​​target​​​ 目录下,例如 ​​ruoyi.jar​​。

3. 创建 Docker 镜像

3.1 编写 Dockerfile

在 RuoYi 项目的根目录下创建一个 ​​Dockerfile​​ 文件,内容如下:

1# 使用官方的 OpenJDK 镜像作为基础镜像
2FROM openjdk:8-jdk-alpine
3
4# 设置工作目录
5WORKDIR /app
6
7# 将 JAR 包复制到容器中
8COPY target/ruoyi.jar /app/
9
10# 暴露应用的端口
11EXPOSE 8080
12
13# 启动应用
14ENTRYPOINT ["java", "-jar", "ruoyi.jar"]
15

3.2 构建 Docker 镜像

在项目根目录下运行以下命令来构建 Docker 镜像:

1docker build -t ruoyi:latest .
2

4. 部署到 Kubernetes

4.1 创建 Kubernetes 配置文件

4.1.1 创建 Deployment 配置文件

创建一个 ​​ruoyi-deployment.yaml​​ 文件,内容如下:

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: ruoyi
5spec:
6  replicas: 1
7  selector:
8    matchLabels:
9      app: ruoyi
10  template:
11    metadata:
12      labels:
13        app: ruoyi
14    spec:
15      containers:
16      - name: ruoyi
17        image: ruoyi:latest
18        ports:
19        - containerPort: 8080
20        env:
21        - name: SPRING_DATASOURCE_URL
22          value: "jdbc:mysql://<mysql-service-name>:3306/ruoyi?useUnicode=true&characterEncoding=utf8&useSSL=false"
23        - name: SPRING_DATASOURCE_USERNAME
24          value: "root"
25        - name: SPRING_DATASOURCE_PASSWORD
26          value: "password"
27        - name: SPRING_REDIS_HOST
28          value: "<redis-service-name>"
29        - name: SPRING_REDIS_PORT
30          value: "6379"
31        - name: SPRING_REDIS_PASSWORD
32          value: "password"
33
4.1.2 创建 Service 配置文件

创建一个 ​​ruoyi-service.yaml​​ 文件,内容如下:

1apiVersion: v1
2kind: Service
3metadata:
4  name: ruoyi
5spec:
6  selector:
7    app: ruoyi
8  ports:
9  - protocol: TCP
10    port: 8080
11    targetPort: 8080
12  type: NodePort
13

4.2 部署应用

  1. 应用 Deployment 和 Service
1kubectl apply -f ruoyi-deployment.yaml
2kubectl apply -f ruoyi-service.yaml
3
  1. 验证部署
1kubectl get pods
2kubectl get services
3

5. 访问应用

5.1 获取 NodePort

1kubectl get service ruoyi
2

输出类似于:

1NAME     TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
2ruoyi    NodePort   10.109.155.99   <none>        8080:30001/TCP   2m
3

5.2 访问应用

使用 ​​minikube ip​​​ 获取 Minikube 的 IP 地址,然后通过 ​​http://<minikube-ip>:30001​​ 访问应用。

6. 配置数据库和 Redis

6.1 部署 MySQL

创建一个 ​​mysql-deployment.yaml​​ 文件,内容如下:

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: mysql
5spec:
6  replicas: 1
7  selector:
8    matchLabels:
9      app: mysql
10  template:
11    metadata:
12      labels:
13        app: mysql
14    spec:
15      containers:
16      - name: mysql
17        image: mysql:5.7
18        env:
19        - name: MYSQL_ROOT_PASSWORD
20          value: "password"
21        - name: MYSQL_DATABASE
22          value: "ruoyi"
23        ports:
24        - containerPort: 3306
25        volumeMounts:
26        - name: mysql-persistent-storage
27          mountPath: /var/lib/mysql
28      volumes:
29      - name: mysql-persistent-storage
30        emptyDir: {}
31---
32apiVersion: v1
33kind: Service
34metadata:
35  name: mysql
36spec:
37  selector:
38    app: mysql
39  ports:
40  - protocol: TCP
41    port: 3306
42    targetPort: 3306
43

应用配置:

1kubectl apply -f mysql-deployment.yaml
2

6.2 部署 Redis

创建一个 ​​redis-deployment.yaml​​ 文件,内容如下:

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: redis
5spec:
6  replicas: 1
7  selector:
8    matchLabels:
9      app: redis
10  template:
11    metadata:
12      labels:
13        app: redis
14    spec:
15      containers:
16      - name: redis
17        image: redis:5.0
18        ports:
19        - containerPort: 6379
20---
21apiVersion: v1
22kind: Service
23metadata:
24  name: redis
25spec:
26  selector:
27    app: redis
28  ports:
29  - protocol: TCP
30    port: 6379
31    targetPort: 6379
32

应用配置:

1kubectl apply -f redis-deployment.yaml
2

7. 更新 RuoYi 配置

确保 RuoYi 的配置文件中使用的数据库和 Redis 服务名称与 Kubernetes 中的服务名称一致。例如:

1spring:
2  datasource:
3    url: jdbc:mysql://mysql:3306/ruoyi?useUnicode=true&characterEncoding=utf8&useSSL=false
4    username: root
5    password: password
6  redis:
7    host: redis
8    port: 6379
9    password: password
10

8. 重新部署 RuoYi

重新构建 RuoYi 的 Docker 镜像并重新部署:

1docker build -t ruoyi:latest .
2kubectl delete deployment ruoyi
3kubectl apply -f ruoyi-deployment.yaml
4kubectl apply -f ruoyi-service.yaml
5

总结

通过以上步骤,你可以在本地 Kubernetes 集群中成功部署 RuoYi 框架的 JAR 包。这个过程不仅帮助你理解 Kubernetes 的基本概念和操作,还为你在生产环境中部署复杂应用打下了坚实的基础。


Java Kubernetes本地部署RuoYi框架jar包》 是转载文章,点击查看原文


相关推荐


从 Tomcat 与 Jetty 的对比,聊聊影响一个服务并发能力的关键因素
G探险者2025/10/16

大家好,我是G探险者! 在 Java 服务体系中,Tomcat 与 Jetty 是最常见的 Web 容器。很多人认为,只要加大连接数或线程数,就能提升并发能力。 但事实远比想象复杂:连接数只是冰山一角,背后还有线程模型、I/O 模型、内核资源限制等多重因素。 本文从 Tomcat 与 Jetty 的对比 入手,系统讲清楚——到底是什么在决定你的服务并发上限。 🧩 一、Tomcat 与 Jetty 的架构差异 1️⃣ Tomcat 的工作模型 Tomcat 默认采用 多线程 + 阻塞 I/O


面试真实经历某商银行大厂Java问题和答案总结(三)
360_go_php2025/10/15

​ 1. 深拷贝和浅拷贝 ​编辑 问:什么是深拷贝和浅拷贝?它们之间有什么区别? 浅拷贝(Shallow Copy): 浅拷贝指的是复制对象的引用,而不是复制对象本身。也就是说,对于对象中的引用类型字段,浅拷贝只是复制了这些字段的引用,而没有复制字段引用的对象本身。 如果原始对象和拷贝对象中有相同的引用类型字段,修改其中一个字段会影响到另一个对象。​编辑 深拷贝(Deep Copy): 深拷贝指的是复制对象本身,并且递归地复制对象中的所有引用类型字段,确保两个对象中的引用类型字段互不影响。


Swift 基础语法全景(一):从变量到类型安全
unravel20252025/10/14

常量与变量:let vs var 声明语法 // 常量:一次赋值,终身不变 let maximumLoginAttempts = 10 // 最大尝试次数,业务上不允许修改 // 变量:可反复写入 var currentAttempt = 0 // 当前尝试次数,失败+1 延迟赋值 只要「第一次读取前」完成初始化即可,不必一行写完。 var randomGenerator = SystemRandomNumberGenerator() let


Linux挂载NTFS分区指南
依赖倒不置2025/10/12

在使用Windows和Linux双系统的电脑上,通常我们可能也需要在Linux上访问NTFS分区。虽然Linux用户一般来说不一定会有分区的习惯,但是在双系统情况下,两个系统复用NTFS分区也是很常见的。 今天,就来讨论双系统复用分区的场景下,如何正确地在Linux挂载NTFS分区。 1,Linux的NTFS驱动 事实上,老版本的Linux内核并不原生支持读取NTFS分区,尤其是NTFS是Windows系统专有的文件系统,而不是开放的。因此很长一段时间,都是使用ntfs-3g这个开源驱动实现在L


老题新解|十进制转二进制
程序员莫小特2025/10/10

《信息学奥赛一本通》第160题:十进制转二进制 题目描述 给定一个十进制整数 n n n,请将其转换为对应的二进制表示,并输出。 输入格式 输入包含一行,一个整数 n


单机已达上限?PerfTest 分布式压测登场,轻松模拟百万用户洪峰
Go有引力2025/10/9

前言 在前一篇文章中,我们详细介绍了 perftest 的单机压测能力,展示了它如何通过极简的命令行实现对 HTTP/1.1、HTTP/2、HTTP/3 与 WebSocket 的高性能测试。然而,当业务系统庞大、服务部署分布式、网络链路复杂时,单机的压测能力显然无法满足真实生产环境的模拟需求。 幸运的是,perftest 不止于单机。它同样支持 分布式集群压测,通过 Collector + Agent 的架构,让你轻松在多台机器上同时发起测试,实现百万乃至千万级并发的性能评估。 为什么选择分


Webpack实战笔记:从自动构建到本地服务器搭建的完整流程
XiangCoder2025/10/7

作为前端开发者,Webpack 是绕不开的构建工具。最近系统学习了 Webpack 的自动构建和服务器搭建,整理了一套从基础到实战的操作笔记,包含具体案例和踩坑经验,适合新手跟着实操。 前言:为什么需要 Webpack 构建工具? 刚开始写前端项目时,我们习惯在 index.html 里手动引入各种 js、css 文件。但随着项目变大,会遇到两个核心问题: 资源越来越多,手动管理引入路径容易出错(尤其是加哈希值优化缓存时); 开发时需要频繁刷新页面看效果,效率太低。 Web


Android系统模块编译调试与Ninja使用指南
龙之叶2025/10/6

模块编译调试方法 (此处举例framework、installd、SystemUI等模块的编译调试,其他类似) 1. Framework模块编译 Android系统代码的framework目录内,一共有3个模块单独编译:framework、services、framework-res.apk。 注意:偶尔会有改了代码但没检测到,编译结束后产物并未更新的情况,所以可以考虑先剪切掉原先的产物或者检查产物更新时间确保已经重新编译。 步骤: 完成根目录下 source build/envsetup.sh


精选 4 款开源免费、美观实用的 MAUI UI 组件库,助力轻松构建美观且功能丰富的应用程序!
追逐时光者2025/10/5

前言 一套优秀的 UI 组件库不仅能大幅提升开发效率,还能显著增强应用的视觉体验与交互质感。今天大姚给大家分享 4 款开源免费、美观实用的 MAUI UI 组件库,助你轻松打造专业级的跨平台应用程序。 .NET MAUI介绍 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。使用 .NET MAUI,可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。 .NET开源免费的跨平


医院病人信息管理系统 Web 版开发实战(一)
FPGA+护理+人工智能2025/10/3

医院病人信息管理系统Web版开发实战 文章目录 医院病人信息管理系统Web版开发实战一、概述二、项目结构搭建2.1 Flask 项目结构原理2.2 创建项目文件夹2.3 初始化 Flask 应用 三、路由设计3.1 Flask 路由机制原理3.2 定义核心路由3.3 数据存储函数 四、模板开发4.1 Jinja2 模板引擎原理4.2 基础模板设计4.3 首页模板(index.html)4.4 添加病人模板(add.html)4.5 详情和编辑模板 未完待续

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0