macOS 上部署 RAGFlow

在 macOS 上从源码部署 RAGFlow-0.14.1:详细指南

一、引言

RAGFlow 作为一款强大的工具,在人工智能领域应用广泛。本文将详细介绍如何在 macOS 系统上从源码部署 RAGFlow 0.14.1 版本,无论是开发人员进行项目实践,还是技术爱好者探索新工具,都能从这篇指南中获取清晰、实用的部署步骤。

二、部署前准备

(一)系统配置检查
本次部署以配备 Apple M3 Pro 芯片、18GB 内存且运行 Sonoma 14.6.1 系统的 MacBook Pro 为例。在部署前,需确认你的设备配置与之相当或更优,以确保部署过程顺利及后续使用体验。
(二)安装 Docker 和 Docker Compose
版本要求:RAGFlow 官方明确规定,部署所需的 Docker 版本需大于等于 24.0.0,Docker Compose 版本需大于等于 v2.26.1。
安装与检查:若尚未安装,前往 Docker 官方网站下载并安装对应版本。安装完成后,在终端分别输入以下命令检查版本:

docker -v
docker-compose --version

若已安装但版本不满足要求,需及时更新到指定版本。若显示的版本符合要求,则可继续后续步骤。
三、安装和配置 RAGFlow 的前后端
(一)下载项目
打开终端,进入你期望安装 RAGFlow 的目录,执行以下命令克隆项目仓库:

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/

这一步将把 RAGFlow 项目的源代码下载到本地指定目录,并进入该项目目录,为后续安装和配置做准备。
(二)安装 Python 依赖项
安装 Poetry:Poetry 是 Python 项目依赖管理的重要工具,在终端执行以下命令进行安装:

curl -sSL https://install.python-poetry.org | python3 -

安装完成后,使用poetry --version检查版本。若出现zsh: command not found: poetry错误,这是因为 Poetry 的安装目录未被添加到系统环境变量PATH中。此时,需编辑~/.zshrc文件,在文件末尾添加(注意将kuangfh替换为你的用户名):

export PATH="/Users/kuangfh/.local/bin:$PATH"

添加完成后,运行source ~/.zshrc使更改生效,确保系统能够识别 Poetry 命令。
2. 配置 Poetry:在终端中设置 Poetry 的相关环境变量,以确保虚拟环境能按预期创建和使用:

export POETRY_VIRTUALENVS_CREATE=true 

安装依赖项:执行以下命令安装 Python 依赖项,这会创建一个名为.venv的虚拟环境,并将项目所需的所有 Python 依赖项安装到该环境中:

~/.local/bin/poetry install --sync --no-root

在安装过程中,若出现错误提示与xgboost包有关,这是因为xgboost 1.5.0 版本不支持 PEP 517 构建标准,而 Poetry 默认使用该标准处理依赖包安装。此时,使用 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,直至依赖安装成功。
4. 启动第三方服务:使用 Docker Compose 启动 “基本” 服务,其中包括 MinIO、Elasticsearch、Redis 和 MySQL,在终端输入以下命令:

docker compose -f docker/docker-compose-base.yml up -d

这将在后台启动这些服务,为 RAGFlow 的运行提供必要的支持。
在这里插入图片描述

  1. 更新第三方服务的主机和端口设置:首先,在/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文件,按照docker/.env中的指定,将mysql端口更新为5455,将es端口更新为1200 。修改后的内容大致如下:

yamlragflow: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: 30m
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 后端服务
注释 nginx 行:使用文本编辑器打开docker/entrypoint.sh文件,找到/usr/sbin/nginx这一行,在其开头添加#符号,将其注释掉,修改后的内容如下:

# /usr/sbin/nginx

激活虚拟环境:在终端执行以下命令,激活之前创建的 Python 虚拟环境,并设置PYTHONPATH环境变量:

source .venv/bin/activate
export PYTHONPATH=$(pwd)

设置 HuggingFace 镜像站点(可选):若在部署过程中无法访问 HuggingFace,可在终端设置HF_ENDPOINT环境变量为镜像站点地址,例如:

export HF_ENDPOINT=https://hf-mirror.com

启动后端服务:在终端执行以下命令启动后端服务:

bash docker/entrypoint.sh

在这里插入图片描述

若启动过程中遇到 NLTK 库相关报错,提示找不到punkt_tab资源或wordnet资源,分别运行以下命令进行下载:

python import nltk
nltk.download('punkt_tab')
nltk.download('wordnet')

若出现docker/entrypoint.sh: line 8: /ragflow/docker/service_conf.yaml.template: No such file or directory错误,需将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  # 使用相对路径

