一、macOS配置
1. macOS配置
我使用MacBook Pro,chip 是 Apple M3 Pro,Memory是18GB,macOS是 Sonoma 14.6.1。
2.安装Docker和Docker compose
官方要求 Docker ≥ 24.0.0 & Docker Compose ≥ v2.26.1,我的版本如下:
docker -v
Docker version 27.0.3, build 7d4bcd8
docker-compose --version
Docker Compose version v2.28.1-desktop.1
二、安装和配置RAGFlow的前后端
1. 下载项目
进入想要安装ragflow的目录下,克隆项目,目前最新的版本是0.14.1。
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
2.安装 Python 依赖项
2.1安装 Poetry:
curl -sSL https://install.python-poetry.org | python3 -
poetry --version
Poetry (version 1.8.4)
出现 zsh: command not found: poetry
, 错误是因为 Poetry 的安装目录未添加到环境变量 PATH
中。编辑~/.zshrc文件,将下面这行代码添加到文末(需要修改用户名)。添加完后运行source ~/.zshrc命令使更改生效。
export PATH="/Users/kuangfh/.local/bin:$PATH"
2.2 配置Poetry:
export POETRY_VIRTUALENVS_CREATE=true POETRY_VIRTUALENVS_IN_PROJECT=true
2.3 安装 Python 依赖项:
将创建一个名为 .venv
的虚拟环境,并将所有 Python 依赖项安装到新环境中。
~/.local/bin/poetry install --sync --no-root
三百多个依赖,大部份正常安装了,有一个错误:
at ~/Library/Application Support/pypoetry/venv/lib/python3.11/site-packages/poetry/installation/chef.py:164 in _prepare
160│
161│ error = ChefBuildError("\n\n".join(message_parts))
162│
163│ if error is not None:
→ 164│ raise error from None
165│
166│ return path
167│
168│ def _prepare_sdist(self, archive: Path, destination: Path | None = None) -> Path:
Note: This error originates from the build backend, and is likely not a problem with poetry but with xgboost (1.5.0) not supporting PEP 517 builds. You can verify this by running 'pip wheel --no-cache-dir --use-pep517 "xgboost (==1.5.0)"'.
这个问题的核心是 xgboost
包的版本 1.5.0 不支持 PEP 517 构建标准,而 Poetry 默认使用 PEP 517 来处理依赖包的安装。
使用VS Code编辑 pyproject.toml
文件,在 [tool.poetry.dependencies]
部分,调整 xgboost
的版本范围,xgboost = "^1.6.0", 然后保存修改。
使用以下命令重新生成 poetry.lock
文件:
~/.local/bin/poetry lock
这将根据 pyproject.toml
文件的依赖定义,更新或重新生成 poetry.lock
文件。
完成后再次~/.local/bin/poetry install --sync --no-root尝试安装依赖,安装顺利完成。
2.4 启动第三方服务:
以下命令使用 Docker Compose 启动"基本"服务(MinIO、Elasticsearch、Redis 和 MySQL):
docker compose -f docker/docker-compose-base.yml up -d
2.5 更新第三方服务的主机
和端口
设置
在 /etc/hosts
中添加以下行,将 docker/service_conf.yaml.template 中指定的所有主机解析为 127.0.0.1
:
127.0.0.1 es01 infinity mysql minio redis
在 docker/service_conf.yaml.template 中,将 mysql 端口更新为 5455
,将 es 端口更新为 1200
,如 docker/.env 中指定。
ragflow:
host: ${RAGFLOW_HOST:-0.0.0.0}
http_port: 9380
mysql:
name: '${MYSQL_DBNAME:-rag_flow}'
user: '${MYSQL_USER:-root}'
password: '${MYSQL_PASSWORD:-infini_rag_flow}'
host: '${MYSQL_HOST:-mysql}'
port: 5455
max_connections: 100
stale_timeout: 30
minio:
user: '${MINIO_USER:-rag_flow}'
password: '${MINIO_PASSWORD:-infini_rag_flow}'
host: '${MINIO_HOST:-minio}:9000'
es:
hosts: 'http://${ES_HOST:-es01}:1200'
username: '${ES_USER:-elastic}'
password: '${ELASTIC_PASSWORD:-infini_rag_flow}'
三、启动 RAGFlow 后端服务
1. 注释掉 docker/entrypoint.sh 中的 nginx
行。
# /usr/sbin/nginx
2. 激活 Python 虚拟环境:
source .venv/bin/activate
export PYTHONPATH=$(pwd)
3. 如无法访问 HuggingFace,请将 HF_ENDPOINT 环境变量设置为使用镜像站点:
export HF_ENDPOINT=https://hf-mirror.com
4. 运行 entrypoint.sh 脚本以启动后端服务:
bash docker/entrypoint.sh
运行 entrypoint.sh 脚本以启动后端服务:
bash docker/entrypoint.sh
报错: NLTK 库无法找到 punkt_tab
资源,它是用于分词和标记化文本的模型。
运行python:
python
import nltk
nltk.download('punkt_tab')
报错:NLTK 在尝试加载 wordnet
资源时没有找到它。wordnet
是一个词汇数据库,通常用于自然语言处理任务,如词性标注和同义词查找。
python
import nltk
nltk.download('wordnet')
报错:% bash docker/entrypoint.sh docker/entrypoint.sh: line 8: /ragflow/docker/service_conf.yaml.template: No such file or directory,这个错误说明在执行 entrypoint.sh
脚本时,它尝试访问 /ragflow/docker/service_conf.yaml.template
文件,但该文件没有找到。
将 entrypoint.sh
中的路径修改为相对路径:
python
# replace env variables in the service_conf.yaml file
rm -rf ./conf/service_conf.yaml # 使用相对路径
while IFS= read -r line || [[ -n "$line" ]]; do
# Use eval to interpret the variable with default values
eval "echo \"$line\"" >> ./conf/service_conf.yaml # 使用相对路径
done < ./docker/service_conf.yaml.template # 使用相对路径
四、启动 RAGFlow 前端服务
1. 导航到 Web
目录并安装前端依赖项:
python
cd web
npm install --force
2. 将 .umirc.ts 中的 proxy.target
更新为 http://127.0.0.1:9380
:
3. 启动前端服务:
python
npm run dev
*此时将显示以下消息,其中显示前端服务的 IP 地址和端口号,*运行结果如下:
bash
% npm run dev
> dev
> cross-env UMI_DEV_SERVER_COMPRESS=none umi dev
info - [你知道吗?] 请求加载态、数据管理、避免竟态问题,用 react-query 帮你全部解决,详见 https://umijs.org/docs/max/react-query
info - Umi v4.2.3
info - Preparing...
info - [icons] generate icons local:google, local:github
info - [icons] generate icons local:google, local:github
info - [plugin: ./node_modules/@umijs/plugins/dist/tailwindcss] tailwindcss service started
info - [icons] generate icons local:google, local:github
Browserslist: caniuse-lite is outdated. Please run:
npx update-browserslist-db@latest
Why you should do it regularly: https://github.com/browserslist/update-db#readme
Rebuilding...
Done in 370ms.
info - MFSU eager strategy enabled
info - [MFSU][eager] restored cache
Browserslist: caniuse-lite is outdated. Please run:
npx update-browserslist-db@latest
Why you should do it regularly: https://github.com/browserslist/update-db#readme
[HPM] Proxy created: /api,/v1 -> http://127.0.0.1:9380/
event - [MFSU][eager] start build deps
info - [MFSU] skip buildDeps
╔════════════════════════════════════════════════════╗
║ App listening at: ║
║ > Local: http://localhost:9222 ║
ready - ║ > Network: http://10.192.197.77:9222 ║
║ ║
║ Now you can open browser with the above addresses↑ ║
╚════════════════════════════════════════════════════╝
Browserslist: caniuse-lite is outdated. Please run:
npx update-browserslist-db@latest
Why you should do it regularly: https://github.com/browserslist/update-db#readme
info - [MFSU][eager] worker init, takes 667ms
event - [Webpack] Compiled in 2161 ms (1218 modules)
wait - [Webpack] Compiling...
event - [MFSU][eager] start build deps
info - [MFSU] skip buildDeps
event - [Webpack] Compiled in 196 ms (1189 modules)
五、访问 RAGFlow 服务
在 Web 浏览器中,输入 http://127.0.0.1:9222
,确保端口号与上面屏幕截图中显示的端口号匹配。
在解析文档时报错: ModuleNotFoundError: No module named 'FlagEmbedding'
。在pyproject.toml中有这样的代码: flagembedding = "1.2.10"
使用pip命令直接安装:
python
pip install FlagEmbedding==1.2.10
pip show FlagEmbedding
六、关闭前后端服务
bash
pkill npm
pkill -f "docker/entrypoint.sh"