# 🐳 Docker Compose 使用指南 完整的 Docker Compose 配置,一键启动所有服务! ## 📋 服务列表 ### 核心服务(默认启动) | 服务 | 端口 | 说明 | |------|------|------| | **postgres** | 5432 | PostgreSQL 16 数据库 | | **redis** | 6379 | Redis 缓存(可选) | | **backend** | 8080 | Go 后端 API 服务 | | **frontend** | 3000 | React 前端应用 | ### 可选服务 | 服务 | 端口 | 说明 | Profile | |------|------|------|---------| | **nginx** | 80, 443 | 反向代理 | `production` | | **pgadmin** | 5050 | PostgreSQL 管理工具 | `tools` | | **swagger-ui** | 8081 | API 文档查看器 | `tools` | ## 🚀 快速开始 ### 1. 生产环境启动 ```bash # 启动核心服务(PostgreSQL + Redis + Backend + Frontend) docker compose up -d # 查看日志 docker compose logs -f # 查看服务状态 docker compose ps ``` 访问: - 🎨 前端:http://localhost:3000 - 🔧 后端 API:http://localhost:8080 - 📊 健康检查:http://localhost:8080/health ### 2. 开发环境启动(支持热重载) ```bash # 使用开发配置启动 docker compose -f docker-compose.yml -f docker-compose.dev.yml up # 或使用 Makefile 命令 make docker-dev ``` 开发模式特性: - ✅ 后端支持热重载(使用 Air) - ✅ 前端支持热重载(Vite) - ✅ 自动挂载源代码 - ✅ 使用 Mock 模式(无需真实数据) ### 3. 启动可选工具 ```bash # 启动 pgAdmin docker compose --profile tools up -d pgadmin # 启动 Swagger UI docker compose --profile tools up -d swagger-ui # 启动所有工具 docker compose --profile tools up -d # 启动生产环境(包含 Nginx) docker compose --profile production up -d ``` 访问工具: - 📊 pgAdmin:http://localhost:5050 - 邮箱:`admin@ocdp.local` - 密码:`admin` - 📖 Swagger UI:http://localhost:8081 ## 📚 常用命令 ### 服务管理 ```bash # 启动所有服务 docker compose up -d # 启动特定服务 docker compose up -d postgres redis backend # 停止所有服务 docker compose down # 停止并删除数据卷 docker compose down -v # 重启服务 docker compose restart # 重启特定服务 docker compose restart backend ``` ### 日志查看 ```bash # 查看所有服务日志 docker compose logs -f # 查看特定服务日志 docker compose logs -f backend # 查看最近100行日志 docker compose logs --tail=100 backend # 实时查看日志(带时间戳) docker compose logs -f --timestamps backend ``` ### 服务状态 ```bash # 查看服务状态 docker compose ps # 查看服务详细信息 docker compose ps -a # 查看服务资源使用 docker stats ``` ### 进入容器 ```bash # 进入后端容器 docker compose exec backend sh # 进入 PostgreSQL 容器 docker compose exec postgres psql -U postgres -d ocdp # 进入 Redis 容器 docker compose exec redis redis-cli ``` ### 构建和更新 ```bash # 重新构建镜像 docker compose build # 重新构建特定服务 docker compose build backend # 强制重新构建(不使用缓存) docker compose build --no-cache # 拉取最新镜像 docker compose pull ``` ## 🔧 配置说明 ### 环境变量 1. 复制环境变量示例文件: ```bash cp env.example .env ``` 2. 编辑 `.env` 文件,修改必要的配置: ```bash # 修改 JWT 密钥(生产环境必须修改) JWT_SECRET=your-very-secure-secret-key # 修改数据库密码(生产环境建议修改) DB_PASSWORD=your-secure-password ``` ### 数据持久化 数据卷: - `postgres_data` - PostgreSQL 数据 - `redis_data` - Redis 数据 - `backend_data` - 后端应用数据 - `pgadmin_data` - pgAdmin 配置 - `nginx_logs` - Nginx 日志 查看数据卷: ```bash docker volume ls | grep ocdp ``` 备份数据卷: ```bash # 备份 PostgreSQL docker compose exec postgres pg_dump -U postgres ocdp > backup.sql # 或使用 Docker 卷备份 docker run --rm -v ocdp-go_postgres_data:/data -v $(pwd):/backup alpine tar czf /backup/postgres-backup.tar.gz -C /data . ``` 恢复数据: ```bash # 恢复 PostgreSQL docker compose exec -T postgres psql -U postgres ocdp < backup.sql # 或恢复卷 docker run --rm -v ocdp-go_postgres_data:/data -v $(pwd):/backup alpine tar xzf /backup/postgres-backup.tar.gz -C /data ``` ## 🏗️ 服务架构 ``` ┌─────────────┐ │ Client │ └──────┬──────┘ │ ↓ ┌─────────────┐ ┌─────────────┐ │ Nginx │ │ Swagger UI │ │ (80) │ │ (8081) │ └──────┬──────┘ └─────────────┘ │ ↓ ┌─────────────┐ │ Frontend │ │ (3000) │ └──────┬──────┘ │ ↓ ┌─────────────┐ │ Backend │ │ (8080) │ └──┬────┬─────┘ │ │ │ └─────────┐ ↓ ↓ ┌─────────┐ ┌─────────┐ │Postgres │ │ Redis │ │ (5432) │ │ (6379) │ └────┬────┘ └─────────┘ │ ↓ ┌─────────┐ │pgAdmin │ │ (5050) │ └─────────┘ ``` ## 🔍 健康检查 所有服务都配置了健康检查: ```bash # 检查所有服务健康状态 docker compose ps # 检查特定服务 curl http://localhost:8080/health # Backend curl http://localhost:3000/health # Frontend ``` 健康状态说明: - `healthy` - 服务正常运行 - `starting` - 服务正在启动 - `unhealthy` - 服务异常 ## 🐛 故障排查 ### 问题 1: 端口冲突 **错误**:`port is already allocated` **解决方案**: ```bash # 查看端口占用 lsof -i :8080 # 修改 docker-compose.yml 中的端口映射(如需更改) ports: - "8081:8080" # 将主机端口改为 8081 ``` ### 问题 2: 数据库连接失败 **错误**:`connection refused` **解决方案**: ```bash # 1. 检查 PostgreSQL 是否启动 docker compose ps postgres # 2. 查看 PostgreSQL 日志 docker compose logs postgres # 3. 等待健康检查通过 docker compose ps | grep healthy # 4. 手动测试连接 docker compose exec postgres psql -U postgres -d ocdp ``` ### 问题 3: 构建失败 **错误**:`build failed` **解决方案**: ```bash # 1. 清理旧的镜像和容器 docker compose down -v docker system prune -a # 2. 重新构建(不使用缓存) docker compose build --no-cache # 3. 检查 Dockerfile 和 .dockerignore ``` ### 问题 4: 容器不断重启 **解决方案**: ```bash # 查看容器日志 docker compose logs --tail=100 [service-name] # 检查健康检查状态 docker inspect ocdp-backend | grep -A 20 Health # 禁用健康检查测试 # 在 docker-compose.yml 中注释掉 healthcheck 部分 ``` ### 问题 5: 数据持久化失败 **解决方案**: ```bash # 检查数据卷 docker volume ls docker volume inspect ocdp-go_postgres_data # 检查挂载权限 docker compose exec postgres ls -la /var/lib/postgresql/data ``` ## 🔒 安全建议 ### 生产环境 1. **修改默认密码**: ```bash # .env 文件中 DB_PASSWORD=your-secure-password JWT_SECRET=your-very-secure-secret-key ``` 2. **使用 secrets**: ```yaml # docker-compose.yml secrets: db_password: file: ./secrets/db_password.txt ``` 3. **限制容器权限**: ```yaml services: backend: security_opt: - no-new-privileges:true cap_drop: - ALL cap_add: - NET_BIND_SERVICE ``` 4. **使用专用网络**: ```yaml networks: frontend: driver: bridge backend: driver: bridge internal: true # 不能访问外网 ``` ## 📊 监控和日志 ### 日志聚合 ```bash # 使用 ELK Stack docker compose -f docker-compose.yml -f docker-compose.logging.yml up -d # 或使用 Loki docker compose -f docker-compose.yml -f docker-compose.loki.yml up -d ``` ### 性能监控 ```bash # 查看资源使用 docker stats # 限制资源使用 services: backend: deploy: resources: limits: cpus: '1' memory: 512M reservations: cpus: '0.5' memory: 256M ``` ## 🎯 最佳实践 1. **使用多阶段构建** - 减小镜像大小 2. **配置健康检查** - 确保服务可用性 3. **使用 .dockerignore** - 排除不必要的文件 4. **使用非 root 用户** - 提高安全性 5. **配置日志驱动** - 集中管理日志 6. **使用 depends_on 和 healthcheck** - 确保启动顺序 7. **使用 profiles** - 按需启动服务 ## 🔗 相关命令(Makefile) 项目 Makefile 已集成 Docker Compose 命令: ```bash make docker-up # 启动所有服务 make docker-down # 停止所有服务 make docker-logs # 查看日志 make docker-dev # 开发模式启动 make docker-build # 重新构建镜像 ``` ## 📚 更多资源 - [Docker Compose 文档](https://docs.docker.com/compose/) - [Docker 最佳实践](https://docs.docker.com/develop/dev-best-practices/) - [项目 README](README.md) --- **提示**: 首次启动可能需要几分钟来下载镜像和构建容器,请耐心等待! 有问题?查看日志:`docker compose logs -f`