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

开源RAG,本地mac启动 dify源码服务

一、Dify文档

参考官方文档来操作,基本没太大的问题。一些细节,我在本篇文章中补充了出来。

这篇文章主要讲以源码的方式启动后端服务,前端服务使用容器启动。

dify 文档地址

欢迎使用 Dify | 中文 | Dify

Dify 本地源码部署文档(有本地源码部署,我们才能在源码上继续做修改)

本地源码启动 | 中文 | Dify

二、写在前边

先知道要花费多少资源

这里docker 容器,占用了8个G的内存!

三、本地源码跑dify (后端)

# 创建名为 dify 的 Python 3.10 环境

conda create --name dify python=3.10

# 切换至 dify Python 环境

conda activate dify

3.1 拉取代码

可以进入到自己的代码常用目录,再拉取代码

git clone https://github.com/langgenius/dify.git

进入到dify目录可以看到

请记住web 和 api的路径,后边会用到

3.2 安装dockerdesk

Mac 使用本地源码的方式运行,也需要先安装docker。安装docker 是因为dify 需要以docker容器的方式来运行 PostgresSQL / Redis / Weaviate

接着上一步从git上拉取的代码,先进入到dify目录,再进入到docker目录,然后使用docker compose来启动这些依赖的容器。

3.3 以docker的方式启动dify所需的数据库等服务

cd docker

docker compose -f docker-compose.middleware.yaml up -d

可以看到在拉取

拉取成功

看到有这些容器在运行

3.4 本地源码启动

分为前端和后端,并不一定都需要。例如只想调试后端,可以把前端以docker的方式来运行。不要安装前端那些环境。

启动步骤

3.4.1 进入 api 目录


cd api

3.4.2 复制环境变量配置文件


cp .env.example .env



3.4.3 生成随机密钥,并替换 .env 中 SECRET_KEY 的值



openssl rand -base64 42

得到一个密钥

复制密钥,vim .env文件

修改SECRET_KEY=生成等密钥

3.4.4 安装依赖

这里下载依赖的时候,使用阿里的源会更快一些。速度从几十kb直接到数10M
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

3.4.5 执行数据库迁移将数据库结构迁移至最新版本

flask db upgrade

3.4.5 启动服务

flask run --host 0.0.0.0 --port=5001 --debug

启动有一个警告错误,先不用处理,不影响。

3.4.6 启动 Worker 服务

用于消费异步队列任务,如数据集文件导入、更新数据集文档等异步操作。 Linux / MacOS 启动:

复制

celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail --loglevel INFO

如果使用 Windows 系统启动,请替换为该命令:

复制

celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail --loglevel INFO

正确输出:

复制

 -------------- celery@TAKATOST.lan v5.2.7 (dawn-chorus)
--- ***** ----- 
-- ******* ---- macOS-10.16-x86_64-i386-64bit 2023-07-31 12:58:08
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         app:0x7fb568572a10
- ** ---------- .> transport:   redis://:**@localhost:6379/1
- ** ---------- .> results:     postgresql://postgres:**@localhost:5432/dify
- *** --- * --- .> concurrency: 1 (gevent)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- -------------- [queues].> dataset          exchange=dataset(direct) key=dataset.> generation       exchange=generation(direct) key=generation.> mail             exchange=mail(direct) key=mail[tasks]. tasks.add_document_to_index_task.add_document_to_index_task. tasks.clean_dataset_task.clean_dataset_task. tasks.clean_document_task.clean_document_task. tasks.clean_notion_document_task.clean_notion_document_task. tasks.create_segment_to_index_task.create_segment_to_index_task. tasks.deal_dataset_vector_index_task.deal_dataset_vector_index_task. tasks.document_indexing_sync_task.document_indexing_sync_task. tasks.document_indexing_task.document_indexing_task. tasks.document_indexing_update_task.document_indexing_update_task. tasks.enable_segment_to_index_task.enable_segment_to_index_task. tasks.generate_conversation_summary_task.generate_conversation_summary_task. tasks.mail_invite_member_task.send_invite_member_mail_task. tasks.remove_document_from_index_task.remove_document_from_index_task. tasks.remove_segment_from_index_task.remove_segment_from_index_task. tasks.update_segment_index_task.update_segment_index_task. tasks.update_segment_keyword_index_task.update_segment_keyword_index_task[2023-07-31 12:58:08,831: INFO/MainProcess] Connected to redis://:**@localhost:6379/1
[2023-07-31 12:58:08,840: INFO/MainProcess] mingle: searching for neighbors
[2023-07-31 12:58:09,873: INFO/MainProcess] mingle: all alone
[2023-07-31 12:58:09,886: INFO/MainProcess] pidbox: Connected to redis://:**@localhost:6379/1.
[2023-07-31 12:58:09,890: INFO/MainProcess] celery@TAKATOST.lan ready.

