docs: 补充项目设计与环境文档

- 增加产品功能、技术方案与数据库设计说明

- 增加本地中间件环境与联调说明
This commit is contained in:
2026-03-20 12:45:23 +08:00
parent 425d8dd455
commit 74543cb9bf
4 changed files with 1921 additions and 0 deletions

View File

@@ -0,0 +1,166 @@
# 本地容器环境说明
## 1. 目标
本文档说明如何在本机通过 Docker Compose 快速启动电子名片项目所需的完整容器环境。
当前提供的服务包括:
- MySQL 8.0
- Redis 7
- MinIO
- Spring Boot 后端
- Vue 管理后台Nginx 托管)
对应文件:
- [docker-compose.yml](/Users/slience/postgraduate/easycard/docker-compose.yml)
- [MySQL Dockerfile](/Users/slience/postgraduate/easycard/docker/mysql/Dockerfile)
- [MySQL 配置](/Users/slience/postgraduate/easycard/docker/mysql/conf.d/my.cnf)
- [Redis 配置](/Users/slience/postgraduate/easycard/docker/redis/redis.conf)
- [Backend Dockerfile](/Users/slience/postgraduate/easycard/docker/backend/Dockerfile)
- [Frontend Dockerfile](/Users/slience/postgraduate/easycard/docker/frontend-admin/Dockerfile)
- [Nginx 配置](/Users/slience/postgraduate/easycard/docker/frontend-admin/nginx.conf)
## 2. 启动方式
在项目根目录执行:
```bash
docker compose up -d --build
```
查看状态:
```bash
docker compose ps
```
停止并保留数据卷:
```bash
docker compose down
```
停止并删除数据卷:
```bash
docker compose down -v
```
## 3. 服务说明
### 3.1 MySQL
- 容器名:`easycard-mysql`
- 数据库:`easycard`
- 用户:`root`
- 密码:`root`
说明:
- 首次启动时会自动执行 [easycard_init.sql](/Users/slience/postgraduate/easycard/database/mysql/easycard_init.sql)
- 该脚本当前只负责创建 `easycard` 数据库
- 表结构、平台基础数据、演示数据由后端启动后的 Flyway 脚本统一执行
- 数据持久化目录:`docker/data/mysql`
- 当前不对宿主机暴露端口,仅允许 Docker 内网访问
### 3.2 Redis
- 容器名:`easycard-redis`
- 默认未设置密码
说明:
- 当前为本地开发配置
- 后续若进入联调或准生产环境,建议补充访问密码
- 数据持久化目录:`docker/data/redis`
- 当前不对宿主机暴露端口,仅允许 Docker 内网访问
### 3.3 MinIO
- 容器名:`easycard-minio`
- 用户名:`minioadmin`
- 密码:`minioadmin`
说明:
- `minio-init` 会在启动后自动创建 `easycard` bucket
- 当前脚本默认给该 bucket 开启下载访问,便于本地联调图片访问
- 数据持久化目录:`docker/data/minio`
- 当前不对宿主机暴露端口,仅允许 Docker 内网访问
### 3.4 Backend
- 容器名:`easycard-backend`
- 端口:`8112`
说明:
- 使用 [docker/backend/Dockerfile](/Users/slience/postgraduate/easycard/docker/backend/Dockerfile) 进行多阶段构建
- 容器启动时使用 `docker` profile
- 日志目录挂载到 `docker/data/backend/logs`
- 首次启动会等待 MySQL 健康检查通过后再启动
接口地址:
- [http://localhost:8112/api/v1/system/ping](http://localhost:8112/api/v1/system/ping)
- [http://localhost:8112/swagger-ui/index.html](http://localhost:8112/swagger-ui/index.html)
### 3.5 Frontend Admin
- 容器名:`easycard-frontend-admin`
- 端口:`8081`
说明:
- 使用 [docker/frontend-admin/Dockerfile](/Users/slience/postgraduate/easycard/docker/frontend-admin/Dockerfile) 构建前端产物
- 通过 Nginx 托管前端静态资源
- Nginx 会将 `/api``/swagger-ui``/v3/api-docs` 反向代理到 backend 服务
- Nginx 日志目录挂载到 `docker/data/nginx/logs`
访问地址:
- [http://localhost:8081](http://localhost:8081)
## 4. 与后端配置的对应关系
当前后端默认配置位于:
- [application.yml](/Users/slience/postgraduate/easycard/backend/easycard-boot/src/main/resources/application.yml)
容器内部联通使用:
- `DB_HOST=mysql`
- `DB_PORT=3306`
- `DB_NAME=easycard`
- `DB_USERNAME=root`
- `DB_PASSWORD=root`
- `REDIS_HOST=redis`
- `REDIS_PORT=6379`
- `REDIS_DATABASE=0`
- MinIO 服务名:`minio`
## 5. 数据挂载目录
当前容器数据与日志均挂载到宿主机目录:
- `docker/data/mysql`
- `docker/data/redis`
- `docker/data/minio`
- `docker/data/backend/logs`
- `docker/data/nginx/logs`
这样做的好处:
- 便于本地排查数据
- 重建容器后数据仍保留
- 便于备份和手工清理
## 6. 注意事项
- `easycard_init.sql` 当前仅适用于手工建库和 Docker 首次建库
- 若重新执行初始化脚本,请先删除 MySQL 数据卷,否则 MySQL 不会再次执行 `/docker-entrypoint-initdb.d`
- 若需要重建表结构和演示数据,请删除 MySQL 数据后重新启动 backend由 Flyway 重新执行版本脚本
- 若本机已有 8112 或 8081 端口占用,需要同步调整后端和前端端口映射
- 当前仅 `frontend-admin(8081)``backend(8112)` 对宿主机暴露端口