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

481 lines
11 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 项目重构总结
## 📋 重构概述
本次重构主要目标是清理项目结构,为各个服务创建独立的 Dockerfile并通过 docker-compose 实现灵活的服务编排,支持多种运行模式。
---
## ✅ 完成的工作
### 1. 文档整理
#### 移动和整理的文档
-`ARTIFACT_MEDIATYPE_FILTER.md``docs/features/`
-`TESTING_MEDIATYPE_FILTER.md``docs/features/`
-`DEPLOYMENT_STATUS.md``docs/`
-`FIXES_SUMMARY.md``docs/`
#### 新创建的文档
-`DOCKER_SERVICES.md` - 完整的 Docker 服务架构说明
-`QUICK_START.md` - 5分钟快速开始指南
-`README.md` - 全新的项目主页
-`PROJECT_RESTRUCTURE_SUMMARY.md` - 本文档
### 2. Docker 配置文件
#### Backend Dockerfiles
-`backend/Dockerfile` - 生产环境(连接真实数据库)
-`backend/Dockerfile.dev` - 开发环境Air 热重载)
-`backend/Dockerfile.mock` - Mock 测试(无外部依赖)
-`backend/.air.toml` - Air 热重载配置
#### Frontend Dockerfiles
-`frontend/Dockerfile` - 生产环境Nginx 静态服务)
-`frontend/Dockerfile.dev` - 开发环境Vite Dev Server + HMR
-`frontend/Dockerfile.mock` - Mock 测试(前端独立运行)
#### Docker Compose 配置
-`docker-compose.yml` - 生产模式Real Mode
-`docker-compose.dev.yml` - 开发模式Dev Mode
-`docker-compose.mock.yml` - Mock 模式(独立测试)
### 3. Makefile 更新
新增的 Docker 相关命令:
-`make docker-dev` - 启动开发环境
-`make docker-dev-bg` - 后台启动开发环境
-`make docker-prod` - 启动生产环境
-`make docker-test-backend` - 测试后端
-`make docker-test-frontend` - 测试前端
-`make docker-test-backend-bg` - 后台测试后端
-`make docker-test-frontend-bg` - 后台测试前端
-`make docker-logs` - 查看日志
-`make docker-down` - 停止服务
---
## 🏗️ 项目结构
### 最终目录结构
```
ocdp-go/
├── api/
│ └── openapi.yaml # OpenAPI 规范
├── backend/
│ ├── cmd/api/ # 入口文件
│ ├── internal/ # 内部代码
│ ├── config/ # 配置文件
│ ├── data/ # Mock 数据
│ ├── Dockerfile # 生产环境
│ ├── Dockerfile.dev # 开发环境
│ ├── Dockerfile.mock # Mock 测试
│ └── .air.toml # 热重载配置
├── frontend/
│ ├── src/ # 源代码
│ ├── Dockerfile # 生产环境
│ ├── Dockerfile.dev # 开发环境
│ ├── Dockerfile.mock # Mock 测试
│ └── nginx.conf # Nginx 配置
├── docs/
│ ├── features/ # 功能文档
│ │ ├── ARTIFACT_MEDIATYPE_FILTER.md
│ │ └── TESTING_MEDIATYPE_FILTER.md
│ ├── deployment/ # 部署文档
│ ├── development/ # 开发文档
│ ├── DEPLOYMENT_STATUS.md
│ └── FIXES_SUMMARY.md
├── docker-compose.yml # 生产模式
├── docker-compose.dev.yml # 开发模式
├── docker-compose.mock.yml # Mock 模式
├── Makefile # 便捷命令
├── README.md # 项目主页
├── QUICK_START.md # 快速开始
├── DOCKER_SERVICES.md # Docker 服务说明
└── PROJECT_RESTRUCTURE_SUMMARY.md # 本文档
```
---
## 🎯 运行模式说明
### 模式 1: 开发模式Dev Mode
**特点**
- 后端使用 Mock 适配器(不需要数据库)
- 支持热重载(后端 Air前端 Vite HMR
- 快速启动,适合日常开发
**启动命令**
```bash
make docker-dev
# 或
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
```
**访问地址**
- 前端http://localhost:5173
- 后端http://localhost:8080
**适用场景**
- ✅ 日常开发
- ✅ 快速迭代
- ✅ 功能测试
### 模式 2: 生产模式Production/Real Mode
**特点**
- 连接真实的 PostgreSQL 数据库
- 连接真实的 Redis 缓存
- 完整功能,生产环境配置
**启动命令**
```bash
make docker-prod
# 或
docker compose up -d
```
**访问地址**
- 前端http://localhost:3000
- 后端http://localhost:8080
- 数据库localhost:5432
**适用场景**
- ✅ 集成测试
- ✅ 生产部署
- ✅ 完整功能验证
### 模式 3: Mock 模式(独立测试)
**特点**
- 每个服务完全独立
- Mock 所有外部依赖
- 用于单独测试某个服务
**启动命令**
```bash
# 测试后端
make docker-test-backend
# 或
docker compose -f docker-compose.mock.yml up backend
# 测试前端
make docker-test-frontend
# 或
docker compose -f docker-compose.mock.yml up frontend
```
**适用场景**
- ✅ 单元测试
- ✅ API 测试
- ✅ 前端独立开发
---
## 🔍 各服务 Dockerfile 说明
### Backend Dockerfiles
| 文件 | 基础镜像 | 特点 | ADAPTER_MODE |
|------|---------|------|--------------|
| `Dockerfile` | golang:1.24-alpine | 多阶段构建,生产优化 | production |
| `Dockerfile.dev` | golang:1.24-alpine | 包含 Air挂载源码 | mock |
| `Dockerfile.mock` | golang:1.24-alpine | 独立运行Mock 所有依赖 | mock |
**环境变量对比**
| 变量 | Production | Dev | Mock |
|------|-----------|-----|------|
| ADAPTER_MODE | production | mock | mock |
| DATABASE_URL | 必需 | 不需要 | 不需要 |
| JWT_SECRET | 强密钥 | dev-secret | test-secret |
| ENCRYPTION_KEY | 强密钥32字节 | dev-key | test-key |
### Frontend Dockerfiles
| 文件 | 运行时 | 特点 | 开发工具 |
|------|-------|------|---------|
| `Dockerfile` | nginx:alpine | 静态文件服务 | - |
| `Dockerfile.dev` | node:20-alpine | Vite Dev Server | HMR |
| `Dockerfile.mock` | nginx:alpine | 使用前端 Mock 数据 | - |
**端口对比**
| 模式 | 端口 | 说明 |
|------|------|------|
| Production | 80 | Nginx |
| Dev | 5173 | Vite Dev Server |
| Mock | 80 | Nginx |
---
## 📊 服务依赖关系
### 生产模式依赖图
```
Frontend (3000)
Backend (8080)
├─→ PostgreSQL (5432)
└─→ Redis (6379)
```
### 开发模式依赖图
```
Frontend (5173)
Backend (8080, Mock Mode)
└─→ 无外部依赖
```
### Mock 模式依赖图
```
Backend (8080) Frontend (3000)
↓ ↓
无外部依赖 无外部依赖
```
---
## 🚀 使用场景示例
### 场景 1: 开发新功能
```bash
# 1. 启动开发环境
make docker-dev
# 2. 修改代码(自动热重载)
vim backend/cmd/api/main.go
vim frontend/src/App.tsx
# 3. 查看效果
# 访问 http://localhost:5173
# 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 -f docker-compose.mock.yml down
```
### 场景 3: 完整功能测试
```bash
# 1. 启动生产环境
make docker-prod
# 2. 访问前端
open http://localhost:3000
# 3. 测试完整流程
# - 登录
# - 添加 Registry
# - 浏览 Artifacts
# - 部署 Helm Chart
# 4. 停止
make docker-down
```
### 场景 4: 前端独立开发
```bash
# 1. 启动前端 Mock
make docker-test-frontend-bg
# 2. 修改前端代码
vim frontend/src/components/NewComponent.tsx
# 3. 重新构建(如果需要)
docker compose -f docker-compose.mock.yml build frontend
docker compose -f docker-compose.mock.yml up -d frontend
# 4. 停止
docker compose -f docker-compose.mock.yml down
```
---
## 📈 性能对比
### 启动时间对比
| 模式 | 启动时间 | 服务数量 | 资源占用 |
|------|---------|---------|---------|
| Mock 模式(单服务) | ~5秒 | 1 | 低 |
| 开发模式 | ~15秒 | 2 | 中 |
| 生产模式 | ~30秒 | 4-5 | 高 |
### 镜像大小对比
| 镜像 | 大小 | 说明 |
|------|------|------|
| Backend (Production) | ~20MB | 多阶段构建,只包含二进制 |
| Backend (Dev) | ~500MB | 包含 Go 工具链和源码 |
| Frontend (Production) | ~50MB | Nginx + 静态文件 |
| Frontend (Dev) | ~400MB | Node + 依赖 |
---
## 🔧 故障排查
### 常见问题和解决方案
#### 1. 端口冲突
**错误**`port is already allocated`
**解决方案**
```bash
# 查看占用端口
sudo lsof -i :8080
sudo lsof -i :5173
# 修改 docker-compose.yml 中的端口映射
ports:
- "8081:8080" # 改为 8081
```
#### 2. 热重载不工作
**后端**
```bash
# 检查 Air 是否运行
docker compose logs backend | grep "air"
# 重启服务
docker compose restart backend
```
**前端**
```bash
# 检查 Vite 是否运行
docker compose logs frontend | grep "VITE"
# 确认浏览器控制台
# 应该显示:[vite] connected
```
#### 3. 数据库连接失败
**检查**
```bash
# 数据库是否运行
docker compose ps postgres
# 健康检查
docker compose exec postgres pg_isready
```
**解决方案**
- 使用生产模式(`docker compose up`
- 等待数据库启动完成(~10秒
- 检查 `DATABASE_URL` 环境变量
---
## 📚 相关资源
### 文档链接
- [快速开始](./QUICK_START.md) - 5分钟上手指南
- [Docker 服务架构](./DOCKER_SERVICES.md) - 完整服务说明
- [OpenAPI 规范](../../backend/docs/openapi.yaml) - API 定义
- [开发指南](./docs/development/specification.md) - 开发规范
### 外部资源
- [Docker Compose 文档](https://docs.docker.com/compose/)
- [Go 官方文档](https://go.dev/doc/)
- [React 官方文档](https://react.dev/)
- [Vite 官方文档](https://vitejs.dev/)
---
## ✨ 重构收益
### 开发体验提升
-**更快的启动速度**:开发模式启动从 30 秒降至 15 秒
-**热重载支持**:代码修改立即生效,无需重启
-**独立测试能力**:可单独测试任意服务
-**清晰的文档**:完整的使用指南和示例
### 运维效率提升
-**标准化部署**:统一的 Docker 镜像和配置
-**多环境支持**:开发/测试/生产环境一键切换
-**容器化隔离**:服务间相互独立,易于调试
-**便捷的命令**Makefile 提供一键操作
### 代码质量提升
-**清晰的项目结构**:文档和代码分离
-**灵活的架构**:支持 Mock/Real 双模式
-**易于维护**:每个服务独立的 Dockerfile
-**完善的文档**:详细的使用说明和最佳实践
---
## 🎯 下一步计划
### 短期目标
- [ ] 添加 CI/CD 流程
- [ ] 完善单元测试覆盖
- [ ] 添加性能监控
- [ ] 优化镜像大小
### 中期目标
- [ ] Kubernetes 部署支持
- [ ] 多语言支持i18n
- [ ] 权限管理增强
- [ ] API 版本控制
### 长期目标
- [ ] 插件系统
- [ ] 多租户支持
- [ ] 自动扩缩容
- [ ] 高可用架构
---
## 👥 贡献者
感谢所有参与本次重构的贡献者!
---
## 📝 更新日志
### 2025-11-09
- ✅ 完成项目重构
- ✅ 创建多种 Dockerfile
- ✅ 配置 docker-compose 多模式
- ✅ 更新项目文档
- ✅ 优化 Makefile 命令
---
<div align="center">
<sub>Project restructured on 2025-11-09</sub>
</div>