178 lines
4.6 KiB
Markdown
178 lines
4.6 KiB
Markdown
# 后端 Docker 部署
|
||
|
||
## 部署架构
|
||
|
||
| 架构 | compose 文件 | 说明 |
|
||
|------|-------------|------|
|
||
| 单体 | `docker-compose.yml` | 一个 App 容器 |
|
||
| Spring Cloud | `docker-compose.cloud.yml` | Nacos + Gateway + System |
|
||
|
||
中间件(MySQL / Redis / MinIO)**独立选择**,不绑定架构:
|
||
|
||
| 中间件 | 选项 | 说明 |
|
||
|--------|------|------|
|
||
| MySQL | `docker` / `external` | Docker 安装 or 连接外部服务 |
|
||
| Redis | `docker` / `external` | Docker 安装 or 连接外部服务 |
|
||
| MinIO | `docker` / `external` / `none` | Docker 安装 / 外部 / 不使用 |
|
||
|
||
## 前置条件
|
||
|
||
- Docker + Docker Compose
|
||
- **外部 MySQL 场景**:需提前建好 `nacos` 和 `ghb_base` 两个库(见下文)
|
||
|
||
---
|
||
|
||
## 快速开始
|
||
|
||
```bash
|
||
cd deploy
|
||
|
||
# 1. 交互式配置
|
||
bash deploy.sh init
|
||
|
||
# 2. 编译镜像(首次 10-20 分钟)
|
||
bash deploy.sh build
|
||
|
||
# 3. 启动
|
||
bash deploy.sh start
|
||
```
|
||
|
||
---
|
||
|
||
## 完整步骤(Spring Cloud + 外部 MySQL/Redis)
|
||
|
||
### 第一步:初始化数据库
|
||
|
||
```bash
|
||
# Nacos 内部存储库(必须)
|
||
mysql -h <MySQL地址> -u root -p < db/tables_nacos.sql
|
||
|
||
# 业务库
|
||
mysql -h <MySQL地址> -u root -p -e "CREATE DATABASE IF NOT EXISTS ghb_base DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
|
||
mysql -h <MySQL地址> -u root -p ghb_base < db/ghb_base_init.sql
|
||
```
|
||
|
||
### 第二步:交互式配置
|
||
|
||
```bash
|
||
cd deploy
|
||
bash deploy.sh init
|
||
```
|
||
|
||
按提示填写:
|
||
|
||
```
|
||
部署架构: 2. Spring Cloud
|
||
MySQL: 2. 连接外部服务 → 10.13.13.1:3306
|
||
Redis: 2. 连接外部服务 → 10.13.13.1:56379
|
||
MinIO: 3. 不使用
|
||
外接数据库是否已建表? Y
|
||
是否集成前端? Y(需先 pnpm build)
|
||
```
|
||
|
||
### 第三步:编译 + 启动
|
||
|
||
```bash
|
||
bash deploy.sh build && bash deploy.sh start
|
||
```
|
||
|
||
`start` 在 Spring Cloud 模式下自动执行:
|
||
|
||
```
|
||
Phase 1: 启动 Nacos → 等待健康检查 → 无配置则自动导入
|
||
Phase 2: 启动 System → Gateway
|
||
```
|
||
|
||
### 第四步:验证
|
||
|
||
| 服务 | 地址 |
|
||
|------|------|
|
||
| Nacos | `http://localhost:8848/nacos` |
|
||
| Gateway 文档 | `http://localhost:9999/doc.html` |
|
||
| System 文档 | `http://localhost:7001/doc.html` |
|
||
| 前端 | `http://localhost:3001`(如启用) |
|
||
|
||
Nacos 服务列表应有 `jeecg-gateway`、`jeecg-system`。
|
||
|
||
---
|
||
|
||
## 架构链路
|
||
|
||
```
|
||
前端 :3001
|
||
↓
|
||
Gateway :9999 ──┐
|
||
↓ │ ghb-net(Docker 内部网络)
|
||
System :7001 ────┤
|
||
↓ │
|
||
Nacos :8848 ─────┘ ← init-nacos.sh 自动推送配置
|
||
↓
|
||
外部 MySQL / Redis ← Nacos 配置中地址已被替换
|
||
```
|
||
|
||
---
|
||
|
||
## Nacos 配置原理
|
||
|
||
`deploy/nacos/config/*.yaml` 模板中用占位符,`init-nacos.sh` 运行时从 `.env` 读取实际值替换后推送到 Nacos:
|
||
|
||
```yaml
|
||
# 模板(nacos/config/jeecg-dev.yaml)
|
||
url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${DB_NAME}?...
|
||
host: ${REDIS_HOST}
|
||
port: ${REDIS_PORT}
|
||
|
||
# ↓ init-nacos.sh 替换后推送到 Nacos ↓
|
||
|
||
# Nacos 中实际配置
|
||
url: jdbc:mysql://10.13.13.1:3306/ghb_base?...
|
||
host: 10.13.13.1
|
||
port: 56379
|
||
```
|
||
|
||
服务启动时从 Nacos 拉取配置,自动连到外部 MySQL/Redis。
|
||
|
||
### 数据库要求
|
||
|
||
| 库 | 用途 | 谁建 | SQL |
|
||
|----|------|------|-----|
|
||
| `nacos` | Nacos 内部存储 | **手动** | `db/tables_nacos.sql` |
|
||
| `ghb_base` | 业务数据 | 手动 or `deploy.sh init-db` | `db/ghb_base_init.sql` |
|
||
|
||
---
|
||
|
||
## 命令速查
|
||
|
||
| 命令 | 作用 |
|
||
|------|------|
|
||
| `bash deploy.sh init` | 交互式生成 .env |
|
||
| `bash deploy.sh start` | 停旧容器 → 启动(不编译) |
|
||
| `bash deploy.sh build` | 编译镜像 |
|
||
| `bash deploy.sh rebuild [分支]` | 拉代码 + 编译 + 启动 |
|
||
| `bash deploy.sh stop` | 停止所有容器 |
|
||
| `bash deploy.sh logs` | 查看日志 |
|
||
| `bash deploy.sh status` | 容器状态 |
|
||
| `bash deploy.sh config` | 查看配置 |
|
||
| `bash deploy.sh init-db` | 初始化外部业务数据库 |
|
||
| `bash deploy.sh init-nacos` | 强制重新导入 Nacos 配置 |
|
||
|
||
---
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
deploy/
|
||
├── deploy.sh # 主脚本
|
||
├── init-nacos.sh # Nacos 配置导入
|
||
├── .env # 实际配置(gitignore)
|
||
├── docker-compose.yml # 单体编排
|
||
├── docker-compose.cloud.yml # Spring Cloud 编排
|
||
├── config/
|
||
│ └── application-prod.yml # 单体外部配置
|
||
└── nacos/config/
|
||
├── jeecg.yaml # 公共配置
|
||
├── jeecg-dev.yaml # 环境配置(含占位符)
|
||
├── jeecg-gateway-dev.yaml # 网关配置
|
||
└── jeecg-gateway-router.json # 路由表
|
||
```
|