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 的运行提供必要的支持。
- 更新第三方服务的主机和端口设置:首先,在/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,开启人工智能应用开发之旅。
相关文章:
macOS 上部署 RAGFlow
在 macOS 上从源码部署 RAGFlow-0.14.1:详细指南 一、引言 RAGFlow 作为一款强大的工具,在人工智能领域应用广泛。本文将详细介绍如何在 macOS 系统上从源码部署 RAGFlow 0.14.1 版本,无论是开发人员进行项目实践,还是技术爱好者…...
postman登录cookie设置
1.设置环境变量, 定义变量存放共享的登录信息 如Cookie 2.登录接口编码test脚本获取cookie信息 let jsessionidCookie pm.cookies.get("JSESSIONID");if (jsessionidCookie) {let cookie "JSESSIONID" jsessionidCookie "; Admin-Tok…...
如何在Linux中设置定时任务(cron)
在Linux系统中,定时任务是自动执行任务的一种非常方便的方式,常常用于定期备份数据、更新系统或清理日志文件等操作。cron是Linux下最常用的定时任务管理工具,它允许用户根据设定的时间间隔自动执行脚本和命令。在本文中,我们将详…...
激光工控机在精密制造中的应用与优势
在精密制造中,激光工控机可以用于许多场景例如 激光切割与雕刻:用于金属、塑料、陶瓷等材料的精密切割和雕刻,适用于汽车、航空航天、电子等行业;可实现复杂图案和高精度加工,满足微米级精度要求。 激光焊接…...
conda的创建
1. 确认 conda 已安装 在使用 conda 创建环境之前,需要确保 conda 已经成功安装在你的系统中。你可以通过在命令行中输入以下命令来检查: conda --version如果已经安装,命令行会显示 conda 的版本号;若未安装,你可以…...
python视频爬虫
文章目录 爬虫的基本步骤一些工具模拟浏览器并监听文件视频爬取易错点一个代码示例参考 爬虫的基本步骤 1.抓包分析,利用浏览器的开发者工具 2.发送请求 3.获取数据 4.解析数据 5.保存数据 一些工具 requests, 用于发送请求,可以通过get,p…...
cv2.Sobel
1. Sobel 算子简介 Sobel 算子是一种 边缘检测算子,通过对图像做梯度计算,可以突出边缘。 Sobel X 方向卷积核: 用于计算 水平方向(x 方向) 的梯度。 2. 输入图像示例 假设我们有一个 55 的灰度图像,像素…...
Oracle入门精读03_Oracle11g安装目录及子目录的结构简介
在Windows2012 Server R2,个人把 Oracle Database 11g安装于硬盘D,如下: 在Oracle Database 11g中,Oracle的目录结构是由Oracle_Base及其子目录cfgtoollogs 、diag 、product、admin、flash_recovery_area和oradata等。这个与Oracle 10G不同的…...
Unity 卡死排查方法(游戏死循环、打包卡死)
适用场景 游戏运行一半卡住了 打包卡住了 工具 visual studio 方法 visual studio 启动工程,调试->附加到Unity,如果开了多个unity,可以用附加到进程找unity 打开线程窗口,调试->窗口->线程 点击暂停按钮&…...
开源、免费项目管理工具比较:2025最新整理30款
好用的开源、免费版项目管理系统有:1.Redmine;2. Taiga;3. OpenProject; 4.ProjectLibre; 5.GanttProject; 6.Tuleap; 7.Trac;8. Phabricator; 9.Notion; 10.…...
AlmaLinux使用Ansible自动部署k8s集群
以下是使用Ansible在AlmaLinux上自动化部署Kubernetes(K8S)集群的详细步骤: 1. 环境准备 1.1 节点规划 至少3台AlmaLinux 9服务器(1个Master,2个Worker)确保所有节点网络互通,SSH免密登录已配…...
Django创建超管用户
在 Django 中创建超级用户(superuser)可以通过命令行工具 createsuperuser 完成。以下是具体步骤: 1. 确保已进行数据库迁移 在创建超级用户前,确保已执行数据库迁移: python manage.py migrate 2. 创建超级用户 …...
机器翻译技术的演进与未来趋势:从规则到神经网络的革新
随着全球化的不断推进和多语言交流的日益频繁,机器翻译(Machine Translation, MT)技术的需求日益增长。机器翻译技术经历了从基于规则的方法到统计方法,再到如今的神经网络方法的发展历程。本文将探讨机器翻译技术的演进过程及其未来趋势,并结合Python代码示例,展示现代机…...
蓝桥杯备赛 Day13.1走出迷宫
链接:走出迷宫 题目描述 小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。 小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#”来表示,空地用“.”来表示。 障碍物不能通…...
Word中Ctrl+V粘贴报错问题
Word中CtrlV粘贴时显示“文件未找到:MathPage.WLL”的问题 Word的功能栏中有MathType,但无法使用,显示灰色。 解决方法如下: 首先找到MathType安装目录下MathPage.wll文件以及MathType Commands 2016.dotm文件,分别复…...
C# Barrier 类使用详解
总目录 前言 Barrier 是 C# 中用于多线程分阶段协同工作的同步工具,位于 System.Threading 命名空间下。它允许多个线程在指定阶段(Phase)的屏障点(Barrier Point)同步,所有线程到达屏障点后,才…...
DeepSeek应用——与word的配套使用
目录 一、效果展示 二、配置方法 三、使用方法 四、注意事项 1、永久化使用 2、宏被禁用 3、office的生成失败 记录自己学习应用DeepSeek的过程...... 这个是与WPS配套使用的过程,office的与这个类似: 一、效果展示 二、配置方法 1、在最上方的…...
基于AIOHTTP、Websocket和Vue3一步步实现web部署平台,无延迟控制台输出,接近原生SSH连接
背景:笔者是一名Javaer,但是最近因为某些原因迷上了Python和它的Asyncio,至于什么原因?请往下看。在着迷”犯浑“的过程中,也接触到了一些高并发高性能的组件,通过简单的学习和了解,aiohttp这个…...
CentOS 7.8 安装MongoDB 7教程
文章目录 CentOS 7.8 安装MongoDB 7教程一、准备工作1. 系统更新2. 权限 二、添加MongoDB软件源1. 创建MongoDB的yum源文件2. 添加以下内容3. 保存并退出编辑器 三、安装MongoDB1. 更新yum缓存2. 安装MongoDB 四、启动MongoDB服务1. 启动MongoDB2. 设置MongoDB开机自启动 五、配…...
瑞芯微开发板/主板Android调试串口配置为普通串口方法 深圳触觉智能科技分享
本文介绍瑞芯微开发板/主板Android调试串口配置为普通串口方法,不同板型找到对应文件修改,修改的方法相通。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联…...
【HDFS】addInternalPBProtocol、setProtocolEngine和registerProtocolAndImpl
本文主要与Hadoop的RPC框架相关 DFSUtil#addInternalPBProtocol: /*** Add protobuf based protocol to the {@link org.apache.hadoop.ipc.RPC.Server}.* This method is for exclusive use by the hadoop libraries, as its signature* changes with the version of the sha…...
springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)
💕💕作者: 爱笑学姐 💕💕个人简介:十年Java,Python美女程序员一枚,精通计算机专业前后端各类框架。 💕💕各类成品Java毕设 。javaweb,ssm…...
web3是什么,最简单的介绍
Web3是指第三代互联网技术,也被称为分布式互联网。它是在传统互联网(Web2.0)基础上发展出来的一种新技术体系,旨在通过区块链技术来重新定义人们访问和使用网络服务的方式。以下是关于Web3的详细介绍: 一、核心特点 …...
机器学习 - 词袋模型(Bag of Words)实现文本情感分类的详细示例
为了简单直观的理解模型训练,我这里搜集了两个简单的实现文本情感分类的例子,第一个例子基于朴素贝叶斯分类器,第二个例子基于逻辑回归,通过这两个例子,掌握词袋模型(Bag of Words)实现文本情感…...
【注意】sql语句where条件中的数据类型不一致,不仅存在性能问题,还会有数据准确性方面的bug......
隐式类型转换规则 MySQL 在进行比较操作时,如果比较双方的数据类型不一致,通常会尝试将其中一个数据类型转换为另一个数据类型,以便进行比较。 对于 select * from t_order where order_no 1538808276987285507 ,当 order_no 为 …...
w~大模型~合集30
我自己的原文哦~ https://blog.51cto.com/whaosoft/13284996 #VideoMamba 视频理解因大量时空冗余和复杂时空依赖,同时克服两个问题难度巨大,CNN 和 Transformer 及 Uniformer 都难以胜任,Mamba 是个好思路,让我们看看本文是…...
基于单片机的仓库安防系统(论文+源码)
2.1 需求分析 仓库由于存有大量物品,因此对仓库的监控非常重要,目前仓库已经普遍装有安防系统,以保证仓库的安全,本次基于单片机的仓库安防系统设计,在功能上设计如下: 用户可通过IC卡进入仓库࿱…...
AndroidStudio查看Sqlite和SharedPreference
1.查看Sqlite 使用App Inspection,这是个好东西 打开方式:View → Tool Windows → App Inspection 界面如图: App inspection不但可以看Sqlite还可以抓包network和background task连抓包工具都省了。 非常好使 2.查看sharedPreference 使…...
仿 RabbitMQ 实现的简易消息队列
文章目录 项目介绍开放环境第三⽅库介绍ProtobufMuduo库 需求分析核⼼概念实现内容 消息队列系统整体框架服务端模块数据管理模块虚拟机数据管理模块交换路由模块消费者管理模块信道(通信通道)管理模块连接管理模块 客户端模块 公共模块日志类其他工具类…...
JavaScript基础知识及高频用法
目录 一、语言基础:构建代码逻辑的积木 二、核心概念:理解JavaScript的灵魂 三、高频用法:现代开发必备技巧 四、避坑指南:常见错误与调试 五、学习路线与资源推荐 从入门到实战,掌握现代Web开发基石 作为全球使…...
VUE项目中实现权限控制,菜单权限,按钮权限,接口权限,路由权限,操作权限,数据权限实现
VUE项目中实现权限控制,菜单权限,按钮权限,接口权限,路由权限,操作权限,数据权限实现 权限系统分类(RBAC)引言菜单权限按钮权限接口权限路由权限 菜单权限方案方案一:菜单…...
多机器人系统的大语言模型:综述
25年2月来自 Drexel 大学的论文“Large Language Models for Multi-Robot Systems: A Survey”。 大语言模型 (LLM) 的快速发展为多机器人系统 (MRS) 开辟新的可能性,从而增强通信、任务规划和人机交互。与传统的单机器人和多智体系统不同,MRS 带来独特…...
如何在 Java 应用中实现数据库的主从复制(读写分离)?请简要描述架构和关键代码实现?
在Java应用中实现数据库主从复制(读写分离) 一、架构描述 (一)整体架构 主库(Master) 负责处理所有的写操作(INSERT、UPDATE、DELETE等)。它是数据的源头,所有的数据变…...
Redis 数据类型 Hash 哈希
在 Redis 中,哈希类型是指值本⾝⼜是⼀个键值对结构,形如 key "key",value { { field1, value1 }, ..., {fieldN, valueN } },Redis String 和 Hash 类型⼆者的关系可以⽤下图来表⽰。 Hash 数据类型的特点 键值对集合…...
17.推荐系统的在线学习与实时更新
接下来就讲解推荐系统的在线学习与实时更新。推荐系统的在线学习和实时更新是为了使推荐系统能够动态地适应用户行为的变化,保持推荐结果的实时性和相关性。以下是详细的介绍和实现方法。 推荐系统的在线学习与实时更新 在线学习的概念 在线学习(Onli…...
网络安全检测思路
对于主机的安全检测,我们通常直接采用nmap或者类似软件进行扫描,然后针对主机操作系统及其 开放端口判断主机的安全程度,这当然是一种方法,但这种方法往往失之粗糙,我仔细考虑了一下,觉 得按下面的流程进行…...
老游戏回顾:SWRacer
竞速类游戏里,我很怀念它。 虽然已经25年过去了。 相比之下,别的游戏真的没法形容。 ---- 是LucasArts制作的一款赛车竞速游戏; 玩家要扮演一名银河旅行者参加各种赛车比赛,赢得奖金,在经历了八个不同星球上的24场…...
MySQL面试题合集
1.MySQL中的数据排序是怎么实现的? 回答重点 排序过程中,如果排序字段命中索引,则利用 索引排序。 反之,使用文件排序。 文件排序中,如果数据量少则在内存中排序, 具体是使用单路排序或者双路排序。 如果数据大则利用磁盘文件进行外部排序,一 般使用归并排序。 知识…...
如何在Java EE中使用标签库?
在Java EE(现在称为Jakarta EE)中使用标签库(Tag Library),主要是通过JSP标准标签库(JSTL)或自定义标签库来实现的。标签库允许在JSP页面中使用自定义的标签,从而简化页面逻辑、增强…...
第 12 天:行为树(Behavior Tree),让 AI 更智能!
🎯 目标: ✅ 理解 Unreal Engine 5 行为树(Behavior Tree) ✅ 创建行为树(BT)和黑板(Blackboard)管理 AI 状态 ✅ 使用任务(Task)让 AI 巡逻、追踪、攻击玩家…...
LabVIEW 用户界面设计基础原则
在设计LabVIEW VI的用户界面时,前面板的外观和布局至关重要。良好的设计不仅提升用户体验,还能提升界面的易用性和可操作性。以下是设计用户界面时的一些关键要点: 1. 前面板设计原则 交互性:组合相关的输入控件和显示控件&#x…...
自然语言处理NLP入门 -- 第三节词袋模型与 TF-IDF
目标 了解词袋模型(BoW)和 TF-IDF 的概念通过实际示例展示 BoW 和 TF-IDF 如何将文本转换为数值表示详细讲解 Scikit-learn 的实现方法通过代码示例加深理解归纳学习难点,并提供课后练习和讲解 3.1 词袋模型(Bag of Words, BoW&a…...
Flappy Bird开发学习记录
概述 为了了解一下Unity的开发过程,或者说感受?先搞简单的练练手。 工具 Unity:2022.3.51f1c1 visual studio 2022 开发过程 项目基本设置 新建2d项目,游戏画面设置为1080*1920(9:16)。 图片素材设…...
Visual Studio 使用 “Ctrl + /”键设置注释和取消注释
问题:在默认的Visual Studio中,选择单行代码后,按下Ctrl /键会将代码注释掉,但再次按下Ctrl /键时,会进行双重注释,这不是我们想要的。 实现效果:当按下Ctrl /键会将代码注释掉,…...
CTF-WEB: 利用Web消息造成DOM XSS
如果索引中有类似如下代码 <!-- Ads to be inserted here --> <div idads> </div> <script>window.addEventListener(message, function(e) {document.getElementById(ads).innerHTML e.data;}); </script>这行代码的作用是将接收到的消息内容…...
2025 西湖论剑wp
web Rank-l 打开题目环境: 发现一个输入框,看一下他是用上面语言写的 发现是python,很容易想到ssti 密码随便输,发现没有回显 但是输入其他字符会报错 确定为ssti注入 开始构造payload, {{(lipsum|attr(‘global…...
常见的排序算法:插入排序、选择排序、冒泡排序、快速排序
1、插入排序 步骤: 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫描 3.如果该元素大于tem,则将该元素移到下一位 4.重复步骤3,直到找到已排序元素中小于等于tem的元素…...
LVDS接口总结--(5)IDELAY3仿真
仿真参考资料如下: https://zhuanlan.zhihu.com/p/386057087 timescale 1 ns/1 ps module tb_idelay3_ctrl();parameter REF_CLK 2.5 ; // 400MHzparameter DIN_CLK 3.3 ; // 300MHzreg ref_clk ;reg …...
数据库的基本概念
在当今的信息时代,数据已成为企业乃至整个社会的重要资产。如何有效地存储、管理和利用这些数据成为了技术发展的关键领域之一。数据库系统作为数据管理的核心工具,在软件开发、数据分析等多个方面扮演着不可或缺的角色。本文将带你了解数据库的一些基本…...
Redis性能优化
1.是否使用复杂度过高的命令 首先,第一步,你需要去查看一下 Redis 的慢日志(slowlog)。 Redis 提供了慢日志命令的统计功能,它记录了有哪些命令在执行时耗时比较久。 查看 Redis 慢日志之前,你需要设置慢…...