Files
ocdp-go/docs/archive/DOCKER_SERVICES.md
mangomqy c5e51ed069 ocdp v1
2025-11-13 02:54:06 +00:00

436 lines
10 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.

# OCDP Docker 服务架构
## 📋 项目概述
OCDP 采用微服务架构,包含以下核心服务:
### 核心服务
1. **Backend API** - Go 后端服务(支持 Mock/Production 模式)
2. **Frontend** - React + TypeScript 前端应用
3. **PostgreSQL** - 主数据库(生产模式)
4. **Redis** - 缓存服务(生产模式)
### 可选服务
- **pgAdmin** - PostgreSQL 管理工具
- **Swagger UI** - API 文档查看器
---
## 🎯 运行模式说明
### 1. **生产模式Real Mode**
- 所有服务连接真实的数据库和外部依赖
- 适用于:生产环境、集成测试
- 使用配置:`docker-compose.yml`
### 2. **开发模式Dev Mode**
- 支持热重载(后端使用 Air前端使用 Vite HMR
- 后端使用 Mock 适配器,不依赖数据库
- 前端连接后端 Mock 数据
- 适用于:日常开发、快速迭代
- 使用配置:`docker-compose.yml` + `docker-compose.dev.yml`
### 3. **Mock 模式(独立测试)**
- 每个服务完全独立Mock 所有外部依赖
- 适用于:单独测试某个服务
- 使用配置:`docker-compose.mock.yml`
---
## 🐳 Dockerfile 说明
### Backend Dockerfiles
| 文件 | 用途 | 特点 |
|------|------|------|
| `backend/Dockerfile` | 生产环境 | 多阶段构建,连接真实数据库 |
| `backend/Dockerfile.dev` | 开发环境 | 使用 Air 热重载,挂载源代码 |
| `backend/Dockerfile.mock` | Mock 测试 | Mock 所有外部依赖,独立运行 |
### Frontend Dockerfiles
| 文件 | 用途 | 特点 |
|------|------|------|
| `frontend/Dockerfile` | 生产环境 | Nginx 静态文件服务 |
| `frontend/Dockerfile.dev` | 开发环境 | Vite Dev Server + HMR |
| `frontend/Dockerfile.mock` | Mock 测试 | 使用前端 Mock 数据 |
---
## 🚀 快速开始
### 场景 1: 生产环境部署Real Mode
```bash
# 启动所有服务(包含数据库)
docker compose up -d
# 查看日志
docker compose logs -f
# 访问服务
# - Frontend: http://localhost:3000
# - Backend: http://localhost:8080
# - pgAdmin: http://localhost:5050 (需要 --profile tools)
```
**环境变量**
```bash
export JWT_SECRET="your-production-secret"
export ENCRYPTION_KEY="your-production-encryption-key-32-bytes"
docker compose up -d
```
### 场景 2: 开发环境Dev Mode
```bash
# 启动开发环境(不需要数据库,使用 Mock
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
# 或后台运行
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
# 访问服务
# - Frontend: http://localhost:5173 (Vite Dev Server)
# - Backend: http://localhost:8080 (Mock Mode)
```
**特点**
- ✅ 后端自动重载Air
- ✅ 前端 HMRVite
- ✅ 不需要数据库Mock 模式)
- ✅ 快速启动,适合日常开发
### 场景 3: 独立测试后端Backend Mock
```bash
# 只启动后端 Mock 服务
docker compose -f docker-compose.mock.yml up backend
# 测试 API
curl http://localhost:8080/health
curl http://localhost:8080/api/v1/registries
```
### 场景 4: 独立测试前端Frontend Mock
```bash
# 只启动前端 Mock 服务
docker compose -f docker-compose.mock.yml up frontend
# 访问前端
# http://localhost:3000
```
### 场景 5: 开发模式 + 真实数据库(可选)
```bash
# 如果需要真实数据库进行开发
docker compose -f docker-compose.yml -f docker-compose.dev.yml --profile with-db up
```
---
## 📁 项目结构
```
ocdp-go/
├── backend/ # 后端服务
│ ├── Dockerfile # 生产环境
│ ├── Dockerfile.dev # 开发环境(热重载)
│ ├── Dockerfile.mock # Mock 测试
│ ├── .air.toml # Air 配置(热重载)
│ ├── cmd/api/main.go # 入口文件
│ ├── internal/ # 内部代码
│ ├── config/ # 配置文件
│ └── data/ # Mock 数据
├── frontend/ # 前端服务
│ ├── Dockerfile # 生产环境
│ ├── Dockerfile.dev # 开发环境Vite Dev Server
│ ├── Dockerfile.mock # Mock 测试
│ ├── nginx.conf # Nginx 配置
│ ├── src/ # 源代码
│ └── package.json # 依赖配置
├── api/ # API 规范
│ └── openapi.yaml # OpenAPI 定义
├── docs/ # 文档
│ ├── features/ # 功能文档
│ ├── deployment/ # 部署文档
│ └── development/ # 开发文档
├── docker-compose.yml # 生产模式配置
├── docker-compose.dev.yml # 开发模式覆盖
├── docker-compose.mock.yml # Mock 模式配置
└── Makefile # 便捷命令
```
---
## 🔧 开发工作流
### 日常开发流程
```bash
# 1. 启动开发环境
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
# 2. 修改代码(自动重载)
# - 后端代码修改后自动重新编译
# - 前端代码修改后 HMR 立即生效
# 3. 查看日志
docker compose -f docker-compose.yml -f docker-compose.dev.yml logs -f backend
docker compose -f docker-compose.yml -f docker-compose.dev.yml logs -f frontend
# 4. 停止服务
docker compose -f docker-compose.yml -f docker-compose.dev.yml down
```
### 测试后端 API
```bash
# 启动后端 Mock
docker compose -f docker-compose.mock.yml up backend -d
# 测试登录
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
# 测试获取 registries
curl http://localhost:8080/api/v1/registries
# 停止
docker compose -f docker-compose.mock.yml down
```
### 构建生产镜像
```bash
# 构建所有镜像
docker compose build
# 只构建后端
docker compose build backend
# 只构建前端
docker compose build frontend
# 无缓存构建
docker compose build --no-cache
```
---
## 🔍 服务详细说明
### Backend Service
**环境变量**
| 变量 | 说明 | Mock 模式 | Production 模式 |
|------|------|-----------|-----------------|
| `ADAPTER_MODE` | 适配器模式 | `mock` | `production` |
| `PORT` | 服务端口 | `8080` | `8080` |
| `DATABASE_URL` | 数据库连接 | 不需要 | 必需 |
| `JWT_SECRET` | JWT 密钥 | 任意值 | 强密钥 |
| `ENCRYPTION_KEY` | 加密密钥 | 任意值32字节 | 强密钥32字节 |
**健康检查**
```bash
curl http://localhost:8080/health
# 返回: {"status":"healthy"}
```
**Mock 数据位置**
- `backend/data/` - Mock 数据文件
- `backend/internal/adapter/output/persistence/mock/` - Mock 实现
### Frontend Service
**环境变量**
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `VITE_API_BASE_URL` | 后端 API 地址 | `http://localhost:8080/api/v1` |
| `VITE_USE_MOCK` | 使用前端 Mock | `false` |
**端口**
- 开发模式:`5173`Vite Dev Server
- 生产模式:`80`Nginx
### PostgreSQL Service
**连接信息**
```
Host: localhost
Port: 5432
Database: ocdp
User: postgres
Password: postgres
```
**管理工具**
```bash
# 启动 pgAdmin
docker compose --profile tools up -d pgadmin
# 访问: http://localhost:5050
# Email: admin@ocdp.local
# Password: admin
```
### Redis Service
**连接信息**
```
Host: localhost
Port: 6379
```
---
## 🛠️ 故障排查
### 问题 1: 后端无法连接数据库
**检查**
```bash
# 确认数据库是否运行
docker compose ps postgres
# 查看数据库日志
docker compose logs postgres
# 测试连接
docker compose exec postgres psql -U postgres -d ocdp -c "SELECT 1;"
```
**解决方案**
- 确保使用生产模式:`ADAPTER_MODE=production`
- 检查 `DATABASE_URL` 环境变量
- 等待数据库健康检查通过
### 问题 2: 前端无法访问后端
**检查**
```bash
# 查看后端状态
curl http://localhost:8080/health
# 查看网络
docker compose ps
docker network inspect ocdp-network
```
**解决方案**
- 确认后端服务运行正常
- 检查 `VITE_API_BASE_URL` 环境变量
- 检查 CORS 配置
### 问题 3: 开发模式热重载不工作
**后端**
```bash
# 确认 Air 正在运行
docker compose -f docker-compose.yml -f docker-compose.dev.yml logs backend | grep air
# 检查文件挂载
docker compose -f docker-compose.yml -f docker-compose.dev.yml exec backend ls -la
```
**前端**
```bash
# 确认 Vite 正在运行
docker compose -f docker-compose.yml -f docker-compose.dev.yml logs frontend | grep VITE
# 检查 HMR
# 浏览器控制台应该显示 [vite] connected
```
### 问题 4: 容器启动失败
```bash
# 查看详细日志
docker compose logs --tail=100
# 重新构建镜像
docker compose build --no-cache
# 清理并重启
docker compose down -v
docker compose up -d
```
---
## 📊 性能建议
### 开发环境优化
1. **使用 Mock 模式**:避免数据库依赖,加快启动速度
2. **关闭不需要的服务**:只启动正在开发的服务
3. **使用 Docker volumes**:提高文件 I/O 性能
### 生产环境优化
1. **使用多阶段构建**:减小镜像体积
2. **启用健康检查**:自动重启失败的服务
3. **配置资源限制**:防止服务占用过多资源
4. **使用 Redis 缓存**:减少数据库查询
---
## 📖 相关文档
- [开发指南](./docs/development/specification.md)
- [部署指南](./docs/deployment/docker-guide.md)
- [API 文档](../../backend/docs/openapi.yaml)
- [Artifact Filter 功能](./docs/features/ARTIFACT_MEDIATYPE_FILTER.md)
---
## 🎓 总结
### 各模式对比
| 特性 | 生产模式 | 开发模式 | Mock 模式 |
|------|---------|---------|----------|
| 数据库 | ✅ PostgreSQL | ❌ Mock | ❌ Mock |
| 热重载 | ❌ | ✅ Air + Vite | ❌ |
| 启动速度 | 慢 | 中 | 快 |
| 适用场景 | 生产/集成测试 | 日常开发 | 独立测试 |
| 资源占用 | 高 | 中 | 低 |
### 推荐使用场景
- 🚀 **日常开发**:使用开发模式
- 🧪 **单元测试**:使用 Mock 模式
- 🔗 **集成测试**:使用生产模式
- 📦 **部署上线**:使用生产模式
### 快速命令参考
```bash
# 开发(推荐)
make dev
# 或
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
# 测试后端
docker compose -f docker-compose.mock.yml up backend
# 测试前端
docker compose -f docker-compose.mock.yml up frontend
# 生产部署
docker compose up -d
# 停止所有
docker compose down
```