# Docker 部署说明

## 项目 Docker 化说明

本项目使用 Docker 和 Docker Compose 进行容器化部署，包含两个主要服务：
- Next.js 应用服务（基于 Node.js 22）
- MySQL 数据库服务

## 前提条件

- 安装 [Docker](https://www.docker.com/get-started)
- 安装 [Docker Compose](https://docs.docker.com/compose/install/)

## 部署步骤

### 1. 构建并启动服务

```bash
# 构建并在后台启动所有服务
docker-compose up -d

# 只构建不启动
docker-compose build

# 查看服务日志
docker-compose logs -f
```

### 2. 访问应用

应用将在以下地址可用：
- 前端应用: http://localhost:3000

### 3. 数据库访问

MySQL 数据库信息：
- 主机: localhost:3306
- 用户名: root
- 密码: aiwoQwo520..
- 数据库名: saas_db

可以使用以下命令连接数据库：

```bash
docker exec -it my-mysql mysql -uroot -p"aiwoQwo520.."
```

### 4. 停止服务

```bash
# 停止所有服务但不删除容器
docker-compose stop

# 停止并删除容器和网络
docker-compose down

# 停止并删除容器、网络和数据卷（谨慎使用，会删除数据库数据）
docker-compose down -v
```

## 文件说明

- `Dockerfile`: 用于构建 Next.js 应用的镜像（使用 Node.js 22 和 npm）
- `docker-compose.yml`: 定义和配置服务
- `.dockerignore`: 指定不包含在 Docker 构建上下文中的文件

## 构建流程说明

Dockerfile 使用多阶段构建以优化最终镜像大小：

1. 基础阶段：使用 Node.js 22 Alpine 镜像作为基础
2. 依赖阶段：安装项目依赖
   - 使用 `npm install` 安装依赖
3. 构建阶段：构建 Next.js 应用
   - 使用 `npm run build` 构建应用
4. 运行阶段：配置生产环境并运行应用
   - 使用 standalone 输出模式优化部署

## 环境变量

可在 `docker-compose.yml` 文件中修改环境变量：

- `DB_HOST`: 数据库主机名
- `DB_USER`: 数据库用户名
- `DB_PASSWORD`: 数据库密码
- `DB_NAME`: 数据库名称
- `DB_PORT`: 数据库端口

## 注意事项

1. 数据库数据存储在 Docker 卷 `mysql_data` 中，即使容器被删除也会保留
2. 上传的文件保存在宿主机的 `./uploads` 目录，并映射到容器内的 `/app/uploads`
3. 初始化脚本位于 `./scripts` 目录，会在 MySQL 容器首次启动时执行 