# Docker 部署指南 ## 项目架构 本项目采用前后端分离架构,使用 Docker Compose 进行编排部署。 ### 服务说明 - **crm-frontend**: 前端服务(Nginx),端口 80 - **crm-backend**: 后端服务(Spring Boot),端口 8080 - **crm-mysql**: MySQL 8 数据库,端口 3306 ### 网络架构 ``` Internet │ ▼ Nginx (crm-frontend:80) │ ├─► 静态文件 (Vue SPA) │ └─► /api/* 代理到 Spring Boot (crm-backend:8080) │ └─► MySQL (crm-mysql:3306) ``` ## 快速开始 ### 1. 准备工作 确保已安装以下软件: - Docker (20.10+) - Docker Compose (2.0+) 检查安装: ```bash docker --version docker-compose --version ``` ### 2. 配置环境变量 编辑 `docker-compose.yml`,根据需要修改以下配置: **数据库配置:** ```yaml environment: MYSQL_ROOT_PASSWORD: MySQL123s56 # 修改为强密码 MYSQL_DATABASE: crm_db ``` **后端配置:** ```yaml environment: JWT_SECRET: your-secret-key-change-in-production # 修改为随机密钥 JWT_EXPIRATION: 86400000 SPRING_DATASOURCE_PASSWORD: MySQL123s56 # 与数据库密码一致 ``` ### 3. 构建并启动 ```bash # 进入项目根目录 cd by-crm # 构建并启动所有服务(后台运行) docker-compose up -d # 查看日志 docker-compose logs -f # 查看服务状态 docker-compose ps ``` ### 4. 访问应用 - **前端应用**: http://localhost - **后端 API**: http://localhost:8080/api - **默认账号**: - 管理员: `admin` / `admin123` - 经销商: `user001` / `admin123` ## 常用命令 ### 服务管理 ```bash # 启动所有服务 docker-compose up -d # 停止所有服务 docker-compose stop # 重启所有服务 docker-compose restart # 停止并删除容器 docker-compose down # 停止并删除容器、网络、数据卷 docker-compose down -v ``` ### 查看日志 ```bash # 查看所有服务日志 docker-compose logs -f # 查看特定服务日志 docker-compose logs -f crm-backend docker-compose logs -f crm-frontend docker-compose logs -f crm-mysql # 查看最近 100 行日志 docker-compose logs --tail=100 crm-backend ``` ### 重新构建 ```bash # 重新构建并启动 docker-compose up -d --build # 重新构建特定服务 docker-compose build crm-backend docker-compose build crm-frontend ``` ### 进入容器 ```bash # 进入后端容器 docker-compose exec crm-backend sh # 进入数据库容器 docker-compose exec crm-mysql mysql -uroot -p # 进入前端容器 docker-compose exec crm-frontend sh ``` ## 数据持久化 ### 数据卷挂载 ```yaml # MySQL 数据 ./mysql/data:/var/lib/mysql # 后端日志 ./backend/logs:/app/logs ``` ### 备份数据库 ```bash # 导出数据库 docker-compose exec crm-mysql mysqldump -uroot -pMySQL123s56 crm_db > backup.sql # 导入数据库 docker-compose exec -T crm-mysql mysql -uroot -pMySQL123s56 crm_db < backup.sql ``` ## 生产环境部署 ### 1. 修改端口映射 根据实际情况修改端口映射: ```yaml services: crm-frontend: ports: - "80:80" # 或者使用 443:443 (HTTPS) crm-backend: ports: - "8080:8080" # 生产环境建议不对外暴露,仅通过 Nginx 访问 crm-mysql: ports: - "3306:3306" # 生产环境建议注释掉,不对外暴露 ``` ### 2. 配置 HTTPS(推荐) 修改 `frontend/nginx.conf`: ```nginx server { listen 443 ssl http2; server_name your-domain.com; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; # 其他配置... } # HTTP 重定向到 HTTPS server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } ``` 挂载 SSL 证书: ```yaml crm-frontend: volumes: - ./ssl:/etc/nginx/ssl:ro ports: - "443:443" - "80:80" ``` ### 3. 优化配置 **后端 JVM 参数**(backend/Dockerfile): ```dockerfile ENTRYPOINT ["java", \ "-Xms512m", \ "-Xmx1024m", \ "-XX:+UseG1GC", \ "-jar", "app.jar"] ``` **MySQL 优化**(docker-compose.yml): ```yaml crm-mysql: command: [ '--default-authentication-plugin=mysql_native_password', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--max_connections=500', '--innodb_buffer_pool_size=1G' ] ``` ### 4. 安全加固 - 修改所有默认密码 - 使用强密码策略 - 配置防火墙规则 - 启用 HTTPS - 定期备份数据 - 限制数据库访问(不对外暴露 3306 端口) ## 故障排查 ### 容器启动失败 ```bash # 查看详细日志 docker-compose logs crm-backend # 检查容器状态 docker-compose ps # 检查网络 docker network ls docker network inspect by-crm_crm_network ``` ### 数据库连接失败 ```bash # 等待数据库健康检查通过 docker-compose logs crm-mysql # 检查数据库是否就绪 docker-compose exec crm-mysql mysql -uroot -pMySQL123s56 -e "SHOW DATABASES;" ``` ### 前端访问后端跨域 检查 `frontend/nginx.conf` 中的代理配置: ```nginx location /api/ { proxy_pass http://crm-backend:8080/api/; # 确保包含这些头 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } ``` ### 性能监控 ```bash # 查看容器资源使用 docker stats # 查看特定服务资源使用 docker stats crm-backend crm-frontend crm-mysql ``` ## 升级部署 ```bash # 1. 备份数据 docker-compose exec crm-mysql mysqldump -uroot -pMySQL123s56 crm_db > backup_$(date +%Y%m%d).sql # 2. 拉取最新代码 git pull # 3. 重新构建并启动 docker-compose up -d --build # 4. 清理旧镜像 docker image prune -f ``` ## 注意事项 1. **首次启动**:数据库初始化可能需要 1-2 分钟,请耐心等待 2. **健康检查**:后端服务依赖数据库健康检查通过后才会启动 3. **数据安全**:生产环境务必修改默认密码 4. **资源限制**:可根据服务器配置添加资源限制(cpus、memory) 5. **日志管理**:建议配置日志轮转,避免磁盘占满 ## 参考资源 - [Docker 官方文档](https://docs.docker.com/) - [Docker Compose 文档](https://docs.docker.com/compose/) - [Nginx 配置指南](https://nginx.org/en/docs/) - [Spring Boot Docker 部署](https://docs.spring.io/spring-boot/docs/current/reference/html/docker.html)