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

📅 2026/8/3 6:30:27 👁️ 阅读次数 📝 编程学习
保姆级教程:用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