93 lines
2.3 KiB
Markdown
93 lines
2.3 KiB
Markdown
|
# 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 容器首次启动时执行
|