6.2 KiB
6.2 KiB
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+)
检查安装:
docker --version
docker-compose --version
2. 配置环境变量
编辑 docker-compose.yml,根据需要修改以下配置:
数据库配置:
environment:
MYSQL_ROOT_PASSWORD: MySQL123s56 # 修改为强密码
MYSQL_DATABASE: crm_db
后端配置:
environment:
JWT_SECRET: your-secret-key-change-in-production # 修改为随机密钥
JWT_EXPIRATION: 86400000
SPRING_DATASOURCE_PASSWORD: MySQL123s56 # 与数据库密码一致
3. 构建并启动
# 进入项目根目录
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
- 管理员:
常用命令
服务管理
# 启动所有服务
docker-compose up -d
# 停止所有服务
docker-compose stop
# 重启所有服务
docker-compose restart
# 停止并删除容器
docker-compose down
# 停止并删除容器、网络、数据卷
docker-compose down -v
查看日志
# 查看所有服务日志
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
重新构建
# 重新构建并启动
docker-compose up -d --build
# 重新构建特定服务
docker-compose build crm-backend
docker-compose build crm-frontend
进入容器
# 进入后端容器
docker-compose exec crm-backend sh
# 进入数据库容器
docker-compose exec crm-mysql mysql -uroot -p
# 进入前端容器
docker-compose exec crm-frontend sh
数据持久化
数据卷挂载
# MySQL 数据
./mysql/data:/var/lib/mysql
# 后端日志
./backend/logs:/app/logs
备份数据库
# 导出数据库
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. 修改端口映射
根据实际情况修改端口映射:
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:
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 证书:
crm-frontend:
volumes:
- ./ssl:/etc/nginx/ssl:ro
ports:
- "443:443"
- "80:80"
3. 优化配置
后端 JVM 参数(backend/Dockerfile):
ENTRYPOINT ["java", \
"-Xms512m", \
"-Xmx1024m", \
"-XX:+UseG1GC", \
"-jar", "app.jar"]
MySQL 优化(docker-compose.yml):
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 端口)
故障排查
容器启动失败
# 查看详细日志
docker-compose logs crm-backend
# 检查容器状态
docker-compose ps
# 检查网络
docker network ls
docker network inspect by-crm_crm_network
数据库连接失败
# 等待数据库健康检查通过
docker-compose logs crm-mysql
# 检查数据库是否就绪
docker-compose exec crm-mysql mysql -uroot -pMySQL123s56 -e "SHOW DATABASES;"
前端访问后端跨域
检查 frontend/nginx.conf 中的代理配置:
location /api/ {
proxy_pass http://crm-backend:8080/api/;
# 确保包含这些头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
性能监控
# 查看容器资源使用
docker stats
# 查看特定服务资源使用
docker stats crm-backend crm-frontend crm-mysql
升级部署
# 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-2 分钟,请耐心等待
- 健康检查:后端服务依赖数据库健康检查通过后才会启动
- 数据安全:生产环境务必修改默认密码
- 资源限制:可根据服务器配置添加资源限制(cpus、memory)
- 日志管理:建议配置日志轮转,避免磁盘占满