添加qiming-rcoder模块

This commit is contained in:
Codex
2026-06-01 13:54:52 +08:00
parent 8092c4b1f8
commit 4b1a580132
539 changed files with 151650 additions and 0 deletions

View File

@@ -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流水线并配置高可用集群以满足生产环境需求。

View File

@@ -0,0 +1,320 @@
# Docker部署
<cite>
**本文档引用的文件**
- [Dockerfile](file://docker/Dockerfile)
- [build-docker-image.sh](file://docker/scripts/build-docker-image.sh)
- [docker-compose.yml](file://docker/docker-compose.yml)
- [.dockerignore](file://.dockerignore)
- [start-rcoder.sh](file://docker/start-rcoder.sh)
- [deploy.sh](file://docker/scripts/deploy.sh)
- [analyze-rcoder.sh](file://docker/scripts/analyze-rcoder.sh)
- [generate-flamegraph.sh](file://docker/scripts/generate-flamegraph.sh)
- [diagnose-blocking.sh](file://docker/scripts/diagnose-blocking.sh)
- [rcoder-service.sh](file://rcoder-service.sh)
- [config.yml](file://config.yml)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概述](#架构概述)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
## 简介
本文档详细介绍了Rcoder项目的Docker部署方案。文档深入解析了多阶段构建过程、基础镜像选择、依赖安装和二进制文件复制策略。通过实际代码库中的具体示例展示了构建脚本`build-docker-image.sh`的使用方法和参数配置。文档还记录了环境变量、挂载卷和网络配置的最佳实践解释了Docker部署与rcoder主服务的集成关系并提供了常见构建失败、权限问题和容器启动错误的解决方案。为初学者提供逐步指导的同时也为高级用户提供性能优化和安全加固建议。
## 项目结构
```mermaid
graph TD
Docker["Docker 部署"]
Docker --> Scripts["docker/scripts/"]
Docker --> Config["docker/"]
Docker --> Root["项目根目录"]
Scripts --> build_image["build-docker-image.sh"]
Scripts --> deploy["deploy.sh"]
Scripts --> start["start-rcoder.sh"]
Scripts --> analyze["analyze-rcoder.sh"]
Scripts --> diagnose["diagnose-blocking.sh"]
Scripts --> flamegraph["generate-flamegraph.sh"]
Config --> Dockerfile["Dockerfile"]
Config --> compose["docker-compose.yml"]
Config --> start_script["start-rcoder.sh"]
Root --> dockerignore[".dockerignore"]
Root --> service_script["rcoder-service.sh"]
Root --> config["config.yml"]
```
**图源**
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker/scripts/](file://docker/scripts/)
- [docker-compose.yml](file://docker/docker-compose.yml)
**本节来源**
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker/scripts/](file://docker/scripts/)
- [docker-compose.yml](file://docker/docker-compose.yml)
## 核心组件
本文档的核心组件包括Docker多阶段构建系统、调试工具集、部署脚本和配置管理。Dockerfile采用多阶段构建策略分离编译和运行环境确保生产镜像的轻量化和安全性。构建脚本`build-docker-image.sh`自动化了镜像构建流程,而`deploy.sh`脚本则提供了完整的部署解决方案。调试工具集包括`analyze-rcoder.sh``diagnose-blocking.sh``generate-flamegraph.sh`,为生产环境的问题诊断提供了强大支持。
**本节来源**
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker/scripts/build-docker-image.sh](file://docker/scripts/build-docker-image.sh)
- [docker/scripts/deploy.sh](file://docker/scripts/deploy.sh)
## 架构概述
```mermaid
graph TD
Build["构建阶段"]
Runtime["运行时阶段"]
Deployment["部署阶段"]
Debug["调试工具"]
Build --> |"FROM rust:1.90-bookworm AS builder"| Builder["编译器镜像"]
Builder --> |"cargo build --release"| Binary["rcoder 二进制"]
Runtime --> |"FROM rust:1.90-bookworm"| RuntimeImage["运行时镜像"]
RuntimeImage --> |"COPY --from=builder"| CopyBinary["复制二进制"]
RuntimeImage --> |"安装调试工具"| DebugTools["调试工具集"]
RuntimeImage --> |"创建用户和目录"| Setup["环境设置"]
Deployment --> |"docker-compose up"| Container["容器实例"]
Container --> |"挂载卷"| Volumes["卷挂载"]
Container --> |"环境变量"| Env["环境配置"]
Container --> |"网络配置"| Network["网络设置"]
Debug --> |"analyze-rcoder"| Process["进程分析"]
Debug --> |"diagnose-blocking"| Blocking["阻塞诊断"]
Debug --> |"generate-flamegraph"| Performance["性能分析"]
Build --> Runtime
Runtime --> Deployment
Deployment --> Debug
```
**图源**
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker-compose.yml](file://docker/docker-compose.yml)
- [docker/scripts/](file://docker/scripts/)
## 详细组件分析
### Docker多阶段构建分析
```mermaid
graph TD
Stage1["构建阶段"]
Stage2["运行时阶段"]
subgraph Stage1
A["基础镜像: rust:1.90-bookworm"]
B["安装编译依赖"]
C["复制源码"]
D["编译release版本"]
E["安装Rust调试工具"]
A --> B --> C --> D --> E
end
subgraph Stage2
F["基础镜像: rust:1.90-bookworm"]
G["设置环境变量"]
H["安装运行时和调试依赖"]
I["创建应用用户和目录"]
J["从构建阶段复制二进制"]
K["复制启动脚本"]
L["创建调试工具脚本"]
M["设置工作目录和权限"]
N["暴露端口"]
O["健康检查"]
P["启动命令"]
F --> G --> H --> I --> J --> K --> L --> M --> N --> O --> P
end
E --> |"COPY --from=builder"| J
```
**图源**
- [docker/Dockerfile](file://docker/Dockerfile#L12-L304)
**本节来源**
- [docker/Dockerfile](file://docker/Dockerfile#L12-L304)
### 构建脚本分析
```mermaid
flowchart TD
Start["开始构建"]
Start --> Check["检查Dockerfile存在"]
Check --> |"存在"| BuildBinary["构建rcoder二进制"]
Check --> |"不存在"| Error1["报错退出"]
BuildBinary --> |"成功"| BuildImage["构建Docker镜像"]
BuildBinary --> |"失败"| Error2["报错退出"]
BuildImage --> |"成功"| Success["构建成功"]
BuildImage --> |"失败"| Error3["报错退出"]
Success --> Info["显示使用方式"]
Info --> End["结束"]
Error1 --> End
Error2 --> End
Error3 --> End
```
**图源**
- [docker/scripts/build-docker-image.sh](file://docker/scripts/build-docker-image.sh#L1-L38)
**本节来源**
- [docker/scripts/build-docker-image.sh](file://docker/scripts/build-docker-image.sh#L1-L38)
### 部署脚本分析
```mermaid
flowchart TD
Start["开始部署"]
Start --> CheckFiles["检查必要文件"]
CheckFiles --> |"存在"| CheckImage["检查镜像是否存在"]
CheckFiles --> |"不存在"| Error1["报错退出"]
CheckImage --> |"存在"| StartService["启动服务"]
CheckImage --> |"不存在"| BuildImage["构建镜像"]
BuildImage --> |"成功"| StartService
BuildImage --> |"失败"| Error2["报错退出"]
StartService --> |"成功"| Success["部署成功"]
StartService --> |"失败"| Error3["报错退出"]
Success --> Commands["显示管理命令"]
Commands --> End["结束"]
Error1 --> End
Error2 --> End
Error3 --> End
```
**图源**
- [docker/scripts/deploy.sh](file://docker/scripts/deploy.sh#L1-L42)
**本节来源**
- [docker/scripts/deploy.sh](file://docker/scripts/deploy.sh#L1-L42)
### 调试工具分析
```mermaid
graph TD
DebugTools["调试工具集"]
DebugTools --> Analyze["analyze-rcoder.sh"]
DebugTools --> Diagnose["diagnose-blocking.sh"]
DebugTools --> Flamegraph["generate-flamegraph.sh"]
Analyze --> |"功能"| A1["进程基本信息"]
Analyze --> |"功能"| A2["线程状态"]
Analyze --> |"功能"| A3["网络连接"]
Analyze --> |"功能"| A4["文件描述符"]
Analyze --> |"功能"| A5["内存使用"]
Diagnose --> |"功能"| D1["进程状态"]
Diagnose --> |"功能"| D2["网络队列"]
Diagnose --> |"功能"| D3["阻塞线程"]
Diagnose --> |"功能"| D4["系统资源"]
Diagnose --> |"功能"| D5["错误日志"]
Diagnose --> |"功能"| D6["死锁检查"]
Flamegraph --> |"功能"| F1["性能采样"]
Flamegraph --> |"功能"| F2["火焰图生成"]
Flamegraph --> |"功能"| F3["结果分析"]
Flamegraph --> |"功能"| F4["问题定位"]
```
**图源**
- [docker/scripts/analyze-rcoder.sh](file://docker/scripts/analyze-rcoder.sh)
- [docker/scripts/diagnose-blocking.sh](file://docker/scripts/diagnose-blocking.sh)
- [docker/scripts/generate-flamegraph.sh](file://docker/scripts/generate-flamegraph.sh)
**本节来源**
- [docker/scripts/analyze-rcoder.sh](file://docker/scripts/analyze-rcoder.sh)
- [docker/scripts/diagnose-blocking.sh](file://docker/scripts/diagnose-blocking.sh)
- [docker/scripts/generate-flamegraph.sh](file://docker/scripts/generate-flamegraph.sh)
## 依赖分析
```mermaid
graph LR
Dockerfile --> rust["rust:1.90-bookworm"]
Dockerfile --> cargo["Cargo"]
Dockerfile --> apt["apt-get"]
build_script --> docker["Docker"]
build_script --> cargo["Cargo"]
deploy_script --> docker_compose["docker-compose"]
deploy_script --> build_script["build.sh"]
start_script --> rcoder["rcoder 二进制"]
start_script --> bash["bash"]
config --> yaml["YAML"]
rust --> openssl["libssl-dev"]
rust --> protobuf["protobuf-compiler"]
rust --> build_essential["build-essential"]
runtime --> curl["curl"]
runtime --> jq["jq"]
runtime --> gdb["gdb"]
runtime --> strace["strace"]
runtime --> htop["htop"]
runtime --> tcpdump["tcpdump"]
```
**图源**
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker/scripts/build-docker-image.sh](file://docker/scripts/build-docker-image.sh)
- [docker/scripts/deploy.sh](file://docker/scripts/deploy.sh)
**本节来源**
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker/scripts/build-docker-image.sh](file://docker/scripts/build-docker-image.sh)
- [docker/scripts/deploy.sh](file://docker/scripts/deploy.sh)
## 性能考虑
Rcoder的Docker部署在性能方面进行了多项优化。多阶段构建确保了运行时镜像的轻量化减少了攻击面和启动时间。调试镜像包含了完整的性能分析工具集包括`perf``flamegraph``strace`,可以进行深入的性能分析。`generate-flamegraph.sh`脚本自动化了火焰图的生成过程,帮助开发者快速定位性能瓶颈。`diagnose-blocking.sh`脚本专门用于诊断阻塞问题,通过分析线程状态和系统调用,快速发现潜在的性能问题。
**本节来源**
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker/scripts/generate-flamegraph.sh](file://docker/scripts/generate-flamegraph.sh)
- [docker/scripts/diagnose-blocking.sh](file://docker/scripts/diagnose-blocking.sh)
## 故障排除指南
### 常见构建失败解决方案
```mermaid
flowchart TD
BuildFail["构建失败"]
BuildFail --> CheckDockerfile["检查Dockerfile存在"]
CheckDockerfile --> |"不存在"| CreateDockerfile["创建Dockerfile"]
CheckDockerfile --> |"存在"| CheckNetwork["检查网络连接"]
CheckNetwork --> |"连接失败"| FixNetwork["修复网络"]
CheckNetwork --> |"连接正常"| CheckDependencies["检查依赖"]
CheckDependencies --> |"依赖缺失"| InstallDependencies["安装依赖"]
CheckDependencies --> |"依赖完整"| CheckSource["检查源码"]
CheckSource --> |"源码损坏"| RestoreSource["恢复源码"]
CheckSource --> |"源码正常"| CheckDisk["检查磁盘空间"]
CheckDisk --> |"空间不足"| FreeSpace["清理空间"]
CheckDisk --> |"空间充足"| CheckPermissions["检查权限"]
CheckPermissions --> |"权限不足"| FixPermissions["修复权限"]
CheckPermissions --> |"权限正常"| CheckConfig["检查配置"]
CheckConfig --> |"配置错误"| FixConfig["修复配置"]
CheckConfig --> |"配置正确"| SeekHelp["寻求帮助"]
```
**本节来源**
- [docker/scripts/build-docker-image.sh](file://docker/scripts/build-docker-image.sh)
- [docker/Dockerfile](file://docker/Dockerfile)
### 权限问题解决方案
当遇到权限问题时首先检查Docker守护进程是否正在运行并确保当前用户有权限访问Docker socket。如果使用`sudo`运行Docker命令考虑将用户添加到`docker`组以避免权限问题。对于容器内部的权限问题检查Dockerfile中是否正确创建了应用用户并确保挂载卷的权限设置正确。
**本节来源**
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker/docker-compose.yml](file://docker/docker-compose.yml)
### 容器启动错误解决方案
容器启动错误可能由多种原因引起。首先检查`docker-compose.yml`文件中的配置是否正确,特别是端口映射和卷挂载。使用`docker logs`命令查看容器日志,定位具体的错误信息。如果遇到依赖缺失问题,确保所有必要的依赖都已正确安装。对于网络问题,检查容器的网络配置和防火墙设置。
**本节来源**
- [docker/docker-compose.yml](file://docker/docker-compose.yml)
- [docker/scripts/deploy.sh](file://docker/scripts/deploy.sh)
## 结论
Rcoder项目的Docker部署方案设计精良采用了多阶段构建策略确保了生产环境的安全性和效率。调试镜像包含了丰富的诊断工具为生产环境的问题排查提供了强大支持。构建和部署脚本自动化了整个流程降低了人为错误的风险。通过合理的配置管理和卷挂载策略实现了配置与代码的分离提高了部署的灵活性。整体方案既适合初学者快速上手也为高级用户提供了深入优化和调试的可能性。

View File

@@ -0,0 +1,296 @@
# systemd服务管理
<cite>
**本文引用的文件**
- [rcoder-service.sh](file://rcoder-service.sh)
- [README.md](file://README.md)
- [docker/scripts/start-rcoder.sh](file://docker/scripts/start-rcoder.sh)
- [docker/Dockerfile](file://docker/Dockerfile)
- [docker/docker-compose.yml](file://docker/docker-compose.yml)
- [Cargo.toml](file://Cargo.toml)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向运维与开发团队,系统性阐述如何将 rcoder 服务通过 systemd 进行开机自启、自动重启与状态监控,并结合仓库内的脚本与配置,给出完整的集成方案与最佳实践。重点覆盖:
- rcoder-service.sh 与 systemd 的集成方式与差异
- systemd 服务单元文件的编写要点([Service]、[Install]、[Timer]
- start-rcoder.sh 在 systemd 上下文中的执行流程与环境准备
- 日志查看、状态查询与故障排查的标准操作
- 权限管理、资源限制与安全沙箱的配置建议
- 常见问题(启动失败、权限不足、依赖未就绪)的定位与解决
## 项目结构
围绕 systemd 集成的关键文件与位置如下:
- systemd 服务单元示例位于 README.md 中,提供标准的 [Unit]/[Service]/[Install] 配置模板
- rcoder-service.sh 是传统“手动服务管理脚本”,用于本地或非 systemd 场景
- docker/scripts/start-rcoder.sh 是容器场景下的启动脚本,展示环境变量与工作目录准备
- docker/Dockerfile 与 docker/docker-compose.yml 展示了容器内健康检查与重启策略
- Cargo.toml 描述了项目依赖与运行时特性,有助于理解 systemd 下的运行环境
```mermaid
graph TB
A["系统服务管理<br/>systemd"] --> B["rcoder 服务单元<br/>rcoder.service"]
B --> C["可执行文件<br/>/opt/rcoder/target/release/rcoder"]
B --> D["工作目录<br/>/opt/rcoder"]
B --> E["环境变量<br/>RUST_LOG, RCODER_PORT 等"]
F["rcoder-service.sh<br/>本地脚本管理"] -.-> C
G["docker/scripts/start-rcoder.sh<br/>容器启动脚本"] -.-> C
H["docker/Dockerfile<br/>健康检查/暴露端口"] --> I["健康检查<br/>/health"]
J["docker/docker-compose.yml<br/>重启策略/restart: always"] --> B
```
图表来源
- [README.md](file://README.md#L560-L583)
- [rcoder-service.sh](file://rcoder-service.sh#L134-L191)
- [docker/scripts/start-rcoder.sh](file://docker/scripts/start-rcoder.sh#L1-L23)
- [docker/Dockerfile](file://docker/Dockerfile#L293-L304)
- [docker/docker-compose.yml](file://docker/docker-compose.yml#L30-L33)
章节来源
- [README.md](file://README.md#L560-L583)
- [rcoder-service.sh](file://rcoder-service.sh#L1-L328)
- [docker/scripts/start-rcoder.sh](file://docker/scripts/start-rcoder.sh#L1-L23)
- [docker/Dockerfile](file://docker/Dockerfile#L293-L304)
- [docker/docker-compose.yml](file://docker/docker-compose.yml#L30-L33)
## 核心组件
- systemd 服务单元:定义服务行为、用户、工作目录、环境变量、重启策略与安装目标
- rcoder-service.sh提供 start/stop/restart/status 的本地脚本化管理,适合非 systemd 场景
- start-rcoder.sh容器内启动脚本负责环境变量注入、目录创建与执行 rcoder
- 健康检查与重启策略Dockerfile 的 HEALTHCHECK 与 docker-compose.yml 的 restart: always 体现容器层面的自愈能力
章节来源
- [README.md](file://README.md#L560-L583)
- [rcoder-service.sh](file://rcoder-service.sh#L134-L284)
- [docker/scripts/start-rcoder.sh](file://docker/scripts/start-rcoder.sh#L1-L23)
- [docker/Dockerfile](file://docker/Dockerfile#L293-L304)
- [docker/docker-compose.yml](file://docker/docker-compose.yml#L30-L33)
## 架构总览
下图展示了 systemd 与 rcoder 的典型交互systemd 启动 rcoderrcoder 通过健康检查对外提供服务容器场景下start-rcoder.sh 负责环境准备与进程启动。
```mermaid
sequenceDiagram
participant OS as "操作系统"
participant SD as "systemd"
participant SVC as "rcoder.service"
participant BIN as "rcoder 可执行文件"
participant LOG as "日志文件"
participant NET as "网络端口"
OS->>SD : "enable/start"
SD->>SVC : "加载单元并初始化"
SVC->>BIN : "ExecStart 启动进程"
BIN->>LOG : "写入日志"
BIN->>NET : "监听端口"
SVC-->>SD : "健康检查通过/失败"
SD-->>OS : "自动重启/通知"
```
图表来源
- [README.md](file://README.md#L560-L583)
- [docker/Dockerfile](file://docker/Dockerfile#L293-L304)
## 详细组件分析
### systemd 服务单元文件编写指南
- [Unit]:描述服务元信息与依赖时机
- Description服务描述
- After在网络就绪后再启动
- [Service]:核心执行与生命周期控制
- Typesimplesystemd 直接管理 ExecStart 进程)
- User指定运行用户建议独立非 root 用户)
- WorkingDirectory工作目录存放配置、日志、PID 文件)
- ExecStart启动命令建议使用绝对路径
- Restartalways异常退出后自动重启
- RestartSec重启间隔避免频繁抖动
- Environment注入日志级别、端口等环境变量
- [Install]:安装目标
- WantedBymulti-user.target多用户运行级别
章节来源
- [README.md](file://README.md#L560-L583)
### rcoder-service.sh 与 systemd 的差异与迁移建议
- rcoder-service.sh 的职责
- 依赖检查可执行文件、Bun/NPM 等)
- PID 文件管理与进程状态判断
- 日志输出与错误提示
- 启停与状态查询
- 与 systemd 的差异
- rcoder-service.sh 为“前台”脚本systemd 期望“后台”守护进程
- rcoder-service.sh 自带 nohup 与日志重定向systemd 通过 StandardOutput/StandardError 管理日志
- rcoder-service.sh 依赖本地 PATH 与工作目录systemd 通过 WorkingDirectory 与 Environment 管理
- 迁移建议
- 若仍使用 rcoder-service.sh建议将其作为 ExecStart 的入口脚本,但需确保其按 systemd 期望的“后台”方式运行
- 更推荐直接使用 ExecStart 指向 rcoder 可执行文件,并通过 Environment 注入所需变量
章节来源
- [rcoder-service.sh](file://rcoder-service.sh#L68-L103)
- [rcoder-service.sh](file://rcoder-service.sh#L134-L191)
- [rcoder-service.sh](file://rcoder-service.sh#L193-L236)
- [rcoder-service.sh](file://rcoder-service.sh#L246-L284)
### start-rcoder.sh 在 systemd 上下文中的执行流程与环境准备
- 环境变量准备
- RUST_LOG日志级别
- PORT服务端口
- DOCKER_SOCKET_PATHDocker 套接字路径
- RCODER_WORKSPACE工作区目录
- 目录创建
- logs 与 workspace 目录确保存在
- 启动 rcoder
- 使用 exec 方式启动,使 systemd 能正确接管进程
- 通过 -- 参数传递端口给 rcoder
章节来源
- [docker/scripts/start-rcoder.sh](file://docker/scripts/start-rcoder.sh#L1-L23)
### systemd 与容器场景的协同
- docker/Dockerfile
- EXPOSE 暴露端口(含 tokio-console 端口)
- HEALTHCHECK 对 /health 进行健康检查
- docker/docker-compose.yml
- restart: always 提供容器层面的自愈
- 健康检查与端口映射配合 systemd 的外部可用性
章节来源
- [docker/Dockerfile](file://docker/Dockerfile#L293-L304)
- [docker/docker-compose.yml](file://docker/docker-compose.yml#L30-L33)
## 依赖关系分析
- rcoder 服务对运行时环境的依赖
- Rust 运行时与日志库tracing、tracing-subscriber
- HTTP 与异步运行时tokio、axum、tower
- OpenTelemetry 与 Tokio Console可选
- systemd 对服务的依赖
- 可执行文件路径与权限
- 工作目录与日志目录的可写权限
- 环境变量端口、日志级别、Docker 套接字等)
```mermaid
graph LR
A["rcoder 可执行文件"] --> B["HTTP 服务<br/>端口监听"]
A --> C["日志系统<br/>tracing/tracing-subscriber"]
A --> D["异步运行时<br/>tokio/axum/tower"]
A --> E["可观测性<br/>OpenTelemetry/Tokio Console"]
F["systemd"] --> A
F --> G["工作目录/日志目录"]
F --> H["环境变量"]
```
图表来源
- [Cargo.toml](file://Cargo.toml#L54-L102)
- [Cargo.toml](file://Cargo.toml#L92-L102)
- [Cargo.toml](file://Cargo.toml#L199-L205)
章节来源
- [Cargo.toml](file://Cargo.toml#L54-L102)
- [Cargo.toml](file://Cargo.toml#L92-L102)
- [Cargo.toml](file://Cargo.toml#L199-L205)
## 性能考虑
- 日志级别与性能
- RUST_LOG=info 适合生产debug 会增加 IO 与 CPU 开销
- 端口与网络
- 确保端口未被占用;合理规划防火墙规则
- 健康检查与重启
- HEALTHCHECK 与 restart: always 可提升可用性,但需避免过度重启导致抖动
- 资源限制
- systemd 可通过 LimitNOFILE、LimitMEM/CPU 等进行资源约束(建议在单元文件中配置)
[本节为通用指导,不直接分析具体文件]
## 故障排查指南
- 启动失败
- 检查 ExecStart 路径与权限
- 查看日志journalctl -u rcoder -f
- 验证环境变量是否正确注入
- 权限不足
- 确认 User 拥有工作目录与日志目录的读写权限
- 端口是否需要 root 权限(建议使用非特权端口)
- 依赖服务未就绪
- 使用 After=network.target 等依赖时机
- 在容器场景下,确认 Docker 套接字挂载与权限
- 日志查看与状态查询
- 日志journalctl -u rcoder -n 100
- 状态systemctl status rcoder
- 启停systemctl start/stop/restart rcoder
- 常见问题定位
- 端口占用:调整 RCODER_PORT 或停止占用进程
- 端口被占用:参考 README 中的端口调整示例
章节来源
- [README.md](file://README.md#L560-L583)
- [rcoder-service.sh](file://rcoder-service.sh#L134-L191)
- [rcoder-service.sh](file://rcoder-service.sh#L193-L236)
- [rcoder-service.sh](file://rcoder-service.sh#L246-L284)
## 结论
- systemd 集成 rcoder 的关键在于:明确的单元文件、正确的 ExecStart、合理的环境变量与工作目录、以及可靠的健康检查与重启策略
- 若采用容器部署start-rcoder.sh 提供了清晰的环境准备与启动流程,可作为 systemd ExecStart 的入口脚本
- 生产环境中建议结合日志级别控制、资源限制与健康检查,确保服务稳定与可观测
[本节为总结性内容,不直接分析具体文件]
## 附录
### systemd 服务单元文件编写示例(基于仓库内容)
- [Unit]
- DescriptionRCoder AI Development Platform
- Afternetwork.target
- [Service]
- Typesimple
- Userrcoder
- WorkingDirectory/opt/rcoder
- ExecStart/opt/rcoder/target/release/rcoder --port 3000
- Restartalways
- RestartSec5
- EnvironmentRUST_LOG=infoRCODER_PORT=3000
- [Install]
- WantedBymulti-user.target
章节来源
- [README.md](file://README.md#L560-L583)
### start-rcoder.sh 在 systemd 上下文中的执行流程
```mermaid
flowchart TD
Start(["进入 systemd"]) --> Prep["准备环境变量<br/>RUST_LOG/PORT/DOCKER_SOCKET_PATH/RCODER_WORKSPACE"]
Prep --> Mkdir["创建日志与工作目录"]
Mkdir --> Exec["exec 启动 rcoder<br/>传递端口参数"]
Exec --> Done(["进程由 systemd 管理"])
```
图表来源
- [docker/scripts/start-rcoder.sh](file://docker/scripts/start-rcoder.sh#L1-L23)
### 日志查看、状态查询与故障排查标准操作
- 日志查看
- journalctl -u rcoder -f
- journalctl -u rcoder -n 100
- 状态查询
- systemctl status rcoder
- 启停控制
- systemctl start/stop/restart rcoder
- 常见问题
- 端口被占用:调整端口或释放占用进程
- 权限不足:修正用户与目录权限
- 依赖未就绪:检查 After 与 Docker 套接字挂载
章节来源
- [README.md](file://README.md#L560-L583)
- [rcoder-service.sh](file://rcoder-service.sh#L134-L191)
- [rcoder-service.sh](file://rcoder-service.sh#L193-L236)
- [rcoder-service.sh](file://rcoder-service.sh#L246-L284)

View File

@@ -0,0 +1,485 @@
# 生产环境配置
<cite>
**本文引用的文件列表**
- [config.yml](file://config.yml)
- [rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml)
- [config.rsrcoder](file://crates/rcoder/src/config.rs)
- [config.rsagent_runner](file://crates/agent_runner/src/config.rs)
- [docker-compose.yml](file://docker/docker-compose.yml)
- [start-rcoder.sh](file://docker/start-rcoder.sh)
- [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs)
- [analyze-rcoder.sh](file://docker/scripts/analyze-rcoder.sh)
- [diagnose-blocking.sh](file://docker/scripts/diagnose-blocking.sh)
- [generate-flamegraph.sh](file://docker/scripts/generate-flamegraph.sh)
- [server.rspingora-proxy](file://crates/pingora-proxy/src/server.rs)
- [types.rsdocker_manager](file://crates/docker_manager/src/types.rs)
- [manager.rsdocker_manager](file://crates/docker_manager/src/manager.rs)
- [service_config.rsshared_types](file://crates/shared_types/src/service_config.rs)
- [router.rsrcoder](file://crates/rcoder/src/router.rs)
- [main.rsrcoder](file://crates/rcoder/src/main.rs)
- [main.rsagent_runner](file://crates/agent_runner/src/main.rs)
- [install.md](file://install.md)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件面向系统管理员与运维工程师,系统化梳理生产环境配置,涵盖 config.yml 中的各项参数、性能调优、安全加固、日志级别、资源限制、健康检查、高可用策略、TLS/访问控制/审计日志建议、配置热更新与敏感信息管理、配置版本控制,以及结合 analyze-rcoder.sh、generate-flamegraph.sh 等诊断脚本的生产监控与瓶颈分析方法,并提供生产部署检查清单与优化建议。
## 项目结构
- 配置来源与优先级:命令行参数 > 环境变量 > 配置文件 > 默认值
- Docker Compose 通过挂载宿主机 Docker Socket 与工作目录,实现容器内对宿主机资源的可见性与隔离
- 服务包含主服务与 AgentRunner 两个子服务,二者共享多镜像配置与资源限制能力
```mermaid
graph TB
subgraph "宿主机"
DC["docker-compose.yml"]
WS["项目工作目录<br/>/app/project_workspace"]
LOGS["日志目录<br/>/app/logs"]
SOCK["Docker Socket<br/>/var/run/docker.sock"]
end
subgraph "容器: rcoder"
SRV["rcoder 主服务"]
CFG["配置加载<br/>config.rs"]
HEALTH["健康检查端点<br/>/health"]
PROXY["Pingora 代理服务"]
end
DC --> SRV
WS --> SRV
LOGS --> SRV
SOCK --> SRV
SRV --> PROXY
SRV --> HEALTH
SRV --> CFG
```
图表来源
- [docker-compose.yml](file://docker/docker-compose.yml#L1-L37)
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
- [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [server.rspingora-proxy](file://crates/pingora-proxy/src/server.rs#L38-L72)
章节来源
- [docker-compose.yml](file://docker/docker-compose.yml#L1-L37)
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
## 核心组件
- 配置加载与优先级
- 命令行参数覆盖配置文件;环境变量覆盖所有配置;未设置时回退到默认值
- Docker 配置支持环境变量覆盖(如网络模式、工作目录、自动清理、容器 TTL
- 健康检查
- 主服务提供 /health 健康端点Compose 健康检查基于该端点
- 代理与负载均衡
- 基于 Pingora 的反向代理,支持轮询/一致性哈希、健康检查、连接池与 HTTP/2
- 资源限制与容器安全
- 多镜像配置支持为 rcoder 与 agent-runner 设置独立资源限制(内存/CPU/交换)
- 容器安全通过能力降级与网络隔离策略降低风险
- 日志与遥测
- 按天滚动 JSON 日志;支持 trace_id 传播;控制台与文件双通道输出
章节来源
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
- [config.rsagent_runner](file://crates/agent_runner/src/config.rs#L110-L191)
- [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [docker-compose.yml](file://docker/docker-compose.yml#L24-L30)
- [server.rspingora-proxy](file://crates/pingora-proxy/src/server.rs#L38-L72)
- [types.rsdocker_manager](file://crates/docker_manager/src/types.rs#L51-L82)
- [manager.rsdocker_manager](file://crates/docker_manager/src/manager.rs#L147-L165)
- [main.rsrcoder](file://crates/rcoder/src/main.rs#L274-L320)
- [main.rsagent_runner](file://crates/agent_runner/src/main.rs#L173-L231)
## 架构总览
生产环境采用“主服务 + 代理 + 多镜像容器”的组合,通过 Docker Compose 统一编排rcoder 主服务负责业务逻辑与健康检查Pingora 代理负责端口转发与健康检查,容器内通过资源限制与安全策略保障稳定性与安全性。
```mermaid
graph TB
subgraph "客户端"
C1["HTTP 客户端"]
end
subgraph "边缘"
PXY["Pingora 代理服务"]
HC["健康检查"]
end
subgraph "应用"
RC["rcoder 主服务"]
AR["AgentRunner 子服务"]
CFG["配置系统"]
LOG["日志系统"]
end
subgraph "运行时"
DCK["Docker 引擎"]
IMG["镜像仓库"]
end
C1 --> PXY
PXY --> RC
RC --> AR
RC --> CFG
RC --> LOG
RC -.-> DCK
AR -.-> DCK
DCK --> IMG
```
图表来源
- [server.rspingora-proxy](file://crates/pingora-proxy/src/server.rs#L38-L72)
- [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
- [docker-compose.yml](file://docker/docker-compose.yml#L1-L37)
## 详细组件分析
### 配置系统与优先级
- 配置来源与顺序
- 命令行参数 > 环境变量 > 配置文件 > 默认值
- DockerConfig 支持环境变量覆盖网络模式、工作目录、自动清理、容器 TTL
- 关键配置项说明(来自 config.yml 与 rcoder_default.yml
- default_agent默认 AI 代理类型
- projects_dir项目工作目录
- port主服务端口
- proxy_config.listen_port代理监听端口
- proxy_config.default_backend_port默认后端端口
- proxy_config.health_check.*:健康检查策略
- docker_config.multi_image_config.*:多镜像配置(含 rcoder 与 agent-runner 的镜像、环境变量、命令、资源限制、挂载、工作目录、网络模式等)
- docker_config.auto_cleanup自动清理
- docker_config.container_ttl_seconds容器存活时间
```mermaid
flowchart TD
Start(["启动"]) --> LoadFile["尝试读取配置文件"]
LoadFile --> Parse["解析 YAML 为 AppConfig"]
Parse --> ApplyEnv["应用环境变量覆盖"]
ApplyEnv --> ApplyCLI["应用命令行参数覆盖"]
ApplyCLI --> Validate["校验 Docker 多镜像配置"]
Validate --> Final["生成最终配置"]
Final --> Run(["运行服务"])
```
图表来源
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
- [config.rsagent_runner](file://crates/agent_runner/src/config.rs#L110-L191)
章节来源
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
- [config.rsagent_runner](file://crates/agent_runner/src/config.rs#L110-L191)
- [config.yml](file://config.yml#L1-L161)
- [rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml#L1-L175)
### 健康检查与高可用
- 主服务健康端点:/health 返回服务状态与时间戳
- Compose 健康检查:基于 /health重试次数、间隔、超时、启动期均配置
- 代理健康检查proxy_config.health_check.* 控制代理后端健康探测
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Compose as "Docker Compose"
participant Service as "rcoder 主服务"
participant Handler as "健康检查处理器"
Client->>Compose : "健康检查请求"
Compose->>Service : "GET /health"
Service->>Handler : "路由到健康检查"
Handler-->>Service : "构造响应"
Service-->>Compose : "200 OK {status,timestamp,service}"
Compose-->>Client : "健康状态"
```
图表来源
- [docker-compose.yml](file://docker/docker-compose.yml#L24-L30)
- [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
章节来源
- [docker-compose.yml](file://docker/docker-compose.yml#L24-L30)
- [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
### 代理与负载均衡
- Pingora 代理支持轮询/一致性哈希、健康检查、连接池与 HTTP/2
- 代理端口与后端端口、后端主机、端口参数名均可配置
- 代理统计接口可用于观测请求量、成功率、平均响应时间等
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Pxy as "Pingora 代理"
participant Svc as "后端服务"
participant Stats as "代理统计接口"
Client->>Pxy : "请求 /proxy/{port}/path"
Pxy->>Svc : "转发到 http : //backend_host : default_backend_port"
Svc-->>Pxy : "响应"
Pxy-->>Client : "响应"
Client->>Stats : "GET /proxy/stats"
Stats-->>Client : "统计信息"
```
图表来源
- [server.rspingora-proxy](file://crates/pingora-proxy/src/server.rs#L38-L72)
- [router.rsrcoder](file://crates/rcoder/src/router.rs#L1-L50)
章节来源
- [server.rspingora-proxy](file://crates/pingora-proxy/src/server.rs#L38-L72)
- [router.rsrcoder](file://crates/rcoder/src/router.rs#L1-L50)
### 资源限制与容器安全
- 多镜像配置支持为 rcoder 与 agent-runner 设置资源限制内存、CPU、交换并可配置工作目录、网络模式、挂载、命令、入口点等
- 容器安全策略:移除 NET_RAW/NET_ADMIN 能力,禁用特权模式,降低容器逃逸与网络攻击面
- 容器 TTL 与自动清理:避免僵尸容器积累
```mermaid
classDiagram
class ServiceResourceLimits {
+memory_limit : u64?
+cpu_limit : f64?
+swap_limit : u64?
+disk_limit : u64?
+process_limit : u64?
}
class ServiceImageConfig {
+image : string?
+arm64_image : string?
+amd64_image : string?
+default_image : string?
+environment : map
+mounts : Mount[]
+command : string[]
+entrypoint : string[]?
+work_dir : string
+network_mode : string
+container_path_template : string
+resource_limits : ServiceResourceLimits?
}
class HostConfig {
+cap_drop : string[]
+privileged : bool
+auto_remove : bool
}
ServiceImageConfig --> ServiceResourceLimits : "包含"
HostConfig --> ServiceImageConfig : "配合运行"
```
图表来源
- [service_config.rsshared_types](file://crates/shared_types/src/service_config.rs#L48-L91)
- [types.rsdocker_manager](file://crates/docker_manager/src/types.rs#L51-L82)
- [manager.rsdocker_manager](file://crates/docker_manager/src/manager.rs#L147-L165)
- [config.yml](file://config.yml#L31-L161)
- [rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml#L31-L175)
章节来源
- [service_config.rsshared_types](file://crates/shared_types/src/service_config.rs#L48-L91)
- [types.rsdocker_manager](file://crates/docker_manager/src/types.rs#L51-L82)
- [manager.rsdocker_manager](file://crates/docker_manager/src/manager.rs#L147-L165)
- [config.yml](file://config.yml#L31-L161)
- [rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml#L31-L175)
### 日志级别与遥测
- 日志滚动:按天滚动,保留最近 N 天日志
- 输出格式JSON 文件日志便于采集与分析;控制台简洁输出
- 环境变量RUST_LOG 控制日志级别RCODER_PORT/RCODER_PROJECTS_DIR 等覆盖端口与工作目录
- 追踪传播:支持 trace_id 传播,便于分布式链路追踪
```mermaid
flowchart TD
Init["初始化遥测"] --> FileLayer["文件日志层(JSON)"]
Init --> ConsoleLayer["控制台日志层"]
FileLayer --> Output["按天滚动输出"]
ConsoleLayer --> Output
Init --> Trace["设置 TraceContextPropagator"]
```
图表来源
- [main.rsrcoder](file://crates/rcoder/src/main.rs#L274-L320)
- [main.rsagent_runner](file://crates/agent_runner/src/main.rs#L173-L231)
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L283-L310)
章节来源
- [main.rsrcoder](file://crates/rcoder/src/main.rs#L274-L320)
- [main.rsagent_runner](file://crates/agent_runner/src/main.rs#L173-L231)
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L283-L310)
### 诊断脚本与性能分析
- analyze-rcoder.sh进程基本信息、线程状态、网络连接、文件描述符、内存、CPU、上下文切换
- diagnose-blocking.sh阻塞线程分析、futex 等待、系统资源、最近错误日志、推荐下一步诊断
- generate-flamegraph.shperf 采样、火焰图生成、原始 perf 数据保存、输出位置与分析要点
```mermaid
flowchart TD
AStart["开始诊断"] --> FindPid["查找 rcoder 进程 PID"]
FindPid --> Analyze["执行 analyze-rcoder.sh"]
Analyze --> BlockDiag["执行 diagnose-blocking.sh"]
BlockDiag --> Flame["执行 generate-flamegraph.sh"]
Flame --> Review["查看 SVG 火焰图与原始 perf 数据"]
Review --> End["结束"]
```
图表来源
- [analyze-rcoder.sh](file://docker/scripts/analyze-rcoder.sh#L1-L56)
- [diagnose-blocking.sh](file://docker/scripts/diagnose-blocking.sh#L1-L98)
- [generate-flamegraph.sh](file://docker/scripts/generate-flamegraph.sh#L1-L59)
章节来源
- [analyze-rcoder.sh](file://docker/scripts/analyze-rcoder.sh#L1-L56)
- [diagnose-blocking.sh](file://docker/scripts/diagnose-blocking.sh#L1-L98)
- [generate-flamegraph.sh](file://docker/scripts/generate-flamegraph.sh#L1-L59)
## 依赖关系分析
- 配置依赖
- rcoder 主服务依赖配置系统加载 AppConfig其中包含代理与 Docker 配置
- agent_runner 服务同样依赖配置系统,支持独立的端口与代理配置
- 运行时依赖
- Docker Compose 依赖 Docker Socket 与工作目录挂载
- 代理依赖 Pingora 库提供的服务实例
- 安全与资源
- 容器安全策略依赖 docker_manager 的 HostConfig 配置
- 资源限制依赖 shared_types 的 ServiceResourceLimits
```mermaid
graph LR
CFG["配置系统<br/>config.rs"] --> RC["rcoder 主服务"]
CFG --> AR["AgentRunner 服务"]
RC --> PXY["Pingora 代理"]
RC --> DCK["Docker 引擎"]
AR --> DCK
DCK --> DM["docker_manager"]
DM --> ST["shared_types"]
```
图表来源
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
- [config.rsagent_runner](file://crates/agent_runner/src/config.rs#L110-L191)
- [server.rspingora-proxy](file://crates/pingora-proxy/src/server.rs#L38-L72)
- [manager.rsdocker_manager](file://crates/docker_manager/src/manager.rs#L147-L165)
- [service_config.rsshared_types](file://crates/shared_types/src/service_config.rs#L48-L91)
章节来源
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
- [config.rsagent_runner](file://crates/agent_runner/src/config.rs#L110-L191)
- [server.rspingora-proxy](file://crates/pingora-proxy/src/server.rs#L38-L72)
- [manager.rsdocker_manager](file://crates/docker_manager/src/manager.rs#L147-L165)
- [service_config.rsshared_types](file://crates/shared_types/src/service_config.rs#L48-L91)
## 性能考量
- 端口与代理
- 代理监听端口与默认后端端口应与业务端口一致,减少跨端口转发开销
- 健康检查间隔与阈值应平衡探测频率与系统负载
- 资源限制
- 根据业务峰值合理设置内存/CPU/交换限制,避免 OOM 与资源争抢
- 容器 TTL 与自动清理避免长期运行导致的资源泄漏
- 日志与追踪
- 生产环境建议 INFO 或更高级别,必要时通过 RUST_LOG 动态调整
- JSON 日志便于集中采集与分析,控制台仅用于实时观察
- 代理统计
- 定期检查 /proxy/stats关注请求量、失败率与平均响应时间
章节来源
- [config.yml](file://config.yml#L14-L30)
- [rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml#L14-L30)
- [types.rsdocker_manager](file://crates/docker_manager/src/types.rs#L51-L82)
- [main.rsrcoder](file://crates/rcoder/src/main.rs#L274-L320)
- [router.rsrcoder](file://crates/rcoder/src/router.rs#L1-L50)
## 故障排查指南
- 健康检查失败
- 检查 /health 端点可达性与响应体
- 查看 Compose 健康检查配置与重试策略
- 阻塞与死锁
- 使用 diagnose-blocking.sh 检查阻塞线程与 futex 等待
- 结合 analyze-rcoder.sh 查看线程、内存、CPU、上下文切换
- 性能瓶颈
- 使用 generate-flamegraph.sh 生成火焰图,定位热点函数与调用栈
- 关注 tokio 运行时、cleanup_task、docker_manager 相关调用
- 网络与 I/O
- 使用 analyze-rcoder.sh 的网络连接与 FD 统计
- 结合 ss、lsof、iostat 等工具进行系统层面分析
章节来源
- [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36)
- [docker-compose.yml](file://docker/docker-compose.yml#L24-L30)
- [diagnose-blocking.sh](file://docker/scripts/diagnose-blocking.sh#L1-L98)
- [analyze-rcoder.sh](file://docker/scripts/analyze-rcoder.sh#L1-L56)
- [generate-flamegraph.sh](file://docker/scripts/generate-flamegraph.sh#L1-L59)
## 结论
生产环境配置应遵循“最小权限、可观测、可恢复”的原则。通过合理的资源限制、健康检查、代理与日志策略,结合诊断脚本与火焰图分析,可以有效提升系统的稳定性与可维护性。建议在上线前完成配置基线评审与演练,并建立变更流程与回滚预案。
## 附录
### 生产配置与开发配置的关键差异
- 日志级别:生产建议 INFO 或更高;开发可使用 DEBUG
- 代理与端口:生产需明确代理监听端口与后端端口,确保与业务端口一致
- 资源限制:生产必须设置内存/CPU/交换限制,避免资源滥用
- 健康检查:生产需启用并合理配置健康检查间隔与阈值
- 安全策略:生产需启用容器安全能力降级与网络隔离
章节来源
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L283-L310)
- [config.yml](file://config.yml#L14-L30)
- [rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml#L14-L30)
- [manager.rsdocker_manager](file://crates/docker_manager/src/manager.rs#L147-L165)
### TLS 加密、访问控制与审计日志(建议)
- TLS 加密
- 建议在反向代理层Nginx/Traefik/Caddy启用 TLS证书由 ACME 自动签发与续期
- 对 rcoder 主服务与 AgentRunner 服务分别配置证书与域名
- 访问控制
- 在反向代理层添加认证(如 JWT/OAuth、速率限制与 IP 白名单
- 对 /proxy/* 端口访问进行细粒度授权
- 审计日志
- 启用统一日志采集Fluent Bit/Vector与集中存储ELK/Graylog/Loki
- 对敏感操作(如代理端口访问、容器生命周期事件)进行审计记录
[本节为概念性建议,不直接分析具体文件,故无章节来源]
### 配置热更新、敏感信息管理与版本控制
- 配置热更新
- 通过环境变量覆盖实现动态生效(如 RCODER_PORT、RCODER_PROJECTS_DIR、RCODER_NETWORK_MODE、RCODER_AUTO_CLEANUP、RCODER_CONTAINER_TTL
- 对于 Docker 配置,建议在重启容器或重新拉起服务时应用新配置
- 敏感信息管理
- 将密钥、令牌放入密钥管理服务(如 HashiCorp Vault、KMS通过环境变量注入
- 避免将敏感信息写入配置文件或镜像
- 配置版本控制
- 将 config.yml 与 rcoder_default.yml 纳入版本控制,使用分支策略与 PR 审批
- 对关键变更进行变更记录与回滚预案
章节来源
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L283-L310)
- [config.rsagent_runner](file://crates/agent_runner/src/config.rs#L134-L171)
### 生产部署检查清单
- 基础设施
- Docker 引擎版本与内核参数满足要求
- 系统时间同步NTP
- 磁盘空间与 inode 足够
- 配置验证
- config.yml 与 rcoder_default.yml 参数齐全且合理
- 环境变量覆盖生效RCODER_PORT、RCODER_PROJECTS_DIR、RCODER_NETWORK_MODE、RCODER_AUTO_CLEANUP、RCODER_CONTAINER_TTL
- 代理端口与后端端口一致,健康检查阈值合理
- 安全加固
- 容器能力降级(移除 NET_RAW/NET_ADMIN禁用特权模式
- 网络隔离策略生效
- 证书与访问控制已在反向代理层配置
- 监控与日志
- 日志按天滚动,保留策略合理
- /health 与 /proxy/stats 可用
- 诊断脚本可用并具备执行权限
- 高可用与备份
- Compose 健康检查与重启策略配置
- 容器 TTL 与自动清理开启
- 备份策略(工作目录、日志、配置)
章节来源
- [docker-compose.yml](file://docker/docker-compose.yml#L1-L37)
- [config.rsrcoder](file://crates/rcoder/src/config.rs#L253-L354)
- [config.rsagent_runner](file://crates/agent_runner/src/config.rs#L110-L191)
- [manager.rsdocker_manager](file://crates/docker_manager/src/manager.rs#L147-L165)
- [main.rsrcoder](file://crates/rcoder/src/main.rs#L274-L320)
- [main.rsagent_runner](file://crates/agent_runner/src/main.rs#L173-L231)

View File

@@ -0,0 +1,347 @@
# 部署指南
<cite>
**本文档中引用的文件**
- [Dockerfile](file://docker/Dockerfile)
- [docker-compose.yml](file://docker/docker-compose.yml)
- [rcoder-service.sh](file://rcoder-service.sh)
- [start-rcoder.sh](file://docker/start-rcoder.sh)
- [build.sh](file://docker/scripts/build.sh)
- [deploy.sh](file://docker/scripts/deploy.sh)
- [config.yml](file://config.yml)
- [main.rs](file://crates/rcoder/src/main.rs)
- [config.rs](file://crates/rcoder/src/config.rs)
</cite>
## 目录
1. [简介](#简介)
2. [Docker部署](#docker部署)
3. [Docker Compose配置](#docker-compose配置)
4. [生产环境配置](#生产环境配置)
5. [systemd服务实现](#systemd服务实现)
6. [常见问题及解决方案](#常见问题及解决方案)
7. [总结](#总结)
## 简介
本部署指南详细介绍了RCoder项目的部署流程包括Docker部署、Docker Compose配置、生产环境配置和systemd服务实现。文档提供了具体的配置选项、参数说明和返回值解释并阐述了各组件之间的关系。通过本指南初学者可以快速上手部署而经验丰富的开发人员可以获得足够的技术深度。
## Docker部署
RCoder项目提供了完整的Docker部署方案包括多阶段构建、调试工具集成和生产环境优化。
### Dockerfile分析
Dockerfile采用多阶段构建策略分为编译阶段和运行阶段。编译阶段使用`rust:1.90-bookworm`镜像进行编译,运行阶段则基于相同的镜像但包含完整的调试工具。
```mermaid
graph TD
A[Dockerfile] --> B[多阶段构建]
B --> C[编译阶段]
B --> D[运行阶段]
C --> E[安装编译依赖]
C --> F[编译release版本]
D --> G[安装运行时依赖]
D --> H[安装调试工具]
D --> I[复制二进制文件]
```
**Diagram sources**
- [Dockerfile](file://docker/Dockerfile#L12-L115)
**Section sources**
- [Dockerfile](file://docker/Dockerfile#L1-L305)
### 构建脚本
项目提供了`build.sh`脚本用于构建Docker镜像该脚本会检查必要的文件并执行构建命令。
```mermaid
flowchart TD
Start([开始构建]) --> CheckFiles["检查必要文件"]
CheckFiles --> BuildImage["执行docker build命令"]
BuildImage --> Success["构建成功"]
BuildImage --> Failure["构建失败"]
Success --> End([结束])
Failure --> End
```
**Diagram sources**
- [build.sh](file://docker/scripts/build.sh#L1-L21)
**Section sources**
- [build.sh](file://docker/scripts/build.sh#L1-L21)
## Docker Compose配置
Docker Compose配置文件定义了RCoder服务的运行环境包括端口映射、环境变量和卷挂载。
### docker-compose.yml分析
docker-compose.yml文件配置了RCoder服务的关键参数包括镜像名称、端口映射、环境变量和卷挂载。
```mermaid
graph TD
A[docker-compose.yml] --> B[服务定义]
B --> C[镜像配置]
B --> D[端口映射]
B --> E[环境变量]
B --> F[卷挂载]
B --> G[健康检查]
B --> H[重启策略]
C --> I[使用RCODER_IMAGE环境变量]
D --> J[映射RCODER_PORT端口]
E --> K[设置时区和日志级别]
F --> L[挂载Docker socket]
F --> M[挂载项目工作目录]
F --> N[挂载日志目录]
F --> O[挂载启动脚本]
```
**Diagram sources**
- [docker-compose.yml](file://docker/docker-compose.yml#L1-L37)
**Section sources**
- [docker-compose.yml](file://docker/docker-compose.yml#L1-L37)
### 部署脚本
`deploy.sh`脚本自动化了部署流程,包括检查必要文件、构建镜像和启动服务。
```mermaid
flowchart TD
Start([开始部署]) --> CheckFiles["检查必要文件"]
CheckFiles --> CheckImage["检查镜像是否存在"]
CheckImage --> Build["构建镜像"]
CheckImage --> Start["启动服务"]
Build --> Start
Start --> Success["部署成功"]
Start --> Failure["部署失败"]
Success --> End([结束])
Failure --> End
```
**Diagram sources**
- [deploy.sh](file://docker/scripts/deploy.sh#L1-L42)
**Section sources**
- [deploy.sh](file://docker/scripts/deploy.sh#L1-L42)
## 生产环境配置
生产环境配置涉及多个方面,包括配置文件、环境变量和安全设置。
### 配置文件
`config.yml`文件包含了RCoder服务的主要配置选项包括默认代理类型、项目工作目录、端口设置和Docker配置。
```mermaid
graph TD
A[config.yml] --> B[基本配置]
A --> C[代理配置]
A --> D[Docker配置]
B --> E[default_agent]
B --> F[projects_dir]
B --> G[port]
C --> H[listen_port]
C --> I[default_backend_port]
C --> J[backend_host]
C --> K[port_param]
D --> L[multi_image_config]
D --> M[network_mode]
D --> N[work_dir]
D --> O[auto_cleanup]
D --> P[container_ttl_seconds]
```
**Diagram sources**
- [config.yml](file://config.yml#L1-L161)
**Section sources**
- [config.yml](file://config.yml#L1-L161)
### 环境变量
RCoder服务支持通过环境变量覆盖配置文件中的设置提供了灵活的配置方式。
```mermaid
flowchart TD
A[环境变量] --> B[RUST_LOG]
A --> C[PORT]
A --> D[DOCKER_SOCKET_PATH]
A --> E[RCODER_WORKSPACE]
A --> F[RCODER_LOGS]
A --> G[RCODER_NETWORK_MODE]
A --> H[RCODER_WORK_DIR]
A --> I[RCODER_AUTO_CLEANUP]
A --> J[RCODER_CONTAINER_TTL]
B --> K[设置日志级别]
C --> L[设置服务端口]
D --> M[设置Docker socket路径]
E --> N[设置工作目录]
F --> O[设置日志目录]
G --> P[设置网络模式]
H --> Q[设置工作目录]
I --> R[设置自动清理]
J --> S[设置容器存活时间]
```
**Section sources**
- [main.rs](file://crates/rcoder/src/main.rs#L49-L53)
- [config.rs](file://crates/rcoder/src/config.rs#L214-L236)
### 启动脚本
`start-rcoder.sh`脚本负责启动RCoder服务设置了必要的环境变量并创建了所需的目录。
```mermaid
flowchart TD
Start([开始启动]) --> SetEnv["设置环境变量"]
SetEnv --> CreateDir["创建必要目录"]
CreateDir --> PrintConfig["打印环境配置"]
PrintConfig --> StartService["启动rcoder服务"]
StartService --> End([结束])
```
**Diagram sources**
- [start-rcoder.sh](file://docker/start-rcoder.sh#L1-L23)
**Section sources**
- [start-rcoder.sh](file://docker/start-rcoder.sh#L1-L23)
## systemd服务实现
systemd服务实现通过`rcoder-service.sh`脚本提供,支持启动、停止、重启和状态查询等操作。
### 服务管理脚本
`rcoder-service.sh`脚本提供了完整的服务管理功能包括依赖检查、PID管理、日志记录和信号处理。
```mermaid
graph TD
A[rcoder-service.sh] --> B[配置区域]
A --> C[工具函数]
A --> D[服务控制函数]
A --> E[主函数]
B --> F[端口设置]
B --> G[可执行文件路径]
B --> H[工作目录]
B --> I[日志文件]
B --> J[PID文件]
B --> K[PATH设置]
B --> L[日志级别]
C --> M[info函数]
C --> N[warn函数]
C --> O[error函数]
C --> P[status_msg函数]
C --> Q[check_dependencies函数]
C --> R[get_pid函数]
C --> S[is_running函数]
D --> T[start函数]
D --> U[stop函数]
D --> V[restart函数]
D --> W[status函数]
E --> X[main函数]
```
**Diagram sources**
- [rcoder-service.sh](file://rcoder-service.sh#L1-L328)
**Section sources**
- [rcoder-service.sh](file://rcoder-service.sh#L1-L328)
### 服务控制流程
服务控制流程包括启动、停止、重启和状态查询四个主要操作,每个操作都有详细的错误处理和日志记录。
```mermaid
flowchart TD
A[主函数] --> B[解析命令行参数]
B --> C{命令}
C --> D[start]
C --> E[stop]
C --> F[restart]
C --> G[status]
D --> H[检查依赖]
H --> I[启动服务]
I --> J[保存PID]
E --> K[检查是否运行]
K --> L[停止服务]
L --> M[清理PID文件]
F --> N[调用stop]
N --> O[调用start]
G --> P[检查运行状态]
P --> Q[显示状态信息]
```
**Section sources**
- [rcoder-service.sh](file://rcoder-service.sh#L289-L327)
## 常见问题及解决方案
本节列出了部署过程中可能遇到的常见问题及其解决方案。
### Docker socket权限问题
当容器无法访问Docker socket时会出现权限错误。
**问题表现**
- 服务启动失败
- 日志中出现"Permission denied"错误
- 无法创建或管理容器
**解决方案**
1. 确保Docker服务正在运行
2. 检查Docker socket文件是否存在
3. 确保用户在docker组中
4. 在docker-compose.yml中正确挂载Docker socket
```mermaid
flowchart TD
A[权限问题] --> B[检查Docker服务]
B --> C[检查socket文件]
C --> D[检查用户组]
D --> E[正确挂载socket]
E --> F[解决问题]
```
**Section sources**
- [main.rs](file://crates/rcoder/src/main.rs#L49-L53)
- [docker-compose.yml](file://docker/docker-compose.yml#L11-L15)
### 配置文件加载问题
当配置文件不存在或格式错误时,服务可能无法正常启动。
**问题表现**
- 服务启动失败
- 日志中出现"Failed to load config"错误
- 使用默认配置而非自定义配置
**解决方案**
1. 检查配置文件是否存在
2. 验证YAML格式是否正确
3. 确保配置文件路径正确
4. 检查文件权限
```mermaid
flowchart TD
A[配置问题] --> B[检查文件存在]
B --> C[验证YAML格式]
C --> D[检查路径正确]
D --> E[检查文件权限]
E --> F[解决问题]
```
**Section sources**
- [config.rs](file://crates/rcoder/src/config.rs#L255-L272)
### 网络隔离配置
`setup-network-isolation.sh`脚本用于配置Docker容器的网络隔离规则防止容器访问内网地址。
```mermaid
flowchart TD
Start([开始配置]) --> CheckRoot["检查root权限"]
CheckRoot --> CheckIptables["检查iptables安装"]
CheckIptables --> FindNetworks["查找rcoder-网络"]
FindNetworks --> Loop["遍历每个网络"]
Loop --> GetSubnet["获取子网"]
GetSubnet --> CheckRules["检查规则存在"]
CheckRules --> AddRules["添加DROP规则"]
AddRules --> Next["下一个网络"]
Next --> Loop
Loop --> PrintRules["打印当前规则"]
PrintRules --> End([结束])
```
**Diagram sources**
- [setup-network-isolation.sh](file://scripts/setup-network-isolation.sh#L1-L112)
**Section sources**
- [setup-network-isolation.sh](file://scripts/setup-network-isolation.sh#L1-L112)
## 总结
本部署指南详细介绍了RCoder项目的部署流程涵盖了Docker部署、Docker Compose配置、生产环境配置和systemd服务实现。通过本指南用户可以全面了解RCoder的部署架构和配置选项解决常见问题并根据实际需求进行定制化部署。文档提供了足够的技术深度既适合初学者快速上手也为经验丰富的开发人员提供了详细的参考。