# 生产环境配置 **本文引用的文件列表** - [config.yml](file://config.yml) - [rcoder_default.yml](file://crates/rcoder/src/rcoder_default.yml) - [config.rs(rcoder)](file://crates/rcoder/src/config.rs) - [config.rs(agent_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.rs(pingora-proxy)](file://crates/pingora-proxy/src/server.rs) - [types.rs(docker_manager)](file://crates/docker_manager/src/types.rs) - [manager.rs(docker_manager)](file://crates/docker_manager/src/manager.rs) - [service_config.rs(shared_types)](file://crates/shared_types/src/service_config.rs) - [router.rs(rcoder)](file://crates/rcoder/src/router.rs) - [main.rs(rcoder)](file://crates/rcoder/src/main.rs) - [main.rs(agent_runner)](file://crates/agent_runner/src/main.rs) - [install.md](file://install.md) ## 目录 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["项目工作目录
/app/project_workspace"] LOGS["日志目录
/app/logs"] SOCK["Docker Socket
/var/run/docker.sock"] end subgraph "容器: rcoder" SRV["rcoder 主服务"] CFG["配置加载
config.rs"] HEALTH["健康检查端点
/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.rs(rcoder)](file://crates/rcoder/src/config.rs#L253-L354) - [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [server.rs(pingora-proxy)](file://crates/pingora-proxy/src/server.rs#L38-L72) 章节来源 - [docker-compose.yml](file://docker/docker-compose.yml#L1-L37) - [config.rs(rcoder)](file://crates/rcoder/src/config.rs#L253-L354) ## 核心组件 - 配置加载与优先级 - 命令行参数覆盖配置文件;环境变量覆盖所有配置;未设置时回退到默认值 - Docker 配置支持环境变量覆盖(如网络模式、工作目录、自动清理、容器 TTL) - 健康检查 - 主服务提供 /health 健康端点;Compose 健康检查基于该端点 - 代理与负载均衡 - 基于 Pingora 的反向代理,支持轮询/一致性哈希、健康检查、连接池与 HTTP/2 - 资源限制与容器安全 - 多镜像配置支持为 rcoder 与 agent-runner 设置独立资源限制(内存/CPU/交换) - 容器安全通过能力降级与网络隔离策略降低风险 - 日志与遥测 - 按天滚动 JSON 日志;支持 trace_id 传播;控制台与文件双通道输出 章节来源 - [config.rs(rcoder)](file://crates/rcoder/src/config.rs#L253-L354) - [config.rs(agent_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.rs(pingora-proxy)](file://crates/pingora-proxy/src/server.rs#L38-L72) - [types.rs(docker_manager)](file://crates/docker_manager/src/types.rs#L51-L82) - [manager.rs(docker_manager)](file://crates/docker_manager/src/manager.rs#L147-L165) - [main.rs(rcoder)](file://crates/rcoder/src/main.rs#L274-L320) - [main.rs(agent_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.rs(pingora-proxy)](file://crates/pingora-proxy/src/server.rs#L38-L72) - [health_handler.rs](file://crates/rcoder/src/handler/health_handler.rs#L1-L36) - [config.rs(rcoder)](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.rs(rcoder)](file://crates/rcoder/src/config.rs#L253-L354) - [config.rs(agent_runner)](file://crates/agent_runner/src/config.rs#L110-L191) 章节来源 - [config.rs(rcoder)](file://crates/rcoder/src/config.rs#L253-L354) - [config.rs(agent_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.rs(pingora-proxy)](file://crates/pingora-proxy/src/server.rs#L38-L72) - [router.rs(rcoder)](file://crates/rcoder/src/router.rs#L1-L50) 章节来源 - [server.rs(pingora-proxy)](file://crates/pingora-proxy/src/server.rs#L38-L72) - [router.rs(rcoder)](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.rs(shared_types)](file://crates/shared_types/src/service_config.rs#L48-L91) - [types.rs(docker_manager)](file://crates/docker_manager/src/types.rs#L51-L82) - [manager.rs(docker_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.rs(shared_types)](file://crates/shared_types/src/service_config.rs#L48-L91) - [types.rs(docker_manager)](file://crates/docker_manager/src/types.rs#L51-L82) - [manager.rs(docker_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.rs(rcoder)](file://crates/rcoder/src/main.rs#L274-L320) - [main.rs(agent_runner)](file://crates/agent_runner/src/main.rs#L173-L231) - [config.rs(rcoder)](file://crates/rcoder/src/config.rs#L283-L310) 章节来源 - [main.rs(rcoder)](file://crates/rcoder/src/main.rs#L274-L320) - [main.rs(agent_runner)](file://crates/agent_runner/src/main.rs#L173-L231) - [config.rs(rcoder)](file://crates/rcoder/src/config.rs#L283-L310) ### 诊断脚本与性能分析 - analyze-rcoder.sh:进程基本信息、线程状态、网络连接、文件描述符、内存、CPU、上下文切换 - diagnose-blocking.sh:阻塞线程分析、futex 等待、系统资源、最近错误日志、推荐下一步诊断 - generate-flamegraph.sh:perf 采样、火焰图生成、原始 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["配置系统
config.rs"] --> RC["rcoder 主服务"] CFG --> AR["AgentRunner 服务"] RC --> PXY["Pingora 代理"] RC --> DCK["Docker 引擎"] AR --> DCK DCK --> DM["docker_manager"] DM --> ST["shared_types"] ``` 图表来源 - [config.rs(rcoder)](file://crates/rcoder/src/config.rs#L253-L354) - [config.rs(agent_runner)](file://crates/agent_runner/src/config.rs#L110-L191) - [server.rs(pingora-proxy)](file://crates/pingora-proxy/src/server.rs#L38-L72) - [manager.rs(docker_manager)](file://crates/docker_manager/src/manager.rs#L147-L165) - [service_config.rs(shared_types)](file://crates/shared_types/src/service_config.rs#L48-L91) 章节来源 - [config.rs(rcoder)](file://crates/rcoder/src/config.rs#L253-L354) - [config.rs(agent_runner)](file://crates/agent_runner/src/config.rs#L110-L191) - [server.rs(pingora-proxy)](file://crates/pingora-proxy/src/server.rs#L38-L72) - [manager.rs(docker_manager)](file://crates/docker_manager/src/manager.rs#L147-L165) - [service_config.rs(shared_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.rs(docker_manager)](file://crates/docker_manager/src/types.rs#L51-L82) - [main.rs(rcoder)](file://crates/rcoder/src/main.rs#L274-L320) - [router.rs(rcoder)](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.rs(rcoder)](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.rs(docker_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.rs(rcoder)](file://crates/rcoder/src/config.rs#L283-L310) - [config.rs(agent_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.rs(rcoder)](file://crates/rcoder/src/config.rs#L253-L354) - [config.rs(agent_runner)](file://crates/agent_runner/src/config.rs#L110-L191) - [manager.rs(docker_manager)](file://crates/docker_manager/src/manager.rs#L147-L165) - [main.rs(rcoder)](file://crates/rcoder/src/main.rs#L274-L320) - [main.rs(agent_runner)](file://crates/agent_runner/src/main.rs#L173-L231)