四、用docker的方式启动前端

4.1 文档

单独启动前端 Docker 容器 | 中文 | Dify

作为后端人员,如果不需要前端源码启动,那就可以以docker的方式来启动!

4.2 本地构建镜像

我是用本地代码来构建的镜像,耗时挺长,第一次738s!

这里看一下构建好的镜像

docker images

4.3 docker启动前端

docker run -it -p 3000:3000 -e CONSOLE_URL=http://127.0.0.1:5001 -e APP_URL=http://127.0.0.1:5001 dify-web

容器启动的结果

4.4 这里访问前端项目

本地访问 http://127.0.0.1:3000

五、起停服务汇总

后端

数据库等服务,以docker容器的方式启动

后台服务

flask run --host 0.0.0.0 --port=5001 --debug

启动worker服务

..

前端服务,以docker启动

docker run -it -p 3000:3000 -e CONSOLE_URL=http://127.0.0.1:5001 -e APP_URL=http://127.0.0.1:5001 dify-web

相关文章:

开源RAG,本地mac启动 dify源码服务

一、Dify文档 参考官方文档来操作,基本没太大的问题。一些细节,我在本篇文章中补充了出来。 这篇文章主要讲以源码的方式启动后端服务,前端服务使用容器启动。 dify 文档地址 欢迎使用 Dify | 中文 | Dify Dify 本地源码部署文档&#xff…...

【Linux取经路】基于信号量和环形队列的生产消费者模型

文章目录 一、POSIX 信号量二、POSIX 信号量的接口2.1 sem_init——初始化信号量2.2 sem_destroy——销毁信号量2.3 sem_wait——等待信号量2.4 sem_post——发布信号量 三、基于环形队列的生产消费者模型3.1 单生产单消费模型3.2 多生产多消费模型3.3 基于任务的多生产多消费模…...

计算机SCI期刊,中科院2区,收稿范围非常广泛!

一、期刊名称 Journal of Web Semantics 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:2.5 中科院分区:2区 出版方式:开放出版 版面费:$1600 三、期刊征稿范围 《网络语义学杂志》…...

JDK、JRE、编译指令和垃圾回收机制详解

JDK 全称 Java SE Development Kit (Java 开发工具包) JVM虚拟机:Java运行的地方 核心类库:Java提前编好的东西 开发工具: javac,java,jdb,jhat javac:Java编译器,用于将Java源代码编译成Java字节码文件(.class)。 java: java…...

【ARM 嵌入式 C 入门及渐进 6.2 -- ARMv8 C 内嵌汇编读系统寄存器的函数实现】

请阅读【嵌入式开发学习必备专栏】 文章目录 ARMv8 C 内嵌汇编读系统寄存器 ARMv8 C 内嵌汇编读系统寄存器 要在ARMv8架构中通过C代码和内嵌汇编来读取系统寄存器s3_0_c15_c5_5的值,并将其返回,可以按照以下方式实现system_read_reg函数: #…...

使用 LlamaParse 进行 PDF 解析并创建知识图谱

此 Python 笔记本提供了有关利用 LlamaParse 从 PDF 文档中提取信息并随后将提取的内容存储到 Neo4j 图形数据库中的综合指南。本教程在设计时考虑到了实用性,适合对文档处理、信息提取和图形数据库技术感兴趣的开发人员、数据科学家和技术爱好者。 该笔记本电脑的主…...

Oracle行迁移解析

行迁移(Row Migration)是Oracle数据库中的另一个现象,它与行链接类似,都是由于数据行大小的变化导致的存储问题,但其本质和影响有所不同。 触发条件:行迁移发生在当一个已存在的、原先能够完全存储在一个数…...

【k8s】 busybox镜像、挂载volume卷

1. 概述 busybox是一个包含了nslookup,ping,wget等网络处理命令的Pod容器(不含curl命令),它的体积非常小,适合做一些容器内的网络调试。 即创建一个docker ,进去执行 ping 命令等 2. 启动容器 2.1 会自动退出&…...

