容器化部署

📎 引用文件

本文引用的文件 - Dockerfile - docker-compose.yml - .devcontainer/devcontainer.json - .dockerignore - agent/requirements.txt - pyproject.toml

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与体积优化
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本章节面向希望将 Vibe-Trading 以容器方式在开发或生产环境部署的工程师,系统说明多阶段 Docker 构建流程、镜像最佳实践、docker-compose 编排配置、环境变量注入、健康检查与日志策略,以及常见问题与优化技巧。文档严格基于仓库中的 Dockerfile、docker-compose.yml、.devcontainer 与相关配置文件进行分析与总结。

项目结构

Vibe-Trading 的容器化由以下关键文件协同完成: - Dockerfile:定义三阶段构建(前端构建、Python 依赖编译、运行时最小镜像)与安全与运行配置。 - docker-compose.yml:编排 API 服务与可选的前端开发服务,管理端口、环境变量、数据卷、资源限制与安全加固。 - .devcontainer/devcontainer.json:VS Code Dev Container 配置,提供本地一体化开发体验。 - .dockerignore:排除不必要的上下文文件,减小构建上下文并提升缓存命中率。 - agent/requirements.txt 与 pyproject.toml:声明 Python 依赖与可执行入口,配合 requirements-lock.txt 实现可重复安装。

graph TB A["开发者主机"] --> B["Docker Compose"] B --> C["vibe-trading 服务<br/>API + WebUI静态资源"] B --> D["frontend 服务(可选)<br/>Vite 开发服务器"] C --> E["持久化卷<br/>runs/sessions/uploads/home/.vibe-trading"] C --> F["只读根文件系统<br/>tmpfs 临时目录"] D --> G["Node 22 镜像<br/>热重载前端"]

图表来源 - docker-compose.yml:1-90 - Dockerfile:1-108

章节来源 - Dockerfile:1-108 - docker-compose.yml:1-90 - .devcontainer/devcontainer.json:1-40 - .dockerignore:1-54

核心组件

章节来源 - Dockerfile:1-108 - docker-compose.yml:1-90

架构总览

下图展示了 compose 编排下的服务拓扑、网络与数据流:

graph TB subgraph "Compose 网络" FE["frontend(可选)<br/>Node 22 开发服务器"] API["vibe-trading<br/>FastAPI + Uvicorn"] end subgraph "宿主/外部" OLLAMA["Ollama(可选)<br/>host.docker.internal:11434"] DB["外部数据库/存储<br/>如台湾股票快照"] end subgraph "容器内" VENV["预编译 venv<br/>/opt/venv"] STATIC["前端静态资源<br/>frontend/dist"] VOL["命名卷/绑定挂载<br/>runs/sessions/uploads/home"] end FE --> |HTTP| API API --> |HTTP| OLLAMA API --> |读写| VOL API --> |读取| DB API --> |提供| STATIC

图表来源 - docker-compose.yml:1-90 - Dockerfile:1-108

详细组件分析

多阶段 Docker 构建过程

flowchart TD Start(["开始构建"]) --> Frontend["阶段1: 前端构建<br/>node:22-slim"] Frontend --> Builder["阶段2: Python 构建<br/>python:3.11-slim + venv"] Builder --> Runtime["阶段3: 运行时镜像<br/>最小依赖 + 非root"] Runtime --> End(["镜像就绪"])

图表来源 - Dockerfile:1-108

章节来源 - Dockerfile:1-108

Docker 镜像最佳实践

章节来源 - Dockerfile:1-108

docker-compose 编排配置

sequenceDiagram participant User as "用户" participant Compose as "Docker Compose" participant API as "vibe-trading" participant FE as "frontend(可选)" participant Vol as "数据卷" participant Oll as "Ollama(可选)" User->>Compose : docker compose up Compose->>API : 构建并启动(端口8899) Compose->>FE : 启动开发服务器(端口5899, 可选) FE->>API : HTTP 请求(VITE_API_URL) API->>Vol : 读写 runs/sessions/uploads/home API->>Oll : 调用本地/宿主 Ollama(可选) API-->>User : 返回Web UI与API响应

图表来源 - docker-compose.yml:1-90

章节来源 - docker-compose.yml:1-90

开发环境容器配置

章节来源 - .devcontainer/devcontainer.json:1-40

环境变量注入、健康检查与日志策略

章节来源 - Dockerfile:1-108 - docker-compose.yml:1-90

依赖关系分析

graph LR Req["agent/requirements.txt"] --> Lock["requirements-lock.txt"] Lock --> Venv["预编译 venv"] PyProj["pyproject.toml"] --> CLI["CLI 入口"] Venv --> Runtime["运行时镜像"] Front["frontend/package.json"] --> Dist["frontend/dist"] Dist --> Runtime

图表来源 - agent/requirements.txt:1-69 - pyproject.toml:1-272 - Dockerfile:1-108

章节来源 - agent/requirements.txt:1-69 - pyproject.toml:1-272 - Dockerfile:1-108

性能与体积优化

[本节为通用指导,无需特定文件引用]

故障排查指南

章节来源 - docker-compose.yml:1-90 - Dockerfile:1-108

结论

Vibe-Trading 的容器化方案采用多阶段构建、最小运行时镜像、非 root 用户与只读根文件系统的安全实践,结合 docker-compose 的数据卷与资源限制,提供了从开发到生产的完整部署路径。通过环境变量注入与健康检查,服务具备良好的可观测性与自愈能力。建议在生产环境中根据实际负载调整资源限制,并结合集中式日志与监控体系进行运维保障。

[本节为总结性内容,无需特定文件引用]

附录

[本节为补充信息,无需特定文件引用]