当前位置: 首页 > news >正文

在macOS上从源码部署RAGFlow-0.14.1

 一、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 _prepare160│161│                 error = ChefBuildError("\n\n".join(message_parts))162│163│             if error is not None:→ 164│                 raise error from None165│166│             return path167│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: 5455max_connections: 100stale_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:

import nltk
nltk.download('punkt_tab')

报错:NLTK 在尝试加载 wordnet 资源时没有找到它。wordnet 是一个词汇数据库,通常用于自然语言处理任务,如词性标注和同义词查找。

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 中的路径修改为相对路径:

# 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 valueseval "echo \"$line\"" >> ./conf/service_conf.yaml  # 使用相对路径
done < ./docker/service_conf.yaml.template  # 使用相对路径

四、启动 RAGFlow 前端服务

1. 导航到 Web 目录并安装前端依赖项:

cd web
npm install --force

2. 将 .umirc.ts 中的 proxy.target 更新为 http://127.0.0.1:9380

3. 启动前端服务:

npm run dev 

此时将显示以下消息,其中显示前端服务的 IP 地址和端口号,运行结果如下:

% npm run dev> dev
> cross-env UMI_DEV_SERVER_COMPRESS=none umi devinfo  - [你知道吗?] 请求加载态、数据管理、避免竟态问题,用 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@latestWhy you should do it regularly: https://github.com/browserslist/update-db#readmeRebuilding...Done in 370ms.
info  - MFSU eager strategy enabled
info  - [MFSU][eager] restored cache
Browserslist: caniuse-lite is outdated. Please run:npx update-browserslist-db@latestWhy 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@latestWhy 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命令直接安装:

pip install FlagEmbedding==1.2.10
pip show FlagEmbedding

 

六、关闭前后端服务

pkill npm
pkill -f "docker/entrypoint.sh"

相关文章:

在macOS上从源码部署RAGFlow-0.14.1

一、macOS配置 1. macOS配置 我使用MacBook Pro&#xff0c;chip 是 Apple M3 Pro&#xff0c;Memory是18GB&#xff0c;macOS是 Sonoma 14.6.1。 2.安装Docker和Docker compose 官方要求 Docker ≥ 24.0.0 & Docker Compose ≥ v2.26.1&#xff0c;我的版本如下&#x…...

2-2-18-9 QNX系统架构之文件系统(二)

阅读前言 本文以QNX系统官方的文档英文原版资料为参考&#xff0c;翻译和逐句校对后&#xff0c;对QNX操作系统的相关概念进行了深度整理&#xff0c;旨在帮助想要了解QNX的读者及开发者可以快速阅读&#xff0c;而不必查看晦涩难懂的英文原文&#xff0c;这些文章将会作为一个…...

【经管数据】上市公司企业审计报告时滞数据、 年报披露时滞数据(2001-2022年)

测算方式&#xff1a;参考C刊《审计研究》窦笑晨&#xff08;2022&#xff09;老师的研究&#xff0c;从审计报告约定披露日期到审计报告实际披露日期之间的时间间隔。有关审计报告时滞的度量&#xff0c;现有研究大多采用资产负债表日与审计报告实际披露日期之间的间隔天数进行…...

debian ubuntu armbian部署asp.net core 项目 开机自启动

我本地的环境是 rk3399机器&#xff0c;安装armbian系统。 1.安装.net core 组件 sudo apt-get update && \sudo apt-get install -y dotnet-sdk-8.0或者安装运行库&#xff0c;但无法生成编译项目 sudo apt-get update && \sudo apt-get install -y aspnet…...

无人机地面遥控遥测技术与算法概述!

一、地面系统遥控检测核心技术 卫星遥测技术&#xff1a; 定义&#xff1a;卫星遥测技术是实现卫星与地面之间遥测数据传输的关键环节。 功能&#xff1a;传输卫星的状态信息、传感器采集的环境参数等。 关键技术&#xff1a; 调制解调技术&#xff1a;用于将数字遥测数据…...

游戏引擎学习第30天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 在这段讨论中&#xff0c;重点是对开发过程中出现的游戏代码进行梳理和进一步优化的过程。 工作回顾&#xff1a;在第30天&#xff0c;回顾了前一天的工作&#xff0c;并提到今天的任务是继续从第29天的代码开始&#xff0c…...

Django drf 快速使用

