# 主服务配置

<cite>
**本文档引用文件**  
- [docker-compose.yml](file://docker-compose.yml)
- [manifest/docker/docker-compose.yml](file://manifest/docker/docker-compose.yml)
- [manifest/docker/docker-compose-local.yaml](file://manifest/docker/docker-compose-local.yaml)
- [manifest/docker/Dockerfile](file://manifest/docker/Dockerfile)
- [manifest/config/config.yaml](file://manifest/config/config.yaml)
- [main.go](file://main.go)
- [utility/otel/config.go](file://utility/otel/config.go)
- [utility/otel/manager.go](file://utility/otel/manager.go)
</cite>

## 目录
1. [简介](#简介)
2. [Docker Compose配置分析](#docker-compose配置分析)
3. [环境差异配置](#环境差异配置)
4. [运维相关设置](#运维相关设置)
5. [环境变量注入最佳实践](#环境变量注入最佳实践)
6. [扩展配置定制化部署](#扩展配置定制化部署)

## 简介
本文档详细分析kami_backend主服务的Docker Compose配置，涵盖开发与生产环境的配置差异、运维设置、环境变量注入最佳实践以及扩展配置的定制化部署方案。

## Docker Compose配置分析

### 基本配置项
kami_backend服务在Docker Compose中的配置包含以下关键项：

- **image**: 指定服务使用的镜像。在生产环境中使用预构建镜像`git.kkknametrans.buzz/danial/kami_backend_$BRANCH:$VERSION`，在CI/CD环境中使用`docker.kkknametrans.buzz/kami/backend:${DRONE_BRANCH}${DRONE_BUILD_NUMBER}`。
- **container_name**: 容器名称，根据环境变量动态生成，如`kami-backend-$BRANCH-$VERSION`。
- **ports**: 端口映射，将主机的22401端口映射到容器的12401端口。
- **volumes**: 卷挂载，将日志和配置文件目录挂载到容器中，确保数据持久化。
- **restart**: 重启策略，设置为`always`，确保容器在任何情况下都会自动重启。
- **environment**: 环境变量，包括`serverName`、`gatewayAddr`、`shopAddr`、`portalAddr`等。

**Section sources**
- [docker-compose.yml](file://docker-compose.yml#L20-L47)
- [manifest/docker/docker-compose.yml](file://manifest/docker/docker-compose.yml#L2-L17)

## 环境差异配置

### 开发环境配置
开发环境使用本地构建的镜像，通过`docker-compose-local.yaml`文件定义：

- **build**: 使用本地上下文构建镜像，指定Dockerfile路径和构建参数。
- **image**: 构建后的镜像名称为`kami_backend:latest`。
- **ports**: 直接映射到12401端口，便于本地调试。

### 生产环境配置
生产环境使用预构建的镜像，通过`docker-compose.yml`文件定义：

- **image**: 使用远程仓库的预构建镜像，版本由环境变量控制。
- **container_name**: 容器名称包含分支和版本信息，便于追踪。
- **volumes**: 挂载外部存储路径，确保日志和配置文件的持久化。

**Section sources**
- [manifest/docker/docker-compose-local.yaml](file://manifest/docker/docker-compose-local.yaml#L2-L18)
- [docker-compose.yml](file://docker-compose.yml#L20-L47)

## 运维相关设置

### 健康检查
在Dockerfile中定义了健康检查命令：
```dockerfile
HEALTHCHECK --interval=60s --timeout=3s --retries=3 CMD curl -f http://127.0.0.1:12401/api/monitor/heathcheck || exit 1
```
该配置每60秒检查一次服务健康状态，超时时间为3秒，重试3次。

### 重启策略
重启策略设置为`always`，确保服务在任何情况下都能自动恢复。

### 日志驱动
日志配置在`config.yaml`中定义：
- **logPath**: 日志文件存储路径。
- **logStdout**: 是否输出到终端。
- **errorLogEnabled**: 是否记录错误日志。
- **accessLogEnabled**: 是否记录访问日志。

**Section sources**
- [manifest/docker/Dockerfile](file://manifest/docker/Dockerfile#L38-L40)
- [manifest/config/config.yaml](file://manifest/config/config.yaml#L4-L15)

## 环境变量注入最佳实践

### 数据库连接
数据库连接信息通过`config.yaml`文件配置：
```yaml
database:
  default:
    link: "mysql:root:123456@tcp(127.0.0.1:3306)/kami_v2?charset=utf8mb4&parseTime=true&loc=Local"
```

### Redis配置
Redis配置在`config.yaml`中定义：
```yaml
redis:
  default:
    address: 127.0.0.1:6379
    db: 4
```

### OpenTelemetry设置
OpenTelemetry配置在`main.go`中初始化：
```go
config := otel.DefaultConfig()
config.ServiceName = serviceName
config.CollectorURL = collectorURL
config.Insecure = true
config.Headers = map[string]string{
    "x-service-token": "your-token-here",
}
```

**Section sources**
- [manifest/config/config.yaml](file://manifest/config/config.yaml#L27-L57)
- [main.go](file://main.go#L25-L38)

## 扩展配置定制化部署

### 自定义网络
所有服务都连接到外部网络`1panel-network`，确保服务间的通信。

### 配置文件挂载
通过volumes挂载配置文件和日志目录，实现配置的外部化管理。

### 环境变量管理
使用环境变量控制服务行为，如`serverName`、`gatewayAddr`等，便于不同环境的部署。

**Section sources**
- [docker-compose.yml](file://docker-compose.yml#L20-L47)
- [manifest/docker/docker-compose.yml](file://manifest/docker/docker-compose.yml#L2-L17)