1. 为什么选择Docker部署JeecgBoot?
如果你正在寻找一个快速搭建企业级应用的方法,JeecgBoot绝对是个不错的选择。作为国内知名的低代码开发平台,它能让开发效率提升70%以上。但传统的部署方式往往需要折腾各种环境依赖,这时候Docker的优势就体现出来了。
我去年接手一个紧急项目时,就用Docker在半小时内完成了从零部署到上线。相比传统方式节省了至少一天的环境配置时间,关键是整个过程可重复、可移植。想象一下,当你把整个系统打包成容器,在任何服务器上都能一键启动,这种体验有多爽。
Docker化部署主要带来三个核心优势:
- 环境一致性:再也不用说"在我机器上是好的"这种话
- 快速部署:从源码到服务只需几条命令
- 资源隔离:每个服务独立运行,互不干扰
2. 环境准备:打好基础很重要
2.1 安装Docker全家桶
工欲善其事,必先利其器。首先确保你的系统已经安装Docker和docker-compose。以Ubuntu为例:
# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release # 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置稳定版仓库 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # 验证安装 sudo docker run hello-world如果看到"Hello from Docker!"的提示,说明安装成功。建议将当前用户加入docker组,避免每次都要sudo:
sudo usermod -aG docker $USER newgrp docker # 立即生效2.2 准备编译环境
JeecgBoot需要Java和Node.js环境进行前后端编译。虽然Docker化后这些工具不再需要安装在宿主机,但编译阶段还是需要的:
# 安装JDK 17(JeecgBoot推荐版本) sudo apt install openjdk-17-jdk # 安装Maven wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz tar -xzf apache-maven-3.9.9-bin.tar.gz sudo mv apache-maven-3.9.9 /opt/maven # 配置环境变量 echo 'export MAVEN_HOME=/opt/maven export PATH=$PATH:$MAVEN_HOME/bin' | sudo tee /etc/profile.d/maven.sh source /etc/profile.d/maven.sh # 安装Node.js 18+ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # 验证安装 java -version mvn -v node -v3. 获取和配置JeecgBoot源码
3.1 克隆项目仓库
官方推荐从Gitee克隆代码,速度更快:
git clone https://gitee.com/jeecg/jeecg-boot.git cd jeecg-boot如果遇到网络问题,可以尝试加上深度克隆参数:
git clone --depth=1 https://gitee.com/jeecg/jeecg-boot.git3.2 修改后端配置
进入项目后,首要任务是配置数据库连接。找到开发环境配置文件:
vim jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml关键配置项修改示例:
spring: datasource: url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: 123456 redis: host: jeecg-boot-redis port: 6379注意这里使用了服务名而非IP,这是为了后续Docker容器间通信做准备。
3.3 修改前端配置
前端项目需要配置API基础地址:
vim jeecgboot-vue3/.env.production修改为:
VITE_GLOB_DOMAIN_URL=http://localhost:8080/jeecg-boot VITE_GLOB_API_URL=/jeecg-boot4. 编译打包:从源码到可运行程序
4.1 后端Java项目编译
使用Maven进行编译打包:
mvn clean install -DskipTests第一次编译可能会比较久,因为要下载所有依赖。我建议喝杯咖啡等待,大型项目可能需要10-15分钟。如果遇到依赖下载失败,可以尝试:
mvn clean install -DskipTests -U编译成功后,会在各模块target目录生成jar包,主要需要的是:
jeecg-module-system/jeecg-system-start/target/jeecg-system-start-3.5.0.jar4.2 前端Vue项目编译
前端项目使用pnpm管理依赖,先安装依赖:
cd jeecgboot-vue3 npm install -g pnpm pnpm install编译生产环境代码:
pnpm run build编译完成后,所有静态资源会生成在dist目录。
5. Docker化部署实战
5.1 编写Docker Compose文件
在项目根目录创建docker-compose.yml:
version: '3.8' services: jeecg-boot-mysql: image: mysql:8.0 container_name: jeecg-boot-mysql environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: jeecg-boot TZ: Asia/Shanghai volumes: - mysql_data:/var/lib/mysql command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - "3306:3306" networks: - jeecg-net jeecg-boot-redis: image: redis:6 container_name: jeecg-boot-redis ports: - "6379:6379" networks: - jeecg-net jeecg-boot-backend: build: context: . dockerfile: Dockerfile.backend container_name: jeecg-boot-backend depends_on: - jeecg-boot-mysql - jeecg-boot-redis ports: - "8080:8080" networks: - jeecg-net jeecg-boot-frontend: build: context: . dockerfile: Dockerfile.frontend container_name: jeecg-boot-frontend ports: - "80:80" networks: - jeecg-net volumes: mysql_data: networks: jeecg-net: driver: bridge5.2 编写Dockerfile
创建后端Dockerfile(Dockerfile.backend):
FROM openjdk:17-jdk WORKDIR /app COPY jeecg-module-system/jeecg-system-start/target/jeecg-system-start-*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","app.jar"]创建前端Dockerfile(Dockerfile.frontend):
FROM nginx:alpine WORKDIR /usr/share/nginx/html COPY jeecgboot-vue3/dist . COPY jeecgboot-vue3/nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 805.3 启动所有服务
一键启动所有容器:
docker-compose up -d可以通过以下命令查看日志:
docker-compose logs -f6. 验证与使用
6.1 检查服务状态
确保所有容器正常运行:
docker ps应该看到4个容器:MySQL、Redis、后端服务和前端服务。
6.2 访问系统
打开浏览器访问:
- 前端地址:http://localhost
- 后端Swagger文档:http://localhost:8080/jeecg-boot/doc.html
默认管理员账号:
- 用户名:admin
- 密码:123456
6.3 常见问题解决
数据库连接失败: 检查MySQL容器日志:
docker logs jeecg-boot-mysql确保数据库初始化完成后再启动后端服务。
前端访问空白页: 可能是Nginx配置问题,检查:
docker exec -it jeecg-boot-frontend nginx -t内存不足: 如果服务器资源有限,可以在docker-compose.yml中添加资源限制:
jeecg-boot-backend: deploy: resources: limits: cpus: '1' memory: 1G7. 生产环境优化建议
7.1 使用阿里云镜像加速
修改docker-compose.yml,使用国内镜像:
jeecg-boot-mysql: image: registry.cn-hangzhou.aliyuncs.com/library/mysql:8.07.2 配置数据持久化
确保重要数据不会因容器重启而丢失:
volumes: mysql_data: driver: local redis_data: driver: local7.3 启用HTTPS
使用Let's Encrypt免费证书:
docker run -it --rm --name certbot \ -v "/etc/letsencrypt:/etc/letsencrypt" \ -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \ certbot/certbot certonly --standalone -d yourdomain.com7.4 监控与日志
配置ELK收集日志:
elk: image: sebp/elk ports: - "5601:5601" - "9200:9200" - "5044:5044" volumes: - elk-data:/var/lib/elasticsearch8. 进阶:微服务模式部署
JeecgBoot也支持微服务架构,只需调整docker-compose.yml:
nacos: image: nacos/nacos-server environment: - MODE=standalone ports: - "8848:8848"然后修改应用配置连接到Nacos即可。这种架构更适合大型分布式系统,但维护成本也会相应增加。