添加qiming-rcoder模块
This commit is contained in:
@@ -0,0 +1,328 @@
|
||||
# Docker Compose部署
|
||||
|
||||
<cite>
|
||||
**本文档中引用的文件**
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
- [build.sh](file://docker/scripts/build.sh)
|
||||
- [deploy.sh](file://docker/scripts/deploy.sh)
|
||||
- [Dockerfile](file://docker/Dockerfile)
|
||||
- [start-rcoder.sh](file://docker/start-rcoder.sh)
|
||||
- [config.yml](file://config.yml)
|
||||
- [README.md](file://README.md)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概述](#架构概述)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖分析](#依赖分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 简介
|
||||
本文档全面阐述了RCoder项目的Docker Compose部署方案。通过分析`docker-compose.yml`文件、构建脚本和部署流程,详细说明了一键部署的实现机制。文档涵盖了服务编排、环境配置、多环境差异、部署对比以及常见问题的排查方法,旨在为新手和经验丰富的运维人员提供完整的部署指导。
|
||||
|
||||
## 项目结构
|
||||
RCoder项目采用模块化设计,主要包含crates核心组件、docker部署脚本和配置文件。部署相关文件集中在docker目录下,包括Dockerfile、docker-compose.yml和一系列shell脚本。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "部署脚本"
|
||||
build[build.sh]
|
||||
deploy[deploy.sh]
|
||||
start[start-rcoder.sh]
|
||||
end
|
||||
subgraph "配置文件"
|
||||
compose[docker-compose.yml]
|
||||
dockerfile[Dockerfile]
|
||||
config[config.yml]
|
||||
end
|
||||
subgraph "核心代码"
|
||||
crates[crates/]
|
||||
end
|
||||
build --> dockerfile
|
||||
deploy --> compose
|
||||
deploy --> build
|
||||
start --> compose
|
||||
config --> compose
|
||||
compose --> dockerfile
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
- [build.sh](file://docker/scripts/build.sh)
|
||||
- [deploy.sh](file://docker/scripts/deploy.sh)
|
||||
|
||||
**节源**
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
- [build.sh](file://docker/scripts/build.sh)
|
||||
- [deploy.sh](file://docker/scripts/deploy.sh)
|
||||
|
||||
## 核心组件
|
||||
本节分析Docker Compose部署的核心组件,包括服务定义、构建流程和启动机制。通过环境变量注入、卷挂载和网络配置,实现了灵活的部署方案。
|
||||
|
||||
**节源**
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
- [Dockerfile](file://docker/Dockerfile)
|
||||
- [start-rcoder.sh](file://docker/start-rcoder.sh)
|
||||
|
||||
## 架构概述
|
||||
RCoder的Docker Compose部署采用单服务架构,主服务rcoder包含所有必要组件。部署架构通过分层设计实现了构建、部署和运行的分离。
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[用户] --> B[deploy.sh]
|
||||
B --> C{镜像存在?}
|
||||
C --> |否| D[build.sh]
|
||||
C --> |是| E[docker-compose up]
|
||||
D --> F[Docker构建]
|
||||
F --> G[rcoder镜像]
|
||||
G --> E
|
||||
E --> H[rcoder容器]
|
||||
H --> I[项目工作目录]
|
||||
H --> J[Docker Socket]
|
||||
H --> K[日志目录]
|
||||
style H fill:#f9f,stroke:#333
|
||||
style I fill:#bbf,stroke:#333
|
||||
style J fill:#f96,stroke:#333
|
||||
style K fill:#6f9,stroke:#333
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [deploy.sh](file://docker/scripts/deploy.sh)
|
||||
- [build.sh](file://docker/scripts/build.sh)
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
|
||||
## 详细组件分析
|
||||
### Docker Compose配置分析
|
||||
`docker-compose.yml`文件定义了rcoder服务的完整配置,包括镜像、端口、环境变量、卷挂载和健康检查。
|
||||
|
||||
#### 服务定义
|
||||
```mermaid
|
||||
classDiagram
|
||||
class RcoderService {
|
||||
+image : string
|
||||
+ports : array
|
||||
+environment : array
|
||||
+volumes : array
|
||||
+command : array
|
||||
+healthcheck : object
|
||||
+restart : string
|
||||
+networks : array
|
||||
}
|
||||
RcoderService : "使用" --> DockerSocket
|
||||
RcoderService : "挂载" --> ProjectWorkspace
|
||||
RcoderService : "挂载" --> Logs
|
||||
RcoderService : "挂载" --> Specs
|
||||
RcoderService : "连接" --> AgentNetwork
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
|
||||
#### 环境变量配置
|
||||
服务通过环境变量实现灵活配置,支持默认值和变量替换机制。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([启动]) --> TZ["设置时区: Asia/Shanghai"]
|
||||
TZ --> RUST_LOG["设置日志级别: debug"]
|
||||
RUST_LOG --> RCODER_PORT["设置服务端口: ${RCODER_PORT:-8087}"]
|
||||
RCODER_PORT --> DOCKER_SOCKET["设置Docker Socket路径"]
|
||||
DOCKER_SOCKET --> End([配置完成])
|
||||
style Start fill:#f9f,stroke:#333
|
||||
style End fill:#f9f,stroke:#333
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
|
||||
### 构建与部署流程
|
||||
#### 构建脚本分析
|
||||
`build.sh`脚本实现了镜像的自动化构建流程,包含错误检查和构建成功提示。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant User
|
||||
participant BuildScript
|
||||
participant Docker
|
||||
User->>BuildScript : 执行 ./build.sh
|
||||
BuildScript->>BuildScript : 检查 docker-compose.yml
|
||||
alt 文件存在
|
||||
BuildScript->>Docker : docker build 命令
|
||||
Docker-->>BuildScript : 构建结果
|
||||
alt 构建成功
|
||||
BuildScript-->>User : 显示成功信息
|
||||
else 构建失败
|
||||
BuildScript-->>User : 显示失败信息并退出
|
||||
end
|
||||
else 文件不存在
|
||||
BuildScript-->>User : 显示错误并退出
|
||||
end
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [build.sh](file://docker/scripts/build.sh)
|
||||
|
||||
#### 部署脚本分析
|
||||
`deploy.sh`脚本实现了完整的部署流程,包括依赖检查、镜像构建和容器启动。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant User
|
||||
participant DeployScript
|
||||
participant BuildScript
|
||||
participant DockerCompose
|
||||
User->>DeployScript : 执行 ./deploy.sh
|
||||
DeployScript->>DeployScript : 检查必要文件
|
||||
alt 文件完整
|
||||
DeployScript->>DeployScript : 检查镜像存在
|
||||
alt 镜像不存在
|
||||
DeployScript->>BuildScript : 调用 ./build.sh
|
||||
BuildScript-->>DeployScript : 构建结果
|
||||
alt 构建失败
|
||||
DeployScript-->>User : 显示失败信息
|
||||
end
|
||||
end
|
||||
DeployScript->>DockerCompose : docker-compose up -d
|
||||
DockerCompose-->>DeployScript : 启动结果
|
||||
alt 启动成功
|
||||
DeployScript-->>User : 显示成功信息和管理命令
|
||||
else 启动失败
|
||||
DeployScript-->>User : 显示失败信息
|
||||
end
|
||||
else 文件缺失
|
||||
DeployScript-->>User : 显示错误并退出
|
||||
end
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [deploy.sh](file://docker/scripts/deploy.sh)
|
||||
- [build.sh](file://docker/scripts/build.sh)
|
||||
|
||||
### 启动脚本分析
|
||||
`start-rcoder.sh`脚本负责容器内的服务启动和环境初始化。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[启动脚本] --> B[设置环境变量]
|
||||
B --> C[创建必要目录]
|
||||
C --> D[显示环境配置]
|
||||
D --> E[启动rcoder服务]
|
||||
E --> F[执行rcoder二进制]
|
||||
style A fill:#f9f,stroke:#333
|
||||
style F fill:#f9f,stroke:#333
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [start-rcoder.sh](file://docker/start-rcoder.sh)
|
||||
|
||||
## 依赖分析
|
||||
### 服务依赖关系
|
||||
RCoder服务依赖于宿主机的Docker守护进程,通过挂载Docker Socket实现容器管理功能。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
RcoderService --> DockerDaemon
|
||||
DockerDaemon --> HostSystem
|
||||
RcoderService --> ProjectWorkspace
|
||||
RcoderService --> LogStorage
|
||||
RcoderService --> SpecFiles
|
||||
style RcoderService fill:#f9f,stroke:#333
|
||||
style DockerDaemon fill:#f96,stroke:#333
|
||||
style HostSystem fill:#bbf,stroke:#333
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
- [config.yml](file://config.yml)
|
||||
|
||||
### 配置文件依赖
|
||||
系统通过多层配置机制实现灵活的环境适配,优先级从高到低为:命令行参数 > 环境变量 > 配置文件 > 默认值。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A[命令行参数] --> B[环境变量]
|
||||
B --> C[config.yml]
|
||||
C --> D[默认配置]
|
||||
D --> E[应用]
|
||||
style A fill:#f96,stroke:#333
|
||||
style B fill:#f96,stroke:#333
|
||||
style C fill:#f96,stroke:#333
|
||||
style D fill:#f96,stroke:#333
|
||||
```
|
||||
|
||||
**图源**
|
||||
- [config.yml](file://config.yml)
|
||||
- [README.md](file://README.md)
|
||||
|
||||
## 性能考虑
|
||||
Docker Compose部署方案在性能方面具有以下特点:
|
||||
- **启动时间**:由于需要拉取镜像和启动容器,首次启动时间较长
|
||||
- **资源占用**:容器化部署增加了少量资源开销,但提供了更好的隔离性
|
||||
- **网络性能**:通过端口映射和内部网络通信,网络延迟极低
|
||||
- **存储性能**:使用卷挂载,文件I/O性能接近原生
|
||||
|
||||
对于生产环境,建议:
|
||||
1. 预先构建镜像以减少部署时间
|
||||
2. 配置适当的资源限制防止资源耗尽
|
||||
3. 使用持久化存储确保数据安全
|
||||
4. 启用健康检查确保服务可用性
|
||||
|
||||
## 故障排除指南
|
||||
### 常见问题及解决方案
|
||||
#### 服务启动失败
|
||||
**可能原因**:
|
||||
- 必要文件缺失
|
||||
- 镜像构建失败
|
||||
- 端口被占用
|
||||
- Docker Socket权限不足
|
||||
|
||||
**解决方案**:
|
||||
1. 检查`docker-compose.yml`和`Dockerfile`是否存在
|
||||
2. 确认Docker服务正在运行
|
||||
3. 检查8087端口是否被其他进程占用
|
||||
4. 确保用户有访问`/var/run/docker.sock`的权限
|
||||
|
||||
#### 网络连接超时
|
||||
**可能原因**:
|
||||
- 容器网络配置错误
|
||||
- 防火墙阻止连接
|
||||
- 服务未正确启动
|
||||
|
||||
**解决方案**:
|
||||
1. 检查`docker-compose.yml`中的网络配置
|
||||
2. 验证容器是否在`agent-network`网络中
|
||||
3. 使用`docker logs`查看服务日志
|
||||
4. 检查防火墙设置
|
||||
|
||||
#### 配置加载异常
|
||||
**可能原因**:
|
||||
- 环境变量未正确设置
|
||||
- 配置文件格式错误
|
||||
- 卷挂载路径不正确
|
||||
|
||||
**解决方案**:
|
||||
1. 检查`deploy.sh`中的环境变量设置
|
||||
2. 验证`config.yml`的YAML格式
|
||||
3. 确认卷挂载路径在宿主机上存在
|
||||
4. 使用`docker exec`进入容器验证配置文件位置
|
||||
|
||||
**节源**
|
||||
- [deploy.sh](file://docker/scripts/deploy.sh)
|
||||
- [docker-compose.yml](file://docker/docker-compose.yml)
|
||||
- [config.yml](file://config.yml)
|
||||
|
||||
## 结论
|
||||
RCoder的Docker Compose部署方案提供了一套完整、可靠的部署机制。通过`build.sh`和`deploy.sh`脚本实现了一键部署,降低了部署复杂度。`docker-compose.yml`文件清晰地定义了服务配置,包括端口映射、卷挂载和环境变量注入。
|
||||
|
||||
与独立Docker部署相比,Docker Compose方案具有以下优势:
|
||||
- **简化管理**:通过单一配置文件管理多个服务
|
||||
- **环境一致性**:确保开发、测试和生产环境的一致性
|
||||
- **依赖管理**:自动处理服务间的依赖关系
|
||||
- **可移植性**:配置文件可在不同环境中复用
|
||||
|
||||
对于高级用户,可以进一步集成监控系统、实现自动化CI/CD流水线,并配置高可用集群以满足生产环境需求。
|
||||
Reference in New Issue
Block a user