| 组件 | 技术栈 | Docker 镜像 | 容器端口 | 宿主机端口 | 依赖 | 角色 |
|---|---|---|---|---|---|---|
| 🐬 MySQL | MySQL 8.0.39 | mysql:8.0.39 | 3306 | 3306 (EXPOSE_MYSQL_PORT) | — | 核心关系数据库:用户、知识库元数据、系统配置、对话记录 |
| ⚡ Redis / Valkey | Valkey 8 | valkey/valkey:8 | 6379 | 6379 (REDIS_PORT) | — | 缓存 & 消息队列:任务队列、会话缓存、文档处理状态 |
| 📦 MinIO | MinIO (S3 兼容) | pgsty/minio:RELEASE.2026... | 9000 (API) 9001 (Console) |
9000 (MINIO_PORT) 9001 (MINIO_CONSOLE_PORT) |
— | 对象存储:上传文档、解析结果、附件、数据集文件 |
| 组件 | 技术栈 | Docker 镜像 | 容器端口 | 宿主机端口 | 适用场景 |
|---|---|---|---|---|---|
| 🔍 Elasticsearch ⭐默认 | Elasticsearch 8.11.3 | elasticsearch:8.11.3 | 9200 | 1200 (ES_PORT) | 通用场景,功能最丰富,社区最大 |
| 🔍 OpenSearch | OpenSearch 2.19.1 | opensearchproject/opensearch:2.19.1 | 9201 | 1201 (OS_PORT) | ES 替代方案:开源友好,AWS 生态 |
| ♾️ Infinity | Infinity v0.7.0 | infiniflow/infinity:v0.7.0 | 23817 (Thrift) 23820 (HTTP) 5432 (PSQL) |
23817 / 23820 / 5432 | 高性能向量检索:无需外部依赖,部署简单 |
| 🌊 OceanBase | OceanBase CE 4.4.1 | oceanbase/oceanbase-ce:4.4.1... | 2881 | 2881 (OCEANBASE_PORT) | 企业级:分布式 + 向量检索一体,大规模场景 |
| 🗄️ SeekDB | SeekDB (OceanBase Lite) | oceanbase/seekdb:latest | 2881 | 2881 (SEEKDB_PORT) | 轻量场景:OceanBase Lite,资源受限环境 |
| 组件 | 技术栈 | Docker 镜像 | 容器端口 | 宿主机端口 | 启用方式 |
|---|---|---|---|---|---|
| 🧠 TEI (CPU) | HuggingFace Text-Embeddings-Inference | infiniflow/text-embeddings-inference:cpu-1.8 | 80 | 6380 (TEI_PORT) | COMPOSE_PROFILES 添加 tei-cpu |
| 🧠 TEI (GPU) | HuggingFace Text-Embeddings-Inference (CUDA) | infiniflow/text-embeddings-inference:1.8 | 80 | 6380 (TEI_PORT) | COMPOSE_PROFILES 添加 tei-gpu |
| 🛡️ Sandbox Executor | Sandbox Executor Manager | infiniflow/sandbox-executor-manager:latest | 9385 | 9385 | COMPOSE_PROFILES 添加 sandbox |
| 📊 Kibana | Kibana 8.11.3 | kibana:8.11.3 | 5601 | 6601 (KIBANA_PORT) | COMPOSE_PROFILES 添加 kibana |
| 组件 | 技术栈 | 进程 | 容器端口 | 宿主机端口 | 角色 |
|---|---|---|---|---|---|
| 🔄 Nginx | Nginx (openresty) | /usr/sbin/nginx | 80, 443 | 80 (SVR_WEB_HTTP_PORT) 443 (SVR_WEB_HTTPS_PORT) |
反向代理 + 静态资源服务 + SSL 终止 |
| 🐍 RAGFlow Server | Python Flask + Gunicorn | api/ragflow_server.py | 9380 | 9380 (SVR_HTTP_PORT) | 主 API 服务:知识库管理、文档、对话、Agent Canvas |
| 🐍 Admin Server | Python Flask | admin/server/admin_server.py | 9381 | 9381 (ADMIN_SVR_HTTP_PORT) | 管理 API:系统配置、用户管理、权限、系统状态 |
| 🔌 MCP Server | Python (MCP SDK) | mcp/server/server.py | 9382 | 9382 (SVR_MCP_PORT) | Model Context Protocol 服务:LLM 工具调用协议 |
| 🔧 Go Admin Server | Go (Gin/Echo) | bin/admin_server | 9383 | 9383 (GO_ADMIN_PORT) | Go 管理服务 (Hybrid 模式) |
| ⚡ Go API Server | Go | bin/server_main | 9384 | 9384 (GO_HTTP_PORT) | Go API 服务 (Hybrid 模式) |
| ⚙️ Task Executor | Python | rag/svr/task_executor.py | — | — | 后台任务执行器:文档解析、分块、嵌入生成 |
| 🔄 Data Sync | Python | rag/svr/sync_data_source.py | — | — | 数据源同步:定时从外部数据源拉取文档 |
| 宿主机端口 | 容器端口 | 服务 | 协议 | 类别 | 说明 |
|---|---|---|---|---|---|
| 80 | 80 | Nginx (HTTP) | HTTP | 核心 | Web 前端 + API 反向代理入口 |
| 443 | 443 | Nginx (HTTPS) | HTTPS | 核心 | SSL/TLS 加密入口 |
| 3306 | 3306 | MySQL | TCP (MySQL) | 核心 | 关系数据库连接端口 |
| 6379 | 6379 | Redis/Valkey | TCP (Redis) | 核心 | 缓存和消息队列 |
| 9000 | 9000 | MinIO API | HTTP | 核心 | S3 兼容对象存储 API |
| 9001 | 9001 | MinIO Console | HTTP | 核心 | MinIO Web 管理控制台 |
| 9380 | 9380 | RAGFlow API Server | HTTP | 核心 | 主 API 服务 |
| 9381 | 9381 | Admin API Server | HTTP | 核心 | 管理后台 API |
| 9382 | 9382 | MCP Server | HTTP | 可选 | Model Context Protocol 服务 |
| 9383 | 9383 | Go Admin Server | HTTP | 可选 | Go 管理服务 (Hybrid 模式) |
| 9384 | 9384 | Go API Server | HTTP | 可选 | Go API 服务 (Hybrid 模式) |
| 9385 | 9385 | Sandbox Executor | HTTP | 可选 | 安全代码沙箱管理 |
| 1200 | 9200 | Elasticsearch | HTTP | 引擎 | ES 文档/向量检索 (默认) |
| 1201 | 9201 | OpenSearch | HTTP | 引擎 | OpenSearch 文档/向量检索 |
| 23817 | 23817 | Infinity Thrift | Thrift | 引擎 | Infinity 向量数据库 Thrift 接口 |
| 23820 | 23820 | Infinity HTTP | HTTP | 引擎 | Infinity 向量数据库 HTTP 接口 |
| 5432 | 5432 | Infinity PSQL | TCP (PostgreSQL) | 引擎 | Infinity PostgreSQL 协议接口 |
| 2881 | 2881 | OceanBase / SeekDB | TCP (MySQL) | 引擎 | OceanBase/SeekDB SQL + 向量 |
| 6380 | 80 | TEI Embedding | HTTP | 可选 | 内置嵌入模型推理服务 |
| 6601 | 5601 | Kibana | HTTP | 可选 | ES 数据可视化和监控 |
Nginx 监听 :80/:443,根据不同 URL 路径将请求分发到内部服务。以下为 Python 模式和 Hybrid 模式的路由对比。
| URL 路径匹配 | 转发目标 | 服务 |
|---|---|---|
| ~ ^/api/v1/admin | localhost:9381 | Admin Python Server |
| ~ ^/(v1|api) | localhost:9380 | RAGFlow Python Server |
| / | 静态文件 | /ragflow/web/dist (React SPA) |
| ~ ^/static/(css|js|media)/ | 静态资源 (缓存 10 年) | /ragflow/web/dist/static/ |
| URL 路径匹配 | 转发目标 | 服务 |
|---|---|---|
| ~ ^/api/v1/admin/roles_with_permission | 127.0.0.1:9381 | Admin Python |
| ~ ^/api/v1/admin/sandbox | 127.0.0.1:9381 | Admin Python |
| ~ ^/api/v1/admin/roles | 127.0.0.1:9381 | Admin Python |
| ~ ^/api/v1/admin/whitelist | 127.0.0.1:9381 | Admin Python |
| ~ ^/api/v1/admin/variables | 127.0.0.1:9381 | Admin Python |
| ~ ^/api/v1/admin | 127.0.0.1:9383 | Go Admin Server |
| ~ ^/api/v1/skills | 127.0.0.1:9384 | Go API Server |
| ~ ^/v1/system/config | 127.0.0.1:9384 | Go API Server |
| ~ ^/v1/user/(login|logout) | 127.0.0.1:9384 | Go API Server |
| ~ ^/(v1|api) | 127.0.0.1:9380 | RAGFlow Python Server |
| / | 静态文件 | /ragflow/web/dist (React SPA) |
| ~ ^/static/(css|js|media)/ | 静态资源 (缓存 10 年) | /ragflow/web/dist/static/ |
:80 或 :443 端口。所有内部服务端口(9380、9381 等)虽然暴露到宿主机,但生产环境建议仅通过 Nginx 访问,或在防火墙层面限制直接访问。
通过 COMPOSE_PROFILES 环境变量控制启用哪些组件。基础组合:COMPOSE_PROFILES=${DOC_ENGINE},${DEVICE}
| 部署场景 | COMPOSE_PROFILES | 启用组件 | 端口开放 |
|---|---|---|---|
| 最小部署 (CPU) | elasticsearch,cpu | MySQL + Redis + MinIO + ES + RAGFlow(CPU) | 80, 3306, 6379, 9000, 1200, 9380, 9381 |
| Infinity 引擎 | infinity,cpu | MySQL + Redis + MinIO + Infinity + RAGFlow(CPU) | 80, 3306, 6379, 9000, 23817, 23820, 5432, 9380, 9381 |
| GPU 加速 | elasticsearch,gpu | MySQL + Redis + MinIO + ES + RAGFlow(GPU) | 80, 3306, 6379, 9000, 1200, 9380, 9381 |
| 内置嵌入模型 | elasticsearch,cpu,tei-cpu | 上述 + TEI 嵌入服务 | + 6380 |
| 完整部署 | elasticsearch,cpu,tei-cpu,sandbox,kibana | 所有组件 | 80, 443, 3306, 6379, 9000-9001, 1200, 6380, 6601, 9380-9385 |
✅ = 强依赖(服务不可用时主服务无法启动) | 🔗 = 运行时依赖 | ➖ = 可选
| 组件 ↓ / 被依赖 ← | RAGFlow Server |
Task Executor |
Admin Server |
Data Sync |
MCP Server |
Kibana |
|---|---|---|---|---|---|---|
| MySQL | ✅ 强依赖 | 🔗 读写 | ✅ 强依赖 | 🔗 读写 | ➖ | ➖ |
| Redis | 🔗 缓存/队列 | ✅ 任务队列 | ➖ | 🔗 状态 | ➖ | ➖ |
| MinIO | 🔗 文件存储 | 🔗 读写文档 | ➖ | ➖ | ➖ | ➖ |
| 文档引擎 (ES等) | 🔗 检索 | ✅ 写入向量 | ➖ | ➖ | ➖ | 🔗 数据源 |
| TEI | ➖ 可选 | ➖ 使用外部模型时不需要 | ➖ | ➖ | ➖ | ➖ |
| 外部 LLM | 🔗 对话生成 | ➖ | ➖ | ➖ | ➖ | ➖ |
| Sandbox | ➖ 可选 | ➖ 可选 (代码执行) | ➖ | ➖ | ➖ | ➖ |
depends_on: mysql (condition: service_healthy)| 层级 | 技术选型 | 版本 | 用途 |
|---|---|---|---|
| 前端 | React + TypeScript + Vite | — | SPA Web 应用 (shadcn/ui + Tailwind + Zustand) |
| 反向代理 | Nginx (OpenResty) | — | 静态资源 + API 路由分发 + SSL 终止 |
| 后端框架 | Python Flask + Gunicorn | — | 主 API 服务 (ragflow_server.py, admin_server.py) |
| Go (Gin/Echo) | — | 高性能 API 服务 (Hybrid 模式可选) | |
| 任务队列 | Redis (Valkey 8) | 8.x | 任务分发 + 状态缓存 + 消息队列 |
| 关系数据库 | MySQL | 8.0.39 | 用户、知识库、对话记录、系统配置 |
| 对象存储 | MinIO (S3 API) | 2026-03 | 文档、解析产物、附件存储 |
| 搜索引擎 | Elasticsearch / OpenSearch / Infinity / OceanBase / SeekDB | — | 全文搜索 + 向量相似度检索 |
| 嵌入模型 | HuggingFace TEI + Qwen3-Embedding / bge-m3 | 1.8 | 文档/查询向量化 |
| LLM | 外部 API (OpenAI / Qwen / DeepSeek / ...) | — | 对话生成、摘要、Agent 推理 |
| 容器编排 | Docker + Docker Compose | — | 多服务编排、健康检查、网络隔离 |
| 文档解析 | DeepDoc / Docling / MinerU | — | PDF/Word/PPT/Excel/图片 深度解析 |
| MCP 协议 | MCP (Model Context Protocol) | — | LLM 工具调用标准协议 |
| 沙箱 | Docker Sandbox (Python/Node.js) | — | Agent 代码安全执行环境 |
infini_rag_flow,生产环境务必修改。Elasticsearch 开启了 xpack.security,需要密码认证。
ragflow,通过 service_name 互相访问,无需 IP。
DOC_ENGINE 环境变量切换(elasticsearch / opensearch / infinity / oceanbase / seekdb),重新部署时需 docker compose down -v 清理旧数据。
MEM_LIMIT),TEI 嵌入模型如 Qwen3-Embedding-0.6B 需 25GB+ RAM/vRAM。
python(纯 Python,默认)、hybrid(Python + Go 混合)、go(纯 Go)。Hybrid 模式下部分高频 API 路由到 Go 服务以获得更好性能。