Docker 构建系统
RAGFlow 使用主 Dockerfile 1-214
中定义的复杂多阶段 Docker 构建过程,该过程创建应用程序的完整和精简变体。
多阶段构建架构

Docker 构建过程
构建过程由 Dockerfile 2-214
中 定义的三个主要阶段组成:
-
基础阶段
( Dockerfile 2-139 )
:使用系统依赖项(包括 Python 3.10、Node.js 20、Rust 工具链和数据库驱动程序)设置 Ubuntu 22.04 基础。 -
构建器阶段
( Dockerfile 142-179 )
:使用 uv 包管理器处理依赖项安装,并使用 npm 构建 React 前端。 -
生产阶段
( Dockerfile 181-214 )
:通过复制构建的项目和应用程序代码来创建最终的运行时映像。
构建变体
系统支持由 LIGHTEN` build 参数控制的两个构建变体:
- 完整映像 :包括所有 ML 模型和嵌入
( Dockerfile 21-26 )
- Slim Image:排除大型嵌入模型以减小图像大小
( Dockerfile 158-162 )
依赖关系管理
RAGFlow 通过专用的下载脚本和预构建的依赖关系映像来管理外部依赖项。
外部依赖项下载

依赖项类别
download_deps.py 1-78
脚本管理几类依赖项:
- ML 模型 :通过
( download_deps.py 50-53 )
下载huggingface_hub.snapshot_download()
- 系统库 :SSL 证书、用于数据库连接的 ODBC 驱动程序
- 文档处理 :Apache Tika 服务器和 Chrome 浏览器,用于 PDF/Web 内容处理
- NLP 数据 :用于文本处理的 NLTK 语料库
( download_deps.py 70-73 )
该脚本支持针对基于中国的部署( download_deps.py 20-40 )
进行镜像选择。
持续集成
RAGFlow 通过测试多种配置和存储后端的 GitHub Actions 工作流实现全面的 CI。
测试工作流架构

测试执行流程
.github/workflows/tests.yml 1-176
中 的主要测试工作流执行以下顺序:
- 静态分析 :使用 Ruff 进行 Python 代码质量检查
( .github/workflows/tests.yml 52-56 )
- Docker 构建 :创建精简和完整变体
( .github/workflows/tests.yml 58-66 )
- 多后端测试 :针对 Elasticsearch 和 Infinity 存储引擎进行测试
- 测试类别 :
- 通过 pytest 进行 SDK API 测试
( .github/workflows/tests.yml 96 )
- 前端 API 测试
( .github/workflows/tests.yml 106 )
- HTTP API 测试
( .github/workflows/tests.yml 121 )
- 通过 pytest 进行 SDK API 测试
测试配置
根据触发器类型配置了不同的测试级别:
- Pull Request/Push:P2 级测试
( .github/workflows/tests.yml 94 )
- 定时运行 :P3 级综合测试
( .github/workflows/tests.yml 92 )
发布自动化
RAGFlow 通过专用的 GitHub Actions 工作流自动发布,该工作流处理版本控制、Docker 映像发布和 PyPI 包分发。
发布管道架构

发布类型
系统支持 .github/workflows/release.yml 1-119
中 定义的两种类型的版本:
- 版本发布 :通过创建 v*.. 标签触发,发布稳定版本
- Nightly Releases:使用可变的 nightly 标签计划每日构建
Docker 镜像发布
该工作流发布两个 Docker 变体:
- 全图 : infiniflow/ragflow:$RELEASE_TAG
( .github/workflows/release.yml 86-94 )
- 超薄图像 : infiniflow/ragflow:$RELEASE_TAG-slim
( .github/workflows/release.yml 96-104 )
PyPI 包分发
对于版本发布,工作流使用 uv build
和 pypa/gh-action-pypi-publish
( .github/workflows/release.yml 106-118 )
构建 Python SDK 并将其发布到 PyPI。
版本管理
RAGFlow 实现了一个灵活的版本跟踪系统,该系统适用于开发和生产环境。
版本解析逻辑

版本解析流程
api/versions.py 23-39
中的 get_ragflow_version()
函数实现了分层版本解析:
- 缓存检查 :如果已解析,则返回缓存版本
- VERSION 文件 :从 Docker 构建生成的 VERSION 文件
( api/versions.py 27-34 )
中读取 - Git 回退 : git describe --tags --match=v* --first-parent --always 用于开发
( api/versions.py 42-52 )
- 构建变体 :根据 LIGHTEN 环境变量
( api/versions.py 37-38 )
附加"slim"或"full"后缀
运行时集成
版本信息通过调用 get_ragflow_version()
( api/db/runtime_config.py 37-38 )
的 RuntimeConfig.init_env()
集成到运行时配置中。
Docker 构建版本生成
在 Docker 构建期间,使用 Git 命令捕获版本并写入 VERSION 文件 ( Dockerfile 171-178 )
:
sh
version_info=$(git describe --tags --match=v* --first-parent --always)
echo $version_info > /ragflow/VERSION
构建优化
缓存策略
Docker 构建实现了全面的缓存以提高构建性能:
- APT 缓存 :持久包缓存
( Dockerfile 45 )
- UV 缓存 :Python 包缓存
( Dockerfile 152 )
- NPM 缓存 :Node.js 包缓存
( Dockerfile 166 )
多架构支持
构建系统处理不同的 CPU 架构:
- x86_64:标准 Intel/AMD 处理器
- ARM64/AArch64:Apple Silicon 和 ARM 服务器
( Dockerfile 109-117 )
特定于体系结构的包是动态选择的,特别是对于 ODBC 驱动程序和 SSL 库。