WSL从源码部署RAGFlow

RAG 框架中,RAGFlow、ChatFlow 在 RAG 方面更有优势,RAGFlow 的 Agent 模块(workflow)也比较强大,并且支持原生 GraphRAG(General 模式),可选自带一些本地模型,但相比 coze、dify 等开发框架和平台,RAGFlow 上手门槛略高。本文将说明在 WSL 中从源码部署 RAGFlow 的步骤和过程,降低新手配置、应用 RAGFlow 的学习门槛,因此诸如 docker 启动等操作在非 WSL 中是不必要的。很多小伙伴宁可使用 VMWare 也使用 WSL 的原因在于 WSL 默认会安装到系统盘,关于如何将 WSL 安装到非系统盘,以及 systemd 支持,将通过另一篇文章说明。

环境准备

--Windows 11 下的 Linux 子系统(debian 12+)

--安装 pipx、uv、nodejs/npm

apt update -y
apt upgrade -y
apt install pipx pkg-config python3-icu libjemalloc-dev -y
pipx install uv
export UV_INDEX=https://mirrors.aliyun.com/pypi/simple
. ~/.bashrc

#前后端分离部署可忽略
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
npm install npm -g
#reboot

安装完成后,重新加载配置以使 uv 路径配置全局生效。

-- Debian 11 升级至 12:WSL Debian 版本为 11,应升级至 12+,避免因默认 python 版本、jemalloc 等必要组件缺失或依赖版本问题导致部署失败。

-- 修改内核 vm.max_map_count 参数值由默认的 65530 为 262144。

sysctl -w vm.max_map_count=262144

#或者直接编辑文件以避免重启后被重置
#echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

部署

部署前应确保配置好代理环境或修改为国内源(docker、pip、npm、huggingface等)。

1.源码下载和 python 依赖安装

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.10 --all-extras

2.通过 Docker Compose 启动依赖的服务(可使用与官方兼容的自定义镜像)

在拉取镜像之前,可自行决定是否使用本地嵌入模型。打开 RAGFlow 项目目录下的 docker/.env 文件,默认 slim 镜像不包含嵌入模型,注释该行,取消注释完整版本镜像的注释,就会拉取、加载包括 embedding 模型的镜像,大约增加 2G 的空间要求,支持 CPU。

embedding

#WSL应确保 docker 已启动,应添加配置 /etc/wsl.conf 
#systemctl enable docker
#service docker start
docker compose -f docker/docker-compose-base.yml up -d

docker-compose

3.添加 /etc/hosts 添加解析

修改 hosts 文件,旨在将 conf/service_conf.yaml 文件中的所有 host 地址都解析为 localhost/127.0.0.1,也可以直接修改 service_conf.yaml 文件。

echo "127.0.0.1       es01 infinity mysql minio redis" >> /etc/hosts

conf

4.启动后端服务

-- 配置 nltk 依赖

可以使用 pip3 安装 nltk_data,如果是在启动过程中因 nltk 数据加载出现问题,也可参考下文手动配置 punkt_tab、averaged_perceptron_tagger 和 wordnet。

python3 -m nltk.downloader punkt_tab
python3 -m nltk.downloader averaged_perceptron_tagger
python3 -m nltk.downloader wordnet

Debian 下需要在 RAGFlow 项目目录下虚拟环境的 .venv 中创建 nltk_data 目录及corpora、taggers、tockenizers 子目录,分别放置 RAGFlow 所必须的 nltk 工具依赖数据,包括 punkt_tab、averaged_perceptron_tagger 和 wordnet 数据。数据文件可通过 https://www.nltk.org/nltk_data/ 下载,或者直接点击「这里」下载作者压缩打包的 nltk_data 数据文件,解压至任意搜索目录即可。(备注:默认应解压至 .venv 虚拟环境目录下)

nltk

 -- 启动后端服务 

source .venv/bin/activate
export PYTHONPATH=$(pwd)
bash docker/launch_backend_service.sh

run-backend

经过一段时间的初始化,RAGFlow 即可成功启动。打开浏览器,访问后端 URL ,显示 {"code":100,"data":null,"message":"<NotFound '404: Not Found'>"} 说明后端启动成功。

localhost-backend-url

5.安装前端依赖

RAGFlow 前端采用 react+tailwind,分离部署,不需要的话可以忽略。

cd web
npm install

6.启动前端

npm run dev

frontend

Windows 下,打开浏览器访问 localhost:9222 即可登录 ragflow 进行配置和知识库、agent等的建立。

webpage

 

至此就完成了从源码部署 RAGFlow,相比 docker 部署,自由度大为提高,相比 windows 下部署,通过 WSL 是最快、最简单搭建 RAGFlow 开发环境的方法。更多精彩,敬请关注「老E的博客」!

发表回复