CRMEB Docker容器化部署:一键部署生产环境的完整方案
CRMEB开源商城系统Java版是一款功能强大的电商平台解决方案,基于SpringBoot + Vue + Uni-app技术栈开发。本文将为您详细介绍如何使用Docker容器化技术快速部署CRMEB商城系统,实现生产环境的一键部署。
🚀 为什么选择Docker部署CRMEB?
Docker容器化部署为CRMEB商城系统带来了诸多优势:
- 环境一致性:确保开发、测试、生产环境完全一致
- 快速部署:分钟级完成整个系统的部署
- 资源隔离:各服务独立运行,互不影响
- 易于扩展:支持水平扩展和负载均衡
- 简化运维:统一的部署和管理方式
📦 系统架构与组件
CRMEB系统采用微服务架构,主要包含以下组件:
- crmeb-admin:后台管理服务(SpringBoot)
- crmeb-front:前端API服务(SpringBoot)
- MySQL:数据库服务
- Redis:缓存和会话管理
- Nginx:反向代理和静态资源服务
🔧 部署前准备
环境要求
- Docker 20.10+ 和 Docker Compose
- 至少4GB内存
- 20GB磁盘空间
- Linux/Windows/macOS系统
项目克隆
git clone https://gitcode.com/GitHub_Trending/cr/crmeb_java
cd crmeb_java
🐳 Docker Compose部署方案
1. 创建Docker网络
docker network create crmeb-network
2. 编写Docker Compose文件
创建 docker-compose.yml 文件:
version: '3.8'
services:
# MySQL数据库
mysql:
image: mysql:5.7
container_name: crmeb-mysql
environment:
MYSQL_ROOT_PASSWORD: crmeb123456
MYSQL_DATABASE: crmeb_db
volumes:
- mysql_data:/var/lib/mysql
- ./sql/Crmeb_1.3.4.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- crmeb-network
restart: always
# Redis缓存
redis:
image: redis:6-alpine
container_name: crmeb-redis
volumes:
- redis_data:/data
networks:
- crmeb-network
restart: always
# 后台管理服务
admin-service:
build:
context: ./crmeb/crmeb-admin
dockerfile: Dockerfile
container_name: crmeb-admin
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/crmeb_db
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: crmeb123456
SPRING_REDIS_HOST: redis
ports:
- "8080:8080"
depends_on:
- mysql
- redis
networks:
- crmeb-network
restart: always
# 前端API服务
front-service:
build:
context: ./crmeb/crmeb-front
dockerfile: Dockerfile
container_name: crmeb-front
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/crmeb_db
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: crmeb123456
SPRING_REDIS_HOST: redis
ports:
- "8081:8081"
depends_on:
- mysql
- redis
networks:
- crmeb-network
restart: always
# Nginx反向代理
nginx:
image: nginx:alpine
container_name: crmeb-nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./admin/dist:/usr/share/nginx/html/admin
- ./app/dist:/usr/share/nginx/html/app
ports:
- "80:80"
- "443:443"
depends_on:
- admin-service
- front-service
networks:
- crmeb-network
restart: always
volumes:
mysql_data:
redis_data:
networks:
crmeb-network:
external: true
3. 创建Dockerfile文件
在 crmeb/crmeb-admin 目录下创建 Dockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
EXPOSE 8080
同样在 crmeb/crmeb-front 目录下创建类似的Dockerfile。
4. 配置Nginx反向代理
创建 nginx.conf 文件:
events {
worker_connections 1024;
}
http {
upstream admin {
server admin-service:8080;
}
upstream front {
server front-service:8081;
}
server {
listen 80;
server_name localhost;
# 后台管理界面
location /admin {
proxy_pass http://admin;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# API接口
location /api {
proxy_pass http://front;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 静态资源
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
🚀 一键部署执行
构建和启动服务
# 构建项目
mvn clean package -DskipTests
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
验证部署
# 检查服务健康状态
curl http://localhost:8080/actuator/health
curl http://localhost:8081/actuator/health
# 访问管理后台
echo "管理后台: http://localhost/admin"
echo "API文档: http://localhost:8080/swagger-ui.html"
⚙️ 环境配置优化
生产环境配置
创建 application-prod.yml 配置文件:
spring:
datasource:
url: jdbc:mysql://mysql:3306/crmeb_db
username: root
password: ${DB_PASSWORD}
hikari:
maximum-pool-size: 20
minimum-idle: 5
redis:
host: redis
port: 6379
timeout: 3000
lettuce:
pool:
max-active: 20
max-wait: -1
max-idle: 10
min-idle: 0
server:
port: 8080
compression:
enabled: true
mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
min-response-size: 1024
🔍 常见问题排查
1. 数据库连接问题
# 检查MySQL容器状态
docker exec -it crmeb-mysql mysql -uroot -pcrmeb123456
# 查看数据库初始化日志
docker logs crmeb-mysql
2. 服务启动失败
# 查看具体服务日志
docker logs crmeb-admin
docker logs crmeb-front
# 重启单个服务
docker-compose restart admin-service
3. 端口冲突处理
如果80端口被占用,可以修改docker-compose.yml中的端口映射:
ports:
- "8088:80"
📊 监控和维护
资源监控
# 查看容器资源使用情况
docker stats
# 查看服务日志
docker-compose logs --tail=100
# 备份数据库
docker exec crmeb-mysql mysqldump -uroot -pcrmeb123456 crmeb_db > backup.sql
日常维护命令
# 更新服务
docker-compose pull
docker-compose up -d
# 停止服务
docker-compose down
# 清理资源
docker system prune -a
🎯 部署成功验证
部署完成后,通过以下方式验证:
- 访问管理后台:http://localhost/admin
- 检查API接口:http://localhost:8080/api/v1/public/index
- 查看Swagger文档:http://localhost:8080/swagger-ui.html
- 验证数据库连接:确保数据表正确初始化
- 测试Redis连接:验证缓存功能正常
💡 最佳实践建议
- 使用环境变量:敏感信息通过环境变量配置
- 定期备份:设置数据库自动备份策略
- 监控告警:配置容器健康检查和告警
- 日志收集:使用ELK或EFK收集日志
- 安全加固:定期更新基础镜像和安全补丁
通过本文介绍的Docker容器化部署方案,您可以快速将CRMEB商城系统部署到生产环境,享受容器化带来的便利和稳定性。这种部署方式不仅简化了运维工作,还为系统的弹性扩展和高可用性提供了坚实基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




