# OCDP 使用指南

## 🎯 统一的 docker-compose.yml

现在所有配置都整合在一个文件中，使用 **profiles** 区分不同运行模式。

---

## 🚀 快速开始

### 方式 1: 使用 Make（推荐）

```bash
# 开发模式
make docker-dev

# 生产模式
make docker-prod

# 测试后端
make docker-test-backend

# 测试前端
make docker-test-frontend
```

### 方式 2: 使用 Docker Compose

```bash
# 开发模式
docker compose --profile dev up

# 生产模式
docker compose --profile production up

# Mock 测试模式（后端）
docker compose --profile mock up backend-mock

# Mock 测试模式（前端）
docker compose --profile mock up frontend-mock
```

---

## 📋 三种运行模式

### 1. 开发模式（Dev Profile）

**特点**：
- ✅ 后端 Mock 模式（无需数据库）
- ✅ 热重载（Air + Vite HMR）
- ✅ 快速启动

**启动命令**：
```bash
# 前台运行
docker compose --profile dev up

# 后台运行
docker compose --profile dev up -d

# 或使用 Make
make docker-dev
make docker-dev-bg
```

**访问地址**：
- 前端：http://localhost:5173
- 后端：http://localhost:8080

**服务列表**：
- `backend-dev` - 后端开发服务
- `frontend-dev` - 前端开发服务

### 2. 生产模式（Production Profile）

**特点**：
- ✅ 真实数据库（PostgreSQL + Redis）
- ✅ 完整功能
- ✅ 生产环境配置

**启动命令**：
```bash
# 后台运行
docker compose --profile production up -d

# 或使用 Make
make docker-prod
make docker-up
```

**访问地址**：
- 前端：http://localhost:3000
- 后端：http://localhost:8080
- 数据库：localhost:5432

**服务列表**：
- `postgres` - PostgreSQL 数据库
- `redis` - Redis 缓存
- `backend-prod` - 后端生产服务
- `frontend-prod` - 前端生产服务

### 3. Mock 测试模式（Mock Profile）

**特点**：
- ✅ 独立测试单个服务
- ✅ 无外部依赖
- ✅ 快速启动

**测试后端**：
```bash
# 前台运行
docker compose --profile mock up backend-mock

# 后台运行
docker compose --profile mock up -d backend-mock

# 或使用 Make
make docker-test-backend
make docker-test-backend-bg
```

**测试前端**：
```bash
# 前台运行
docker compose --profile mock up frontend-mock

# 后台运行
docker compose --profile mock up -d frontend-mock

# 或使用 Make
make docker-test-frontend
make docker-test-frontend-bg
```

---

## 🛠️ 常用操作

### 查看日志

```bash
# 查看所有日志
docker compose logs -f

# 查看特定服务日志
docker compose logs -f backend-dev
docker compose logs -f frontend-dev
docker compose logs -f backend-prod
docker compose logs -f backend-mock

# 或使用 Make
make docker-logs
make docker-logs-backend
make docker-logs-frontend
```

### 停止服务

```bash
# 停止所有服务
docker compose down

# 停止特定 profile 的服务
docker compose --profile dev down
docker compose --profile production down
docker compose --profile mock down

# 或使用 Make
make docker-down
```

### 重启服务

```bash
# 重启所有运行的服务
docker compose restart

# 重启特定服务
docker compose restart backend-dev
docker compose restart frontend-dev

# 或使用 Make
make docker-restart
make docker-restart-backend
make docker-restart-frontend
```

### 构建镜像

```bash
# 构建所有镜像
docker compose build

# 无缓存构建
docker compose build --no-cache

# 或使用 Make
make docker-build
make docker-build-no-cache
```

### 查看状态

```bash
# 查看运行的服务
docker compose ps

# 查看详细状态
make docker-status
```

---

## 🔧 开发工具

### 启动 pgAdmin 和 Swagger UI

```bash
# 需要先启动生产模式
docker compose --profile production --profile tools up -d

# 或使用 Make
make docker-tools
```

**访问地址**：
- pgAdmin：http://localhost:5050
- Swagger UI：http://localhost:8081

---

## 📊 服务对比表

| 特性 | 开发模式 | 生产模式 | Mock 模式 |
|------|---------|---------|----------|
| **Profile** | `dev` | `production` | `mock` |
| **后端服务** | `backend-dev` | `backend-prod` | `backend-mock` |
| **前端服务** | `frontend-dev` | `frontend-prod` | `frontend-mock` |
| **数据库** | ❌ Mock | ✅ PostgreSQL | ❌ Mock |
| **前端端口** | 5173 | 3000 | 3000 |
| **热重载** | ✅ | ❌ | ❌ |
| **启动时间** | ~15秒 | ~30秒 | ~5秒 |

---

## 💡 使用场景示例

### 场景 1: 日常开发

```bash
# 1. 启动开发环境
make docker-dev

# 2. 修改代码（自动热重载）

# 3. 查看日志
make docker-logs

# 4. 停止
make docker-down
```

### 场景 2: 测试后端 API

```bash
# 1. 启动后端 Mock
make docker-test-backend-bg

# 2. 测试 API
curl http://localhost:8080/health
curl http://localhost:8080/api/v1/registries

# 3. 停止
docker compose --profile mock down
```

### 场景 3: 生产环境部署

```bash
# 1. 配置环境变量
export JWT_SECRET="your-secret"
export ENCRYPTION_KEY="your-32-byte-key"

# 2. 启动生产环境
make docker-prod

# 3. 检查状态
make docker-status

# 4. 启动管理工具
make docker-tools
```

### 场景 4: 完全重置

```bash
# 1. 停止并删除所有容器和数据
docker compose down -v

# 2. 删除镜像
docker rmi $(docker images | grep ocdp | awk '{print $3}')

# 3. 重新构建
make docker-build

# 4. 重新启动
make docker-dev
```

---

## 🎓 环境变量

### 开发模式环境变量

后端自动使用：
- `ADAPTER_MODE=mock`
- `JWT_SECRET=dev-secret-key`

### 生产模式环境变量

可通过 `.env` 文件或导出环境变量设置：
```bash
export JWT_SECRET="your-production-secret"
export ENCRYPTION_KEY="your-production-encryption-key-32-bytes"
```

---

## 📚 相关文档

- [README.md](./README.md) - 项目概述
- [DOCKER_SERVICES.md](./DOCKER_SERVICES.md) - 详细架构说明
- [COMMANDS_CHEATSHEET.md](./COMMANDS_CHEATSHEET.md) - 命令速查表
- [QUICK_START.md](./QUICK_START.md) - 快速开始指南

---

## ✨ 优势

通过整合到单个 `docker-compose.yml` 文件：

- ✅ **更简洁**：只需维护一个配置文件
- ✅ **更清晰**：所有服务定义在同一处
- ✅ **更灵活**：通过 profiles 轻松切换模式
- ✅ **更易维护**：减少配置重复
- ✅ **向后兼容**：Make 命令保持不变

---

<div align="center">
  <sub>简化配置，提升效率！🚀</sub>
</div>

