RagFlow源码级部署实战:从零搭建本地开发与测试环境

张开发
2026/4/12 7:06:32 15 分钟阅读

分享文章

RagFlow源码级部署实战:从零搭建本地开发与测试环境
1. 环境准备从零开始的RagFlow部署基础第一次接触RagFlow源码部署时我完全按照官方文档操作结果踩了不少坑。后来才发现很多问题都出在环境准备阶段。这次我就把最完整的准备工作分享给大家避免你们走弯路。首先需要明确的是RagFlow对系统环境有特定要求。我推荐使用Ubuntu 20.04或22.04 LTS版本这是经过充分测试的系统环境。如果你用CentOS可能会遇到一些依赖包版本问题。我的MacBook Pro M1芯片也试过需要额外处理一些ARM架构的兼容性问题。硬件配置方面建议至少4核CPU16GB内存50GB可用存储空间这些配置是为了保证Elasticsearch和MySQL能顺畅运行。我试过在8GB内存的机器上部署结果ES频繁OOM根本没法用。开发工具链需要提前装好Git源码版本控制Python 3.10特别注意必须是3.10版本pipxPython应用隔离工具pre-commitGit钩子管理安装这些工具时有个小技巧先更新系统包管理器。在Ubuntu上我会执行sudo apt update sudo apt upgrade -y sudo apt install -y git python3.10 python3.10-venv pipxPython环境管理我强烈推荐使用uv它比传统的virtualenv快很多而且能自动处理依赖冲突。安装命令很简单pipx install uv pipx install pre-commit2. 源码获取与Python环境配置拿到源码只是第一步关键是要建立正确的Python环境。我建议新建一个干净的目录来存放项目避免与其他Python项目产生冲突。克隆源码时要注意网络环境。有时候GitHub连接不稳定可以试试这个命令git clone --depth1 https://github.com/infiniflow/ragflow.git--depth1参数可以加快克隆速度因为它只获取最新代码而不是完整历史记录。进入项目目录后第一件事就是设置Python环境cd ragflow uv sync --python 3.10 --all-extras这个命令会创建隔离的Python 3.10环境安装所有必需的Python包处理依赖关系我遇到过这个步骤卡住的情况通常是网络问题。可以设置国内镜像源加速export PIP_INDEX_URLhttps://pypi.tuna.tsinghua.edu.cn/simple接下来要安装预提交钩子这对团队协作特别重要pre-commit install这个操作会在每次git commit时自动运行代码格式检查确保代码风格统一。第一次运行可能会比较慢因为它要下载检查工具。3. 基础服务部署告别Docker的本地化方案官方文档建议用Docker启动基础服务但我们要做源码级部署就得手动安装这些服务。这部分的挑战最大但也是最能学到东西的环节。3.1 MySQL安装与配置我推荐使用MySQL 8.0这是RagFlow官方测试过的版本。安装命令sudo apt install -y mysql-server安装完成后需要安全初始化sudo mysql_secure_installation这里会提示设置root密码我建议设置一个强密码并记住它。接下来创建RagFlow专用的数据库和用户CREATE DATABASE ragflow CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER ragflowlocalhost IDENTIFIED BY 你的密码; GRANT ALL PRIVILEGES ON ragflow.* TO ragflowlocalhost; FLUSH PRIVILEGES;3.2 Elasticsearch部署ES的安装稍微复杂些。首先安装Java环境sudo apt install -y openjdk-17-jdk然后下载并安装Elasticsearchwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.11.1-amd64.deb sudo dpkg -i elasticsearch-8.11.1-amd64.deb配置ES的内存设置很重要编辑/etc/elasticsearch/jvm.options-Xms2g -Xmx2g这个值根据你的机器内存调整一般不超过物理内存的50%。启动ES服务sudo systemctl enable elasticsearch sudo systemctl start elasticsearch3.3 MinIO对象存储MinIO是RagFlow用来存储文档和模型的地方。手动安装步骤如下wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio sudo mv minio /usr/local/bin/创建数据目录和启动脚本sudo mkdir /data/minio sudo useradd -r minio-user -s /sbin/nologin sudo chown minio-user:minio-user /data/minio创建systemd服务文件/etc/systemd/system/minio.service[Unit] DescriptionMinIO Afternetwork.target [Service] Userminio-user Groupminio-user ExecStart/usr/local/bin/minio server /data/minio --console-address :9001 Restartalways [Install] WantedBymulti-user.target启动服务sudo systemctl enable minio sudo systemctl start minio4. 前端环境搭建与启动RagFlow的前端基于现代JavaScript技术栈需要Node.js环境。我推荐使用Node 18 LTS版本这是经过充分测试的稳定版本。4.1 Node.js环境配置在Ubuntu上安装Node.js的最佳实践是通过NodeSource仓库curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs安装完成后验证版本node -v npm -v如果遇到权限问题可以配置npm全局安装目录到用户空间mkdir ~/.npm-global npm config set prefix ~/.npm-global echo export PATH~/.npm-global/bin:$PATH ~/.bashrc source ~/.bashrc4.2 前端依赖安装进入前端目录并安装依赖cd web npm install这个步骤可能会遇到网络问题可以配置淘宝镜像加速npm config set registry https://registry.npmmirror.com安装过程中如果出现Python错误可能是因为某些原生模块需要Python环境npm install --python/usr/bin/python34.3 开发模式启动启动前端开发服务器npm run dev这个命令会启动Vite开发服务器通常监听在5173端口。你可以在浏览器中访问http://localhost:5173查看前端界面。热重载功能会自动刷新页面当你修改源代码时。如果遇到样式问题可能需要单独重启CSS处理器npm run dev:css5. 后端服务启动与调试后端是RagFlow的核心启动前需要确保所有基础服务都已正常运行。我建议按照以下顺序操作。5.1 环境变量配置创建.env文件来存储配置cp .env.example .env编辑.env文件主要修改这些配置DATABASE_URLMySQL连接字符串ELASTICSEARCH_HOSTSES地址MINIO_ENDPOINTMinIO地址REDIS_HOSTRedis地址特别注意所有服务地址都应该是localhost或127.0.0.1除非你确实需要远程连接。5.2 虚拟环境激活使用uv创建并激活虚拟环境uv venv source .venv/bin/activate设置Python路径很重要否则导入模块会失败export PYTHONPATH$(pwd)5.3 启动后端服务RagFlow后端由多个服务组成主要的是ragflow_server.py主API服务task_executor.py任务执行器启动脚本已经封装好了bash docker/launch_backend_service.sh这个脚本会启动所有必需的服务。如果你想单独调试某个服务可以手动运行python3 -m ragflow.server.ragflow_server python3 -m ragflow.task_executor.task_executor调试时建议开启DEBUG日志export LOG_LEVELDEBUG6. 系统联调与验证所有服务都启动后需要进行集成测试验证系统是否正常工作。我通常从以下几个层面进行验证。6.1 基础服务连通性检查首先检查MySQL连接mysql -u ragflow -p -e SHOW DATABASES;验证Elasticsearchcurl -X GET localhost:9200/_cat/health?v测试MinIO访问mc alias set local http://localhost:9000 minioadmin minioadmin mc ls local6.2 API接口测试RagFlow提供了Swagger UI访问http://localhost:9380/docs可以查看和测试所有API接口。我常用的几个测试端点GET /v1/health服务健康检查POST /v1/knowledgebases创建知识库POST /v1/documents上传文档测试时可以先用curl命令curl -X GET http://localhost:9380/v1/health6.3 前端集成验证在前端界面尝试完整的工作流创建知识库上传文档等待文档处理完成进行问答测试如果文档处理卡住可以检查task_executor的日志tail -f logs/task_executor.log7. 常见问题排查在实际部署中我遇到过各种奇怪的问题。这里分享几个典型案例和解决方法。7.1 Python依赖冲突症状导入模块时出现奇怪的错误 解决方法uv pip freeze requirements.txt uv pip uninstall -r requirements.txt -y uv sync --python 3.10 --all-extras7.2 Elasticsearch内存不足症状ES频繁崩溃 解决方法调整ES堆内存大小增加系统swap空间减少ES分片数量7.3 MinIO权限问题症状文件上传失败 解决方法mc admin policy set local readwrite userragflow7.4 前端热更新失效症状代码修改后页面不更新 解决方法rm -rf node_modules/.vite npm run dev8. 性能优化建议经过多次部署实践我总结出几个提升RagFlow性能的关键点。8.1 数据库优化调整MySQL配置(/etc/mysql/my.cnf)[mysqld] innodb_buffer_pool_size 2G innodb_log_file_size 256M query_cache_size 64M8.2 Elasticsearch调优禁用不必要的ES功能PUT /_cluster/settings { persistent: { xpack.monitoring.collection.enabled: false } }8.3 启用jemalloc安装jemalloc可以提升内存分配效率sudo apt install libjemalloc-dev然后在启动脚本前设置export LD_PRELOAD/usr/lib/x86_64-linux-gnu/libjemalloc.so.28.4 前端构建优化生产环境构建时启用压缩npm run build -- --mode production配置nginx启用gzip压缩gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss text/javascript;

更多文章