1. 安装: pip install djangorestframework 2. 添加rest_framework到您的INSTALLED_APPS设置。 settings.pyINSTALLED_APPS [...rest_framework, ] 3. 定义模型 models.pyfrom django.db import modelsclass BookModel(models.Model):name models.CharField(max_length64)…...

机器学习介绍与实战:案例解析与未来展望

一、机器学习概述 1. 什么是机器学习&#xff1f; 机器学习&#xff08;Machine Learning, ML&#xff09;是一种通过数据训练模型&#xff0c;使计算机能够自动从经验中学习的技术。它旨在让计算机在没有显式编程的情况下&#xff0c;能够从数据中提取模式、进行预测或决策。…...

【SCT71401】3V-40V Vin, 150mA, 2.5uA IQ,低压稳压器,替代SGM2203

SCT71401 3V-40V Vin, 150mA, 2.5uA IQ&#xff0c;低压稳压器&#xff0c;替代SGM2203 描述 SCT71401系列产品是一款低压差线性稳压器&#xff0c;设计用于3 V至40 V &#xff08;45V瞬态输入电压&#xff09;的宽输入电压范围和150mA输出电流。SCT71401系列产品使用3.3uF…...

2024.12.3总结

继周一把PPT初稿弄出来后&#xff0c;今晚进行了转正预答辩&#xff0c;主管&#xff0c;导师&#xff0c;团队里能来听答辩的人都来了&#xff0c;讲完后&#xff0c;自己都觉得自己讲得不好&#xff0c;基本上是照着PPT念的。 写PPT&#xff0c;改PPT,不停的预演答辩的过程&…...

Redis探秘Sentinel(哨兵模式)

概述 Redis的高可用机制有持久化、复制、哨兵和集群。其主要的作用和解决的问题分别是&#xff1a; 持久化&#xff1a;持久化是最简单的高可用方法(有时甚至不被归为高可用的手段)&#xff0c;主要作用是数据备份&#xff0c;即将数据存储在硬盘&#xff0c;保证数据不会因进…...

Linux C/C++编程之静态库

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com…...

strlen函数用法,模拟实现

一、strlen 函数用法 用来求字符串长度&#xff0c;从我们给的地址开始&#xff0c;往后数&#xff0c;直到遇到 \0 停止&#xff0c;返回数的个数&#xff0c;不包括 \0 返回值类型是无符号整形 char arr[ ]"bvcxz"; printf("%u ",strlen(arr)); …...

云原生后端:解锁高效可扩展应用的魔法世界

目录 一、云原生后端的崛起&#xff1a;时代的必然选择 二、云原生后端的基石&#xff1a;容器化与 Docker &#xff08;一&#xff09;容器化的概念与优势 &#xff08;二&#xff09;Docker&#xff1a;容器化的明星工具 三、微服务架构&#xff1a;云原生后端的灵魂 &…...

