# Docker Compose编排

<cite>
**本文档引用文件**  
- [docker-compose.yml](file://manifest/docker/docker-compose.yml)
- [docker-compose-local.yaml](file://manifest/docker/docker-compose-local.yaml)
- [install.sh](file://manifest/docker/install.sh)
- [install-test.sh](file://manifest/docker/install-test.sh)
- [Dockerfile](file://manifest/docker/Dockerfile)
- [config.yaml](file://manifest/config/config.yaml)
- [wait-for-it.sh](file://manifest/docker/wait-for-it.sh)
</cite>

## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)

## 简介
本文档深入分析kami_backend项目的Docker Compose编排配置，涵盖服务定义、依赖关系、网络配置、卷挂载、环境变量注入等核心内容。文档详细对比了生产环境与本地开发环境的配置差异，解析自动化部署脚本的工作机制，并提供多环境部署策略。

## 项目结构
kami_backend项目的Docker相关配置集中存放在`manifest/docker`目录下，包含主服务编排文件、构建脚本和配置模板。

```mermaid
graph TD
A[manifest/docker] --> B[docker-compose.yml]
A --> C[docker-compose-local.yaml]
A --> D[Dockerfile]
A --> E[install.sh]
A --> F[install-test.sh]
A --> G[wait-for-it.sh]
```

**图示来源**  
- [docker-compose.yml](file://manifest/docker/docker-compose.yml#L1-L17)
- [docker-compose-local.yaml](file://manifest/docker/docker-compose-local.yaml#L1-L18)

**本节来源**  
- [manifest/docker](file://manifest/docker)

## 核心组件
kami_backend的Docker Compose配置包含主服务、数据库和缓存等核心组件。主服务通过Docker镜像部署，配置了端口映射、卷挂载和网络连接。系统依赖MySQL数据库和Redis缓存，相关连接信息在配置文件中定义。

**本节来源**  
- [docker-compose.yml](file://manifest/docker/docker-compose.yml#L1-L17)
- [config.yaml](file://manifest/config/config.yaml#L27-L57)

## 架构概述
kami_backend采用微服务架构，通过Docker Compose进行服务编排。主服务与外部数据库和缓存服务协同工作，形成完整的应用生态系统。

```mermaid
graph LR
subgraph "应用层"
A[kami_backend服务]
end
subgraph "数据层"
B[MySQL数据库]
C[Redis缓存]
end
A --> B
A --> C
```

**图示来源**  
- [docker-compose.yml](file://manifest/docker/docker-compose.yml#L1-L17)
- [config.yaml](file://manifest/config/config.yaml#L27-L57)

## 详细组件分析

### 主服务配置分析
kami_backend主服务配置定义了镜像来源、容器名称、重启策略、端口映射、卷挂载和网络配置。

#### 服务定义
```mermaid
classDiagram
class KamiBackendService {
+string image
+string container_name
+string restart
+list ports
+list volumes
+list networks
+map labels
}
```

**图示来源**  
- [docker-compose.yml](file://manifest/docker/docker-compose.yml#L2-L12)

### 配置文件分析
系统配置文件定义了数据库连接、Redis配置、服务参数等关键信息。

#### 数据库配置
| 配置项 | v1数据库 | default数据库 |
|--------|---------|-------------|
| **连接字符串** | mysql:root:Woaizixkie!123@tcp(127.0.0.1:3306)/kami | mysql:root:123456@tcp(127.0.0.1:3306)/kami_v2 |
| **最大连接数** | 1000 | 10 |
| **字符集** | utf8mb4 | utf8mb4 |
| **调试模式** | true | true |

**本节来源**  
- [config.yaml](file://manifest/config/config.yaml#L27-L57)

### 环境差异分析
生产环境与本地开发环境的Docker Compose配置存在显著差异。

#### 配置对比
```mermaid
graph TD
A[配置差异] --> B[镜像来源]
A --> C[构建方式]
A --> D[端口映射]
A --> E[容器名称]
B --> F[生产: 远程镜像]
B --> G[本地: 本地构建]
C --> H[生产: 直接使用镜像]
C --> I[本地: 从Dockerfile构建]
D --> J[生产: 22401→12401]
D --> K[本地: 12401→12401]
E --> L[生产: 带版本号]
E --> M[本地: 简单名称]
```

**图示来源**  
- [docker-compose.yml](file://manifest/docker/docker-compose.yml#L1-L17)
- [docker-compose-local.yaml](file://manifest/docker/docker-compose-local.yaml#L1-L18)

## 依赖分析
kami_backend服务依赖于外部的MySQL和Redis服务，通过配置文件中的连接信息建立通信。

```mermaid
graph TD
A[kami_backend] --> B[MySQL]
A --> C[Redis]
B --> D[数据持久化]
C --> E[缓存加速]
```

**图示来源**  
- [config.yaml](file://manifest/config/config.yaml#L27-L57)
- [docker-compose.yml](file://manifest/docker/docker-compose.yml#L1-L17)

**本节来源**  
- [config.yaml](file://manifest/config/config.yaml#L27-L57)
- [utility/config/database.go](file://utility/config/database.go#L1-L9)
- [utility/cache/cache.go](file://utility/cache/cache.go#L41-L86)

## 性能考虑
系统在数据库连接池和Redis连接配置方面进行了优化，确保高并发场景下的稳定性能。v1数据库配置了1000的最大连接数，适应高负载需求，而default数据库保持较低的连接数，适用于常规操作。

## 故障排除指南
部署过程中可能遇到网络连接、配置文件挂载、服务启动顺序等问题。wait-for-it.sh脚本可用于确保服务依赖的正确启动顺序。

**本节来源**  
- [wait-for-it.sh](file://manifest/docker/wait-for-it.sh#L1-L18)
- [install.sh](file://manifest/docker/install.sh#L1-L143)
- [install-test.sh](file://manifest/docker/install-test.sh#L1-L117)

## 结论
kami_backend的Docker Compose编排设计合理，支持多环境部署，通过自动化脚本简化了部署流程。配置文件分离了环境特定参数，提高了系统的可维护性和可扩展性。