# 开发环境快速指南 ## 📋 前置要求 - Go 1.21+ - Docker & Docker Compose - Air(热加载工具): `go install github.com/cosmtrek/air@latest` ## 🎯 设计理念 本项目使用 **Docker Compose Profile** 机制,通过单一的 `docker-compose.yml` 文件支持三种运行模式,避免配置文件重复。 ## 🚀 三种运行模式 ### 模式 0: Mock 模式(最快) 纯本地运行,无需任何外部依赖,所有服务都是 Mock。 ```bash make run-0 ``` **特点:** - ✅ 启动最快(秒启动) - ✅ 无需 Docker - ✅ 支持热加载 - ✅ 适合快速功能开发 **停止:** `Ctrl+C` --- ### 模式 1: 开发模式(推荐) Docker 提供真实的 PostgreSQL,后端在本地运行并支持热加载。 ```bash make run-1 ``` **特点:** - ✅ 真实的数据库 - ✅ 支持热加载 - ✅ 代码修改实时生效 - ✅ 适合日常开发 **停止:** `Ctrl+C` 停止后端(数据库容器继续运行) **清理:** `make clean-1` 清理数据库和临时文件 --- ### 模式 2: 生产模式 所有服务完全容器化,模拟生产环境。 ```bash make run-2 ``` **特点:** - ✅ 完全容器化 - ✅ 接近生产环境 - ✅ 后台运行 - ❌ 无热加载 **查看日志:** ```bash docker compose --profile backend logs -f ``` **停止:** ```bash docker compose --profile backend down ``` **清理:** `make clean-2` 清理所有容器和构建产物 --- ## 🧹 清理命令 ```bash # 清理模式 1 的产物(依赖容器 + 临时文件) make clean-1 # 清理模式 2 的产物(所有容器 + 构建产物) make clean-2 ``` --- ## 📊 常用工作流 ### 日常开发 ```bash # 启动开发环境 make run-1 # ... 编码、测试 ... # 代码修改会自动重新编译 # 下班停止(Ctrl+C) # 第二天继续(依赖容器还在运行,直接启动) make run-1 ``` ### 重置数据库 ```bash # 清理并重新开始 make clean-1 make run-1 ``` ### 测试生产部署 ```bash # 启动生产模式 make run-2 # 查看日志 docker compose -f docker-compose.prod.yml logs -f # 测试完成后清理 make clean-2 ``` --- ## 🔧 环境变量配置 复制并修改环境变量配置: ```bash cp env.example .env ``` 主要配置项: - `ADAPTER_MODE`: 设置为 `mock` 启用 Mock 模式(模式 0) - `POSTGRES_*`: 数据库配置(模式 1、2) - `JWT_SECRET`: JWT 密钥(生产环境必须修改) - `ENCRYPTION_KEY`: 加密密钥(必须 32 字节) --- ## 📂 文件说明 | 文件 | 用途 | |------|------| | `Makefile` | 开发命令入口(5个核心命令) | | `.air.toml` | 热加载配置 | | `docker-compose.yml` | 统一配置文件(使用 profile 区分模式) | | `Dockerfile` | 生产镜像构建配置 | | `DEVELOPMENT.md` | 本文档 | ### Docker Compose Profile 说明 - **无 profile**: 只启动 postgres(用于模式 1) - **--profile backend**: 启动 postgres + backend(用于模式 2) - **--profile mock**: 启动 backend-mock(独立的 mock 模式容器) --- ## ❓ 常见问题 ### Q: 模式 1 启动失败,提示端口被占用? A: 检查是否有其他 PostgreSQL 实例在运行: ```bash docker ps | grep postgres # 或者修改 .env 中的 POSTGRES_PORT ``` ### Q: 如何查看依赖服务状态? A: ```bash docker compose ps # 模式 1(只有 postgres) docker compose --profile backend ps # 模式 2(postgres + backend) ``` ### Q: 模式 1 和模式 2 的数据库数据会互相影响吗? A: 会共享同一个数据库容器和数据卷 `ocdp-postgres-data`。 - 模式 1: 使用本地 air 连接到 postgres 容器 - 模式 2: 使用 backend 容器连接到 postgres 容器 - 数据是持久化的,切换模式不会丢失数据 ### Q: 如何完全清理所有 Docker 资源? A: ```bash make clean-1 make clean-2 docker system prune -a --volumes ``` --- ## 💡 提示 - **首次使用**: 推荐从 `make run-0` 开始,快速验证环境 - **日常开发**: 使用 `make run-1`,享受热加载和真实数据库 - **部署前测试**: 使用 `make run-2`,确保容器化部署没问题 - **数据持久化**: 模式 1 和 2 的数据库数据都会持久化,`Ctrl+C` 不会丢失数据 - **完全重置**: 使用 `clean-*` 命令会删除数据卷,数据会丢失 --- ## 🎯 快速参考 ```bash make # 显示帮助 make run-0 # Mock 模式 make run-1 # 开发模式 make run-2 # 生产模式 make clean-1 # 清理开发环境 make clean-2 # 清理生产环境 ```