大数据新视界 -- Hive 数据湖架构中的角色与应用(上)(25 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

React高阶面试题目(六)

React的formik库 定义&#xff1a; Formik是一个用于在React应用程序中构建和处理表单数据的流行开源库。它提供了许多实用的组件和函数&#xff0c;使在React应用程序中处理表单数据变得更加轻松。 优点&#xff1a; 自动处理表单状态管理&#xff0c;无需手动编写大量的状态…...

容器运行应用及Docker命令

文章目录 一、使用容器运行Nginx应用1_使用docker run命令运行Nginx应用1 观察下载容器镜像过程2 观察容器运行情况 2_访问容器中运行的Nginx服务1 确认容器IP地址2 容器网络说明3 使用curl命令访问 二、Docker命令1_Docker命令获取帮助方法2_Docker官网提供的命令说明3_docker…...

【Go 基础】channel

Go 基础 channel 什么是channel&#xff0c;为什么它可以做到线程安全 Go 的设计思想就是&#xff1a;不要通过共享内存来通信&#xff0c;而是通过通信来共享内存。 前者就是传统的加锁&#xff0c;后者就是 channel。也即&#xff0c;channel 的主要目的就是在多任务间传递…...

windows10更新后system磁盘占用100%

windows10更新后system磁盘占用100% 现象&#xff1a; 解决办法&#xff1a; 打开服务禁用&#xff1a;Connected User Experiences and Telemetry 我现在已经把该服务禁用了&#xff0c;已经没有再出现不停写入的情况。 服务描述&#xff1a;“已连接的用户体验和遥测服务所…...

无人设备遥控器之防水性能篇

无人设备遥控器的防水性能是评估其耐用性和适应不同环境能力的重要指标。随着无人设备技术的不断发展&#xff0c;越来越多的遥控器在设计时融入了防水元素&#xff0c;以满足用户在不同天气条件下的使用需求。 一、防水等级与标准 无人设备遥控器的防水性能通常通过防水等级来…...

初创公司如何利用Taotoken快速原型验证多个大模型能力

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创公司如何利用Taotoken快速原型验证多个大模型能力 对于资源有限的初创团队而言&#xff0c;在产品原型阶段快速验证技术方案是…...

Synopsys SpyGlass 2016迁移记:从老系统到Ubuntu 20.04的完整环境适配与降级运行实战

Synopsys SpyGlass 2016迁移记&#xff1a;从老系统到Ubuntu 20.04的完整环境适配与降级运行实战当企业面临EDA工具版本升级与操作系统迭代不同步的困境时&#xff0c;如何让老版本工具在新系统上稳定运行成为工程师必须掌握的生存技能。本文将详细记录将Synopsys SpyGlass 201…...

告别虚拟机卡顿:在VMware里给CentOS 7最小化安装分配多少内存和CPU才够用?

虚拟机性能优化指南&#xff1a;CentOS 7最小化安装的资源分配策略在个人电脑上运行虚拟机时&#xff0c;最令人头疼的问题莫过于性能瓶颈。许多初学者在创建CentOS 7虚拟机时&#xff0c;常常陷入两难境地&#xff1a;分配过多资源会影响宿主机运行&#xff0c;分配过少又会导…...

魔兽争霸3闪退修复终极指南:5步让你的经典游戏重获新生

魔兽争霸3闪退修复终极指南&#xff1a;5步让你的经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3闪退而烦恼吗&…...

基于多动态目标跟踪的液压挖掘机路径跟随控制器设计

1. 项目概述&#xff1a;当挖掘机学会“看”与“想”在建筑工地或矿山上&#xff0c;一台液压挖掘机正在作业。传统模式下&#xff0c;操作员需要全神贯注地操纵两个手柄和踏板&#xff0c;协调动臂、斗杆、铲斗和回转四个主要动作&#xff0c;才能完成一个看似简单的挖土、回转…...

8051单片机端口操作:输入缓冲器与锁存器的区别与应用

1. C51端口输入与锁存器读取的本质区别在8051单片机开发中&#xff0c;端口操作有个容易被忽视但至关重要的细节&#xff1a;当你执行端口读写指令时&#xff0c;处理器实际访问的可能是两个不同的物理寄存器。以P1端口为例&#xff1a;输入缓冲器&#xff08;Port Input&#…...

相对噪声模型下梯度下降的收敛性分析与实践指南

1. 项目概述&#xff1a;当梯度方向遇上相对噪声在机器学习和优化的世界里&#xff0c;梯度下降算法就像我们手中的指南针&#xff0c;指引着我们在复杂的高维地形中寻找最低点。但现实往往没那么理想&#xff0c;这个指南针的指针会晃动&#xff0c;我们得到的梯度方向总带着“…...

电池阻抗测量技术:伪随机序列与信号处理应用

1. 电池阻抗测量技术概述电池阻抗测量作为电化学系统状态监测的核心手段&#xff0c;其原理基于对电池施加特定激励信号并测量响应信号&#xff0c;通过分析两者的幅值和相位关系来获取阻抗谱。这种频域分析方法能够反映电池内部电荷转移、扩散过程等动力学特性&#xff0c;为电…...

【字节跳动】Robix系统的底层技术参数配置

Robix 绝密底层裸数据 无修饰纯技术续档一、地址总线时序剥离源码 void addr_bus_timing_restore(void) {setup_hold_time_clr();strobe_delay_cancel();bus_wait_state_disable();addr_valid_mask_null(); } 总线时序原生参数地址建立保持时间清零 读写选通脉冲延时全部取消 总…...

Vision Mamba边缘加速器设计:软硬件协同优化与混合量化策略

1. 项目概述&#xff1a;为什么边缘设备需要为Vision Mamba“量身定制”加速器&#xff1f;在边缘设备上跑视觉模型&#xff0c;听起来就像让一辆家用轿车去跑拉力赛。算力、内存、功耗&#xff0c;处处都是掣肘。传统的视觉Transformer&#xff08;ViT&#xff09;虽然性能强悍…...