当前位置: 首页 > 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.jsqmd.com/news/900672/

相关文章:

  • 从单片机裸奔到跑系统:ARM Cortex-M3的特权/用户模式与双堆栈如何守护你的FreeRTOS
  • 5000A温升大电流,稳当是头等大事
  • 上下料夹爪品牌实用选购经验:适配生产线进出料作业 - 品牌2025
  • 2026年5月更新:河北地区装饰冲孔板订购厂家深度解析与推荐 - 2026年企业资讯
  • 告别DLL依赖!手把手教你用MinGW静态链接libgcc、libstdc++和libwinpthread
  • Python实战:用AlphaBeta剪枝算法搞定井字棋AI(附完整代码)
  • 别再死记硬背了!用PTV Vissim 2024做交通仿真,这5个高效建模技巧让你事半功倍
  • 如何推导-cfd的误差和稳定性分析
  • 大家都在电脑上安装了openclaw了吗?
  • 2026年4月智慧泵房实力厂家哪家强,排污泵/潜水排污泵/一体化污水处理设备/供水控制柜,智慧泵房源头厂家哪个好 - 品牌推荐师
  • SAP EWM拣货队列配置避坑指南:从活动区域定义到RF手持端显示的完整流程
  • 别再死记公式了!用‘电脑价格猜猜看’和‘出门带伞’两件小事,5分钟掌握贝叶斯更新核心思想
  • route 命令设置路由
  • 别再手动对位了!PCB钢网开Mark点,新手焊接效率翻倍的秘密
  • 告别imgaug!用Roboflow给YOLOv8数据集做增强,5分钟搞定格式转换和扩增
  • 2026年 DTF膜/墨水/烫画膜/热熔粉/弹性墨水,离型膜/氟素/非硅/硅油/硅胶离型膜源头厂家推荐榜 - 品牌企业推荐师(官方)
  • Vue3项目实战:用vis-timeline解决时间轴中文显示与日期格式化难题
  • 实测避坑:哪些安卓手机更适合跑VINS-MONO?从华为到小米的IMU数据采集体验报告
  • ChatGPT定制饮食计划失效真相:3类高危输入词+4步合规性校验流程(卫健委膳食指南交叉验证版)
  • ArcGIS 10.4 在 Win11 的“新家”安家记:为用arcpy的你详解安装路径选择
  • SystemVerilog bind 的‘坑’与最佳实践:从多实例绑定到参数传递的避雷指南
  • 2026年|论文降AI率必备:学生党5个手改技巧与3款降AIGC工具指南 - 降AI实验室
  • AI 应用监控与运维:确保系统稳定运行
  • 从零组装一台CNC小机床:树莓派4B + DM542 + 57步进电机的硬件接线全记录
  • STM32F405+EC600N-CN OTA升级实战:手把手教你解决4G模块存储不够和固件地址错位两大坑
  • 从‘翻车’案例到优化方案:聊聊毫米波雷达天线罩那些坑(矩形vs弧形、泥水影响、PCB吸波结构)
  • 智能电表背后的AI:深度学习如何从一条总功率曲线里‘认出’你家的空调和冰箱?
  • 从食材识别到营养配比,再到文化适配——ChatGPT食谱创作全流程拆解,手把手带练6类高转化场景
  • 【C++内存模型】C++内存模型详解:深浅拷贝、内存泄漏、动态内存管理、手写智能指针,吃透C++底层核心面试考点
  • Cortex-M7缓存预取机制与性能优化实战