# Docker Compose 使用说明

本项目在根目录提供三个 Docker Compose 配置文件，分别面向不同的运行场景。下面说明各自用途与使用方式。

## 公共说明

- 端口映射：
  - 后端：`8080:8080`
  - 前端：`5173:80`
- 运行前建议在根目录准备 `.env`（已提供示例），用于配置以下环境变量：
  - `APP_BASE_URL`
  - `TOKEN_SIGNING_KEY`
  - `JWT_SECRET`
  - `VOLCANO_API_KEY`
  - `SPRING_MAIL_USERNAME`
  - `SPRING_MAIL_PASSWORD`

> 说明：三个 Compose 文件都依赖这些环境变量；其中 `TOKEN_SIGNING_KEY`/`JWT_SECRET` 等不设置会使用空值默认。

## 1) `docker-compose.yml`（本地构建）

用途：本地开发或需要基于源码构建镜像时使用。

特点：
- `backend` 和 `frontend` 使用 `build` 从本地目录构建镜像。
- 挂载 `./ems-backend/json-db` 与 `./ems-backend/uploads` 到容器内，便于持久化数据。

使用方式（PowerShell）：
```bash
docker compose -f docker-compose.yml up -d --build
```

停止并清理（保留挂载目录）：
```bash
docker compose -f docker-compose.yml down
```

## 2) `docker-compose.hub.yml`（Docker Hub 镜像）

用途：不想本地构建，直接使用 Docker Hub 公共镜像。

特点：
- `backend`/`frontend` 使用 `chuxunyu/ems-backend:latest`、`chuxunyu/ems-frontend:latest`。
- 使用 Docker 卷 `ems_json_db`、`ems_uploads` 持久化数据。

使用方式（PowerShell）：
```bash
docker compose -f docker-compose.hub.yml up -d
```

停止并清理（保留卷）：
```bash
docker compose -f docker-compose.hub.yml down
```

如需删除卷（会清空数据）：
```bash
docker compose -f docker-compose.hub.yml down -v
```

## 3) `docker-compose.private.yml`（私有镜像仓库）

用途：使用私有镜像仓库 `docker.aizhangz.top` 的镜像部署。

特点：
- `backend`/`frontend` 使用 `docker.aizhangz.top/ems-backend:latest`、`docker.aizhangz.top/ems-frontend:latest`。
- 使用 Docker 卷 `ems_json_db`、`ems_uploads` 持久化数据。
- 通常需要先登录私有仓库。

使用方式（PowerShell）：
```bash
docker login docker.aizhangz.top
docker compose -f docker-compose.private.yml up -d
```

停止并清理（保留卷）：
```bash
docker compose -f docker-compose.private.yml down
```

如需删除卷（会清空数据）：
```bash
docker compose -f docker-compose.private.yml down -v
```

## 常见检查

- 前端：访问 `http://localhost:5173`
- 后端：访问 `http://localhost:8080`（可结合后端 Swagger UI）