文本三剑客之 sed 编辑器

一.sed 概述 1.sed 介绍 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个 命令文本文件中。 2.sed 的工…...

【MySQL精通之路】SQL优化(1)-查询优化(3)-索引合并

主博客: 【MySQL精通之路】SQL优化(1)-CSDN博客 上一篇: 【MySQL精通之路】SQL优化(1)-查询优化(2)-范围查询优化-CSDN博客 下一篇: 目录 1.索引合并-交集访问算法 2.索引合并联合访问算法 3.索引合并-排序联合访问算法 4.影响索引合…...

Linux中安装配置并使用samba服务(Centos以及Ubuntu)

目录 前言1. 基本知识2. Centos3. Ubuntu3.1 物理服务器3.2 云服务器前言 在window与linux系统中配置一个共享文件夹,可以做很多时间,比如映射器或者像linux中定时存放文件等 1. 基本知识 在Ubuntu上安装和配置Samba服务可以让你的Ubuntu机器与Windows、macOS以及其他Linu…...

three.js能实现啥效果?看过来,这里都是它的菜(06)

这是第五期了,本期继续分享three.js可以实现的3D动画案例,有老铁反馈再发案例的时候,是否可以顺道分享一下three.js的知识点,好吧,安排。 材质动画 材质动画可以实现各种复杂的视觉效果,包括但不限于以下…...

利用ESP32-C3将TF卡内容变成U盘进行读取

利用ESP32-C3将TF卡内容变成U盘进行读取 ESP32-C3是一款高性价比的微控制器,具备WiFi和蓝牙功能,广泛应用于物联网(IoT)项目中。除了常见的无线通信功能外,ESP32-C3还可以用来模拟U盘读取TF卡内容。本文将介绍如何通过…...

C++小病毒

C小病毒&#xff08;注&#xff1a;对电脑无过大伤害&#xff09; 短短行&#xff0c;创造奇迹&#xff01; 把这个文件命名为virus.exe就可以使用了。 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {HWND hwnd GetForegroundW…...

使用VUE3+TS+elementplus创建一个增加按钮

一、前言 在上一篇文章中分享了创建table的过程&#xff0c;详见&#xff08;VUE3TSelementplus创建table&#xff0c;纯前端的table&#xff09;&#xff0c;本文在创建好的table的基础上&#xff0c;再创建一个增加按钮。 二、程序展示 1、前面创建table的程序 <templ…...

