ocdp v1
This commit is contained in:
480
docs/archive/PROJECT_RESTRUCTURE_SUMMARY.md
Normal file
480
docs/archive/PROJECT_RESTRUCTURE_SUMMARY.md
Normal file
@ -0,0 +1,480 @@
|
||||
# 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>
|
||||
|
||||
Reference in New Issue
Block a user