当前位置: 首页 > news >正文

保姆级教程:用Docker Compose一键部署Jeecg-Boot微服务v3.4.2,告别环境配置烦恼

容器化部署Jeecg-Boot微服务全栈实战指南

在微服务架构日益普及的今天,开发环境的搭建往往成为项目启动的第一道门槛。传统的手动配置方式不仅耗时费力,还容易因环境差异导致"在我机器上能运行"的经典问题。本文将带你用Docker Compose实现Jeecg-Boot v3.4.2微服务全家桶的一键部署,从零开始构建完整的开发/测试环境。

1. 环境准备与架构解析

Jeecg-Boot作为基于Spring Cloud的企业级低代码平台,其微服务架构包含多个核心组件。我们采用容器化部署方案,主要解决以下痛点:

  • 环境隔离:每个服务运行在独立容器中,避免端口冲突和依赖污染
  • 快速重建:容器镜像可随时销毁重建,特别适合需要频繁重置的测试环境
  • 版本控制:Dockerfile和docker-compose.yml可纳入代码仓库,实现环境即代码

部署拓扑包含以下关键服务:

服务名称版本作用描述暴露端口
nacos-server2.0.3服务注册与配置中心8848
mysql5.7主数据库服务3306
redis6.2缓存与会话存储6379
jeecg-gatewayv3.4.2API网关路由9999
jeecg-systemv3.4.2核心业务系统
xxl-job-admin2.3.0分布式任务调度8081

提示:生产环境建议使用更高版本的MySQL 8.0+,本文为兼容性考虑使用5.7版本

2. Docker Compose全栈配置

创建docker-compose.yml文件,这是整个部署的核心。我们采用多容器方案,通过自定义网络实现服务互通:

version: '3.8' services: nacos: image: nacos/nacos-server:2.0.3 container_name: jeecg-nacos environment: - MODE=standalone - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql - MYSQL_SERVICE_DB_NAME=nacos_config - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=123456 ports: - "8848:8848" networks: - jeecg-net depends_on: - mysql mysql: image: mysql:5.7 container_name: jeecg-mysql environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=jeecg_boot volumes: - ./mysql/data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d ports: - "3306:3306" networks: - jeecg-net redis: image: redis:6.2 container_name: jeecg-redis ports: - "6379:6379" volumes: - ./redis/data:/data networks: - jeecg-net gateway: build: context: ./jeecg-cloud dockerfile: Dockerfile-gateway container_name: jeecg-gateway ports: - "9999:9999" environment: - NACOS_HOST=nacos depends_on: - nacos networks: - jeecg-net networks: jeecg-net: driver: bridge

关键配置说明:

  1. 数据持久化:MySQL和Redis通过volumes挂载数据目录,确保容器重启后数据不丢失
  2. 初始化脚本:MySQL的/docker-entrypoint-initdb.d目录会自动执行SQL文件
  3. 服务发现:所有服务使用容器名称作为hostname,通过自定义网络jeecg-net互通

3. Jeecg-Boot服务容器化改造

标准Jeecg-Boot项目需要经过Docker化改造才能适配容器部署。以下是关键步骤:

3.1 创建微服务Dockerfile

以gateway服务为例,创建Dockerfile-gateway

FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE=jeecg-module-system/jeecg-gateway/target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]

构建前需要修改的配置项:

  1. Nacos连接配置(bootstrap.yml):
spring: cloud: nacos: discovery: server-addr: nacos:8848 config: server-addr: nacos:8848
  1. 数据库连接(application-dev.yml):
spring: datasource: url: jdbc:mysql://mysql:3306/jeecg_boot?useUnicode=true&characterEncoding=UTF-8 username: root password: 123456
  1. Redis连接
redis: host: redis port: 6379

3.2 多模块构建优化

对于多模块项目,推荐使用Maven的dockerfile-maven-plugin实现自动化构建:

<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.13</version> <executions> <execution> <id>default</id> <goals> <goal>build</goal> <goal>push</goal> </goals> </execution> </executions> <configuration> <repository>jeecg/${project.artifactId}</repository> <tag>${project.version}</tag> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin>

构建命令:

mvn clean package dockerfile:build -DskipTests

4. 前端项目容器化部署

Jeecg-UI前端项目同样可以容器化运行,创建独立服务:

services: frontend: build: context: ./jeecg-ui dockerfile: Dockerfile container_name: jeecg-ui ports: - "3100:80" environment: - VITE_PROXY=[["/jeecgboot","http://gateway:9999"]] networks: - jeecg-net

对应的Dockerfile采用多阶段构建:

# 构建阶段 FROM node:14 as builder WORKDIR /app COPY package.json . RUN npm install -g yarn RUN yarn install COPY . . RUN yarn build # 运行阶段 FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80