Python面试宝典:文件读写和上下文管理器以及输入输出流面试题(1000加python面试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第一部分:Python基础:第八章:文件操作和输入输出:第一节:文件读写和上下文管理器以及输入输出流】 第八章:文件操作和输入输出第一节:文件读写和上下文管理器以及输入输出流1.1、文件读写基本操作1.1.1、打开…...

Spring Boot | Spring Boot 实现 “记住我“ 功能

目录: 一、SpringBoot 中 自定义 "用户授权管理" ( 总体内容介绍 )二、实现 "记住我" 功能 ( 通过 "HttpSecurity类" 的 rememberMe( )方法来实现 "记住我" 功能 ) :2.1 基于 "简单加密 Token" 的方式 ( 实现 "记住我&…...

AGM AG32 MCU替代GD32F407/STM32F407的手持示波器方案

一、AG32 MCU替代GD32F407/STM32F407的数字示波器方案 市场上有多款数字迷你示波器&#xff0c;特别小巧&#xff0c;携带非常方便。单通道&#xff0c;标注100Mhz带宽&#xff0c;500MS采样率。 这样高的采样率需要使用高速AD及很高性能的处理器。原方案使用AD9288双通道8bit …...

MongoDB基础入门到深入(八)MongoDB整合SpringBoot、Chang Streams

文章目录 系列文章索引十五、MongoDB整合SpringBoot1、环境准备2、集合操作3、文档操作&#xff08;1&#xff09;相关注解&#xff08;2&#xff09;创建实体&#xff08;3&#xff09;添加文档&#xff08;4&#xff09;查询文档&#xff08;5&#xff09;更新文档&#xff0…...

linux下的nfs概述与实验(openEuler22.03)

目录 什么是NFSNFS工作原理NFS常用文件/etc/exports文件/etc/exports格式 /var/lib/nfs/etab文件 NFS常用选项NFS配置方式1. 安装NFS和RPC2. 启动rpcbind和nfs3. 准备目录4. 配置/etc/exports并重启服务5. 连接测试服务端自我测试客户端测试 补充常用命令永久挂载注意 什么是NF…...

Degrees of Lewdity中文本地化版本完全指南:从安装到精通

Degrees of Lewdity中文本地化版本完全指南&#xff1a;从安装到精通 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localization …...

SpringBoot+Vue 毕业设计效率提升实战:从脚手架到自动化部署的全链路优化

SpringBootVue 毕业设计效率提升实战&#xff1a;从脚手架到自动化部署的全链路优化 毕业设计是每个计算机相关专业学生必须跨越的一道坎。回想我自己的经历&#xff0c;以及身边同学的故事&#xff0c;一个普遍的现象是&#xff1a;大家往往在技术选型和环境搭建上就耗费了大量…...

智能客服架构图实战:从高并发设计到生产环境部署

今天想和大家聊聊智能客服系统的架构实战。我们团队最近刚把一个老的单体客服系统重构为微服务架构&#xff0c;主要就是为了应对大促期间的高并发访问。整个过程踩了不少坑&#xff0c;也积累了一些经验&#xff0c;在这里做个梳理和分享。 先说说我们遇到的痛点。原来的系统&…...

XC泰山服务器麒麟V10系统安装全流程解析

1. 准备工作&#xff1a;了解XC泰山服务器与麒麟V10系统 在开始安装之前&#xff0c;我们需要先了解一下XC泰山服务器和麒麟V10操作系统的基本情况。XC泰山服务器是国内自主研发的高性能服务器&#xff0c;采用ARM架构处理器&#xff0c;具有高性能、低功耗的特点。而麒麟V10则…...

冥想第一千八百三十三天(1833)

1.昨天晚上电动车刹车终于修好了&#xff0c;刹车更紧了&#xff0c;今天的天气很热了&#xff0c;明天就还薄款的运动衣。 2.感谢父母&#xff0c;感谢朋友&#xff0c;感谢家人&#xff0c;感谢不断进步的自己。...

隔离变送器VS普通变送器:为什么你的PLC信号总受干扰?(实测XYS-5531抗干扰性能)

隔离变送器VS普通变送器&#xff1a;为什么你的PLC信号总受干扰&#xff1f;&#xff08;实测XYS-5531抗干扰性能&#xff09; 在工业自动化现场&#xff0c;信号干扰就像潜伏的"隐形杀手"——它不会直接摧毁设备&#xff0c;却能让控制系统频繁误动作、数据采集失真…...

密码学实战:从古典密码到AES,手把手教你用Python实现加密算法

密码学实战&#xff1a;从古典密码到AES的Python实现之旅 密码学作为信息安全的核心支柱&#xff0c;其发展历程就像一部浓缩的科技史。从凯撒大帝用过的简单字母替换&#xff0c;到如今保护我们银行卡交易的AES算法&#xff0c;加密技术始终在与破解者进行着无声的较量。本文…...

Onekey:Steam游戏清单管理的自动化解决方案 | 玩家与开发者必备工具

Onekey&#xff1a;Steam游戏清单管理的自动化解决方案 | 玩家与开发者必备工具 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 当独立游戏开发者小林第三次因为手动复制Steam App ID出错而导致…...

告别Mac!在Windows电脑上用HBuilder X和Appuploader搞定iOS测试包(附7天免费证书申请)

在Windows平台实现iOS应用打包测试的全流程指南 对于Windows平台的开发者而言&#xff0c;iOS应用打包测试一直是个令人头疼的问题。传统方式需要依赖Mac电脑和复杂的Xcode工具链&#xff0c;不仅成本高昂&#xff0c;学习曲线也陡峭。但如今&#xff0c;借助HBuilder X和Appup…...

YOLOv11自定义数据集训练避坑指南:从data.yaml配置到模型选择(实测对比v8)

YOLOv11自定义数据集训练实战&#xff1a;从数据配置到模型调优的深度解析 在计算机视觉领域&#xff0c;目标检测技术的迭代速度令人目不暇接。作为YOLO系列的最新成员&#xff0c;YOLOv11凭借其优化的网络结构和训练策略&#xff0c;正在成为工业界和学术界的热门选择。然而&…...