# 后端 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 -u root -p < db/tables_nacos.sql # 业务库 mysql -h -u root -p -e "CREATE DATABASE IF NOT EXISTS ghb_base DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" mysql -h -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 # 路由表 ```