Nginx配置示例(nginx.conf):

server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } location /jeecgboot { proxy_pass http://gateway:9999; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

5. 运维与调试技巧

容器化部署后,日常开发中常用的操作命令:

  • 查看服务日志
docker-compose logs -f gateway
  • 进入容器调试
docker exec -it jeecg-mysql mysql -uroot -p
  • 服务启停控制
docker-compose up -d # 启动所有服务 docker-compose stop gateway # 停止单个服务 docker-compose down # 停止并移除所有容器

常见问题解决方案:

  1. Nacos连接失败

    • 检查nacos服务是否正常启动
    • 验证MySQL连接配置是否正确
    • 查看日志:docker-compose logs -f nacos
  2. 前端跨域问题

    • 确保Nginx配置了正确的proxy_pass
    • 检查gateway服务的CORS配置
    • 验证VITE_PROXY环境变量设置
  3. 数据库初始化失败

    • 确认SQL文件编码为UTF-8无BOM
    • 检查volumes挂载权限
    • 手动执行SQL文件调试

对于需要新增微服务模块的情况,只需在docker-compose.yml中添加对应服务定义,并确保连接到同一网络。例如新增demo服务:

services: demo: build: context: ./jeecg-cloud dockerfile: Dockerfile-demo environment: - NACOS_HOST=nacos networks: - jeecg-net
http://www.rkmt.cn/news/1409809.html

相关文章:

  • 别再折腾了!Windows 10/11 一键部署 RocketMQ 4.8.0 + 控制台完整指南(含常见启动报错解决)
  • 从JK触发器到T触发器:一个巧妙的设计转换与它在计数器里的核心应用
  • 在Ubuntu 20.04上踩坑记:Bochs 2.6.9编译GeekOS 0.3.0,我遇到的5个报错及解决方法
  • 实战复盘:我是如何用Frida+IDA搞定一个手游外挂的so文件校验与修复的
  • 信号处理、PCA降维都离不开它:手把手图解‘能量守恒’在正交变换中的核心作用
  • 如何推导-cfd的误差和稳定性分析
  • 量子纠错码与被动解码技术解析
  • 零样本异常检测新思路:不用一张正常图片训练,MuSc方法如何利用测试图自身“投票”找出缺陷?
  • 量子变分电路在实时控制中的创新应用与实践
  • 别再浪费钢网了!嘉立创/捷配下单时,这个关于Mark点的勾选项你注意了吗?
  • 用Python实战处理KuaiRec数据集:从下载到构建稀疏矩阵的完整流程
  • 如何快速掌握暗黑破坏神2存档编辑器d2s-editor:面向单机玩家的完整指南
  • ThinkPad X1 Carbon 指纹识别在Ubuntu 20.04上复活记:从‘设备繁忙’报错到完美登录的保姆级排错指南
  • 【2026年华为暑期实习-非AI方向(通软嵌软测试算法数据科学)- 5月22日-第一题- 任意矩形图案解锁路径验证】(题目+思路+JavaC++Python解析+在线测试)
  • 避坑指南:无人机视觉项目坐标系转换的5个常见误区(从内参标定到NED定义)
  • LeetCode 144:二叉树的前序遍历 | 递归与迭代
  • 手把手教你用ATE测试I²C EEPROM:从PMU设置到图形文件编写的完整流程
  • 从测量铅笔到预测房价:最小二乘法在Excel和机器学习中的实战对比
  • 速腾聚创RS-M1激光雷达开箱实测:从拆箱到上电,新手避坑指南(附线缆改造建议)
  • 从Renren-Fast到微服务:手把手教你拆出公共Common模块(含依赖清单)
  • 从食材识别到营养配比,再到文化适配——ChatGPT食谱创作全流程拆解,手把手带练6类高转化场景
  • 从‘翻车’案例到优化方案:聊聊毫米波雷达天线罩那些坑(矩形vs弧形、泥水影响、PCB吸波结构)
  • 告别imgaug!用Roboflow给YOLOv8数据集做增强,5分钟搞定格式转换和扩增
  • 避障小车代码调试踩坑实录:HC-SR04测距不准、SG90舵机乱转?51单片机常见问题解决
  • 直播卡顿、花屏?从H.264的GOP、Slice到FLV封装的推流优化避坑指南
  • IC设计面试必考:边沿检测电路的5种变体与常见陷阱(附仿真对比)
  • 幻尔舵机控制板+STM32:从官方上位机到自定义动作组的无缝衔接实战
  • 数据结构学不会?试试用‘图书管理’这个例子把线性表(顺序表/链表)搞明白
  • AI 术语通俗词典:多头注意力
  • 告别RPM包!在Ubuntu 22.04上把Oracle 11g XE的安装包‘转正’成DEB格式