保姆级教程:用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-server | 2.0.3 | 服务注册与配置中心 | 8848 |
| mysql | 5.7 | 主数据库服务 | 3306 |
| redis | 6.2 | 缓存与会话存储 | 6379 |
| jeecg-gateway | v3.4.2 | API网关路由 | 9999 |
| jeecg-system | v3.4.2 | 核心业务系统 | 无 |
| xxl-job-admin | 2.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关键配置说明:
- 数据持久化:MySQL和Redis通过volumes挂载数据目录,确保容器重启后数据不丢失
- 初始化脚本:MySQL的
/docker-entrypoint-initdb.d目录会自动执行SQL文件 - 服务发现:所有服务使用容器名称作为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"]构建前需要修改的配置项:
- Nacos连接配置(bootstrap.yml):
spring: cloud: nacos: discovery: server-addr: nacos:8848 config: server-addr: nacos:8848- 数据库连接(application-dev.yml):
spring: datasource: url: jdbc:mysql://mysql:3306/jeecg_boot?useUnicode=true&characterEncoding=UTF-8 username: root password: 123456- Redis连接:
redis: host: redis port: 63793.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 -DskipTests4. 前端项目容器化部署
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 80Nginx配置示例(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 # 停止并移除所有容器常见问题解决方案:
Nacos连接失败:
- 检查nacos服务是否正常启动
- 验证MySQL连接配置是否正确
- 查看日志:
docker-compose logs -f nacos
前端跨域问题:
- 确保Nginx配置了正确的proxy_pass
- 检查gateway服务的CORS配置
- 验证VITE_PROXY环境变量设置
数据库初始化失败:
- 确认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