by-crm/docs/docker-deployment.md
2026-01-26 16:45:05 +08:00

335 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. **资源限制**可根据服务器配置添加资源限制cpusmemory
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)