修改完成后,重新执行bash docker/entrypoint.sh启动后端服务。
五、启动 RAGFlow 前端服务
安装前端依赖项:在终端进入web目录,执行以下命令安装前端依赖项:

cd web
npm install --force

更新代理配置:使用文本编辑器打开.umirc.ts文件,将proxy.target更新为http://127.0.0.1:9380 。
启动前端服务:在终端执行以下命令启动前端服务:

npm run dev

启动成功后,终端会显示前端服务的 IP 地址和端口号,根据提示信息可在浏览器中访问 RAGFlow 服务。
在这里插入图片描述

六、访问 RAGFlow 服务

打开 Web 浏览器,在地址栏输入前端服务显示的 IP 地址和端口号(例如http://127.0.0.1:9222 ,注意确保端口号与实际显示一致),即可访问 RAGFlow 服务。
在这里插入图片描述
在这里插入图片描述

若在解析文档时出现ModuleNotFoundError: No module named 'FlagEmbedding’错误,在终端使用pip命令安装该模块:

pip install FlagEmbedding==1.2.10
pip show FlagEmbedding

七、关闭前后端服务
当不再需要使用 RAGFlow 服务时,可在终端执行以下命令关闭前后端服务:

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

八、总结
通过以上详细的步骤,我们完成了在 macOS 上从源码部署 RAGFlow 0.14.1 的全过程。在部署过程中,每一步都至关重要,需仔细操作,尤其是环境变量的设置、依赖项的安装以及路径的配置等环节。若在部署过程中遇到问题,可参考文中的解决方案或进一步查阅相关资料。希望本文能帮助大家顺利部署 RAGFlow,开启人工智能应用开发之旅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/69480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速集成DeepSeek到项目

DeepSeek API-KEY 获取 登录DeekSeek 官网&#xff0c;进入API 开放平台 2. 创建API-KEY 复制API-KEY进行保存&#xff0c;后期API调用使用 项目中集成DeepSeek 这里只展示部分核心代码&#xff0c;具体请查看源码orange-ai-deepseek-biz-starter Slf4j AllArgsConstructo…

保姆级教程Docker部署Zookeeper模式的Kafka镜像

目录 一、安装Docker及可视化工具 二、Docker部署Zookeeper 三、单节点部署 1、创建挂载目录 2、命令运行容器 3、Compose运行容器 4、查看运行状态 5、验证功能 四、部署可视化工具 1、创建挂载目录 2、Compose运行容器 3、查看运行状态 一、安装Docker及可视化工…

Docker容器访问外网:启动时的网络参数配置指南

在启动Docker镜像时,可以通过设置网络参数来确保容器能够访问外网。以下是几种常见的方法: 1. 使用默认的bridge网络 Docker的默认网络模式是bridge,它会创建一个虚拟网桥,将容器连接到宿主机的网络上。在大多数情况下,使用默认的bridge网络配置即可使容器访问外网。 启动…

白话文实战Nacos(保姆级教程)

前言 上一篇博客 我们创建好了微服务项目,本篇博客来体验一下Nacos作为注册中心和配置中心的功能。 注册中心 如果我们启动了一个Nacos注册中心,那么微服务比如订单服务,启动后就可以连上注册中心把自己注册上去,这过程就是服务注册。每个微服务,比如商品服务都应该注册…

C语言基础08:运算符+流程控制总结

运算符 算术运算符 结果&#xff1a;数值 、-、*、\、%、&#xff08;正&#xff09;、-&#xff08;负&#xff09;、、-- i和i 相同点&#xff1a;i自身都会增1 不同点&#xff1a;它们运算的最终结果是不同的。i&#xff1a;先使用&#xff0c;后计算&#xff1b;i&am…

Node.js开发属于自己的npm包(发布到npm官网)

在 Node.js 中开发并发布自己的 npm 包是一个非常好的练习&#xff0c;可以帮助我们更好地理解模块化编程和包管理工具&#xff0c;本篇文章主要阐述如何使用nodejs开发一个属于自己的npm包&#xff0c;并且将其发布在npm官网。在开始之前确保已经安装了 Node.js 和 npm。可以在…

如何在RTACAR中配置IP多播(IP Multicast)

一、什么是IP多播 IP多播&#xff08;IP Multicast&#xff09;是一种允许数据包从单一源地址发送到多个目标地址的技术&#xff0c;是一种高效的数据传输方式。 多播地址是专门用于多播通信的IP地址&#xff0c;范围从 224.0.0.0到239.255.255.255 与单播IP地址不同&#x…

12.翻转、对称二叉树,二叉树的深度

反转二叉树 递归写法 很简单 class Solution { public:TreeNode* invertTree(TreeNode* root) {if(rootnullptr)return root;TreeNode* tmp;tmproot->left;root->leftroot->right;root->righttmp;invertTree(root->left);invertTree(root->right);return …

网络安全行业的冬天

冬天已经来了&#xff0c;春天还会远吗&#xff1f;2022年10月28日&#xff0c;各个安全大厂相继发布了财报&#xff0c;纵观2022年前三季度9个月&#xff0c;三六零亏了19亿&#xff0c;奇安信亏了11亿&#xff0c;深信服亏了6亿&#xff0c;天融信亏了4亿&#xff0c;安恒亏了…

MYSQL索引与视图

一、新建数据库 mysql> create database mydb15_indexstu; mysql> use mydb15_indexstu; 二、新建表 &#xff08;1&#xff09;学生表Student mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-…

深度优先搜索(DFS)——八皇后问题与全排列问题

&#xff08; ^ _ ^ &#xff09; 数据结构好难哇&#xff08;哭 1.BFS和DFS 数据结构空间性质DFSstackO(h)不具有最短性质BFSqueueO(2^h)具有最短路性质 空间上DFS占优势&#xff0c;但是BFS具有最短性 &#xff08;若所有权重都是1&#xff0c;则BFS一定最短&#xff09;&…

Flink 内存模型各部分大小计算公式

Flink 的运行平台 如果 Flink 是运行在 yarn 或者 standalone 模式的话&#xff0c;其实都是运行在 JVM 的基础上的&#xff0c;所以首先 Flink 组件运行所需要给 JVM 本身要耗费的内存大小。无论是 JobManager 或者 TaskManager &#xff0c;他们 JVM 内存的大小都是一样的&a…

Vue07

一、Vuex 概述 目标&#xff1a;明确Vuex是什么&#xff0c;应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff0c;可以管理 Vue 通用的数据 (多组件共享的数据)。例如&#xff1a;购物车数…

Linux 安装 Ollama

1、下载地址 Download Ollama on Linux 2、有网络直接执行 curl -fsSL https://ollama.com/install.sh | sh 命令 3、下载慢的解决方法 1、curl -fsSL https://ollama.com/install.sh -o ollama_install.sh 2、sed -i s|https://ollama.com/download/ollama-linux|https://…

Docker Desktop无法安装报错(求助记录中)

之前Docker Desktop无法使用&#xff0c;报了一个注册表的错误&#xff08;忘记截图&#xff09;我想着更新安装下应该就好了&#xff0c;结果Docker Desktop一直无法安装&#xff0c;花了几天都没解决。同时我的window11更新也出现下载错误 - 0x80040154异常,启动或关闭Window…

Docker入门(Windows)

视频链接&#xff1a;Docker | 狂神说 环境说明 Windows For Docker WSL2 概念 Docker是什么&#xff1f; 百度百科&#xff1a;百度百科 Docker 是一个开源的平台&#xff0c;它利用操作系统级虚拟化技术来打包和运行应用程序。通过使用容器化技术&#xff0c;Docker 提…

STM32 RTC亚秒

rtc时钟功能实现&#xff1a;rtc模块在stm32内部&#xff0c;由电池或者主电源供电。如下图&#xff0c;需注意实现时仅需设置一次初始化。 1、stm32cubemx 代码生成界面设置&#xff0c;仅需开启时钟源和激活日历功能。 2、生成的代码,需要对时钟进行初始化&#xff0c;仅需…

kafka服务端之延时操作实现原理

文章目录 背景案例延时生产实现原理延时拉取实现原理 总结 背景 上篇我们说到了kafka时间轮是延时操作内部实现的重要数据结构&#xff0c;这篇我们来说下kafka内部的延时操作实现原理。这里我们以延时生产和延时拉取为例说明延时操作的实现原理。 案例 延时生产 我们知道如…

【算法】动态规划专题⑥ —— 完全背包问题 python

目录 前置知识进入正题模板 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 完全背包问题是动态规划中的一种经典问题&#xff0c;它与0-1背包问题相似&#xff0c;但有一个关键的区别&#xff1a;在完全背包问题中&#xff0c;每种物品都有无限的数量可用。…

VSCode中出现“#include错误,请更新includePath“问题,解决方法

1、出现的问题 在编写C程序时&#xff0c;想引用头文件但是出现如下提示&#xff1a; &#xff08;1&#xff09;首先检查要引用的头文件是否存在&#xff0c;位于哪里。 &#xff08;2&#xff09;如果头文件存在&#xff0c;在编译时提醒VSCode终端中"#include错误&am…