MAC 本地搭建Dify环境
Dify 介绍
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎以及灵活的 Agent 框架,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。
Clone Dify 代码:
git clone https://github.com/langgenius/dify.git
前端环境搭建
安装nodejs
Web 前端服务启动需要用到 Node.js v18.x (LTS) 、NPM 版本 8.x.x 或 Yarn。选择对应操作系统的 v18.x 以上的安装包下载并安装,建议 stable 版本,已自带 NPM。
详见Mac 安装Nodejs
启动步骤
(1)进入 web 目录 cd web
(2)安装依赖包 npm install

(3)配置环境变量。在当前目录下/web下创建文件 .env.local,并复制.env.example中的内容
(4)构建代码 npm run build


(5)启动 web 服务 npm run start

(6)访问:访问 http://127.0.0.1:3000

后端环境搭建
环境准备
| Operating System | Software | Description |
|---|---|---|
| macOS 10.14 or later | Docker Desktop | Set the Docker Virtual Machine (VM) to use at least 2 virtual CPUs (vCPU) and 8 GB of initial memory. Otherwise, the installation may fail. For more information, see Install Docker Desktop on Mac. |
| Linux platforms | Docker 19.03 or later Docker Compose 1.25.1 or later | 请参阅安装 Docker 和安装 Docker Compose 以获取更多信息。 |
| Windows with WSL 2 enabled | Docker Desktop |
我的操作系统是mac,直接进行Docker Desktop安装即可。
安装Docker
Docker Desktop 下载安装即可。
安装Docker之后进行版本验证
(base) % docker-compose -versiondocker-compose version 1.29.2, build 5becea4c(base) % docker --versionDocker version 20.10.7, build f0df350
Anaconda 安装
详见MAC 安装miniconda
# 创建名为 dify 的 Python 3.10 环境
conda create --name dify python=3.10
# 切换至 dify Python 环境
conda activate dify
Python 3.10.x 安装
有些mac出厂自带python,但是版本可能不是最新的,大家可以试试自己的Mac,测试步骤是:(1)打开terminal终端(2)输入命令:python或者python3,如果出现python的版本号则代表已经安装,但还是推荐大家进行更新,无需卸载旧版本,直接安装新版本即可
Download Python | Python.org
Git 安装
brew install git
验证 git version,显示版本号就说明安装成功了。
git version
git version 2.39.3 (Apple Git-146)
PostgreSQL 安装
1.安装命令:brew install postgresql
brew install postgresql
2. 检查是否安装成功 brew list
% brew list
==> Formulae
abseil krb5 pcre2
aws-elasticbeanstalk libiconv postgresql@14
brotli libmagic protobuf
c-ares libnghttp2 protobuf-c
ca-certificates libuv python@3.10
certifi libyaml python@3.11
clamav lz4 readline
gdbm mc redis
gradle mpdecimal sqlite
icu4c node xz
jansson openjdk yara
json-c openssl@1.1
jsoncpp openssl@3==> Casks
jd-gui table-tool
3. 启动 brew services start postgresql
% brew services start postgresql
Warning: Formula postgresql was renamed to postgresql@14.
==> Successfully started `postgresql@14` (label: homebrew.mxcl.postgresql@14)
4. 检查是否启动成功 brew services list
% brew services list
Name Status User File
clamav none
postgresql@14 started rsun ~/Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist
redis started rsun ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
5. 初始化数据库
initdb /usr/local/var/postgres
6. 创建user
createuser -s postgres
Redis 安装
1.安装 brew install redis
2. 启动Redis brew services start redis
% brew services start redis
Service `redis` already started, use `brew services restart redis` to restart.
启动DIfy后端
1.进入 api 目录 cd api
2. 复制环境变量配置文件
cp .env.example .env
3. 生成随机密钥,并替换 .env 中 SECRET_KEY 的值
openssl rand -base64 42
vim .env 打开 .env文件,修改SECRET_KEY=新生成的key
4. 安装依赖包 pip3 install -r requirements.txt
5. 执行数据库迁移将数据库结构迁移至最新版本。
flask db upgrade
flask db upgrade * Tip: There are .env or .flaskenv files present. Do "pip install python-dotenv" to use them.
Error: While importing 'app', an ImportError was raised:Traceback (most recent call last):File "/Users/rsun/miniconda3/lib/python3.12/site-packages/flask/cli.py", line 245, in locate_app__import__(module_name)File "/Users/rsun/software/dify-main/api/app.py", line 6, in <module>from gevent import monkey
ModuleNotFoundError: No module named 'gevent'
解决办法:
pip install -U --force-reinstall --no-binary :all: gevent
6. 启动 API 服务
flask run --host 0.0.0.0 --port=5001 --debug

7. 启动 worker 服务
用于消费异步队列任务,如数据集文件导入、更新数据集文档等异步操作。 MacOS 启动:
celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail --loglevel INFO
总结
以上为本地源码部署启动的Dify方式。
下次进入Dify方法
启动:
1. conda activate dify
2. Redis: brew services restart redis
3. Postgresql: brew services start postgresql
4.后端程序:
cd api目录
flask run --host 0.0.0.0 --port=5001 --debug
4.前端程序:
cd web目录
启动 web 服务 npm run start
相关文章:
MAC 本地搭建Dify环境
Dify 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过…...
vue3使用tsx/jsx时报错:JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“。
vue3使用tsx/jsx时报错:JSX 元素隐式具有类型 "any",因为不存在接口 "JSX.IntrinsicElements"。 在项目中安装:npm install types/react npm install types/react...
卷价格不如卷工艺降本增效狠抓模块规范化设计
俗话说,“卷价格不如卷工艺”,这意味着在追求成本控制和效率提升的过程中,蓝鹏的领导认为蓝鹏应该更注重工艺的优化和创新,而不仅仅是价格的竞争。而模块规范化设计正是实现这一目标的有效途径。 模块规范化设计可以提高生产效率…...
[报错解决]Failed to load driver class oracle.jdbc.OracleDriver
目录 报错信息解决 报错信息 // 关键报错信息 java.lang.IllegalStateException: Failed to load ApplicationContextCaused by: java.lang.reflect.InvocationTargetExceptionat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAcc…...
前端科举八股文-CSS篇
前端科举面经-CSS篇 Css选择器的优先级css盒模型行内元素和块级元素的区别?link标签和import标签的区别讲一下弹性盒子布局的常见属性flex是哪三个属性的简写什么是BFC? 有什么作用垂直居中的方法?visibilityhidden, opacity0,display:none的区别清除浮…...
tracert命令
Tracert(跟踪路由)是路由跟踪实用程序,用于确定IP数据报访问目标所采取的路径。Tracert命令用IP生存时间(TTL)字段和ICMP错误消息,来确定从一个主机到网络上其他主机的路由。 命令格式:tracert …...
goget配置多个golang 运行环境
一台主机安装多个golang 运行环境 本环境 windows10 为 基础 mac linux也可以按照此方法操作 背景 开发不同的运维工具会用到不同版本的golang,但是开发者不能一直进行重装来处理 ,因此 需要一个工具进行golang版本的管理 go管理工具介绍 gvm (Go V…...
小程序预览或上传代码时,遇到app.json未找到某个wxml文件的解决方法
uniapp小程序,点击预览或者是上传代码,遇到app.json无法找到某个wxml文件的解决方法:清缓存 问题: message:Error: app.json: 未找到 ["subPackages"][3]["pages"][3] 对应的 subPackages4/pages/…...
VUE v-for 数据引用
VUE 的数据引用有多种方式。 直接输出数据 如果我们希望页面中直接输出数据就可以使用: {{ pageNumber }}双括号引用的方式即可。 在 JavaScript 中引用 如果你需要直接在代码中使用,直接使用变量名就可以了。 上面这张小图,显示了引用的…...
嵌入式linux学习第一天
参考正点原子Linux开发文档。记录下知识点。 Shell 基本操作 前面我们说 Shell 就是“敲命令”,那么既然是命令,那肯定是有格式的,Shell 命令的格式 如下: command -options [argument] command: Shell 命令名称。 options&…...
基于Springboot的教学辅助系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的教学辅助系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…...
CentOS7编译安装freeswitch1.10.11
由于 FreeSWITCH 更新非常快,请自己查找最新的版本,如,截止 2022年6月4日,最稳定的发行版是:1.10.11 下载源代码: wget https://files.freeswitch.org/freeswitch-releases/freeswitch-1.10.11.-release.…...
网络知识点之—QoS
QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来…...
LeetCode 每日一题 ---- 【741.摘樱桃】
LeetCode 每日一题 ---- 【741.摘樱桃】 741.摘樱桃方法:动态规划 741.摘樱桃 方法:动态规划 这是一道动态规划的题目,enmmmm,依旧是做不出来,尤其是看到困难两个标红的字体,就更不想做了,然后…...
新火种AI|挑战谷歌,OpenAI要推出搜索引擎?
作者:一号 编辑:美美 在AI革新的浪潮下,谷歌搜索迎来了越来越多的“挑战者”。 最近,据多家外媒的消息,有知情人士透露,OpenAI正计划上线一款基于ChatGPT的大型产品,将提供一个新的搜索引擎&…...
选择适用的无尘棉签:保障洁净生产环境下的高效擦拭
随着洁净生产条件的日益普及和无尘级别要求的提高,无尘擦拭用品成为广大用户追捧的必备工具。在这个领域,无尘棉签作为一种高效的擦拭工具,扮演着重要的角色。然而,面对市场上种类繁多的无尘棉签,如何选择最合适的产品…...
通信录的动态版本
一. 增加需求 在学习了动态开辟内存之后 我们对于通讯录产生了新的需求 要求我们做出一个动态增长的版本 即 随着我们储存联系人的增加 储存的空间增加 要求 : 1 初始空间为3 2 每次达到上限之后 扩容两个内存 二. 动手实施 我们首先要创建一个结构体 结构体…...
FineReport高频面试题及参考答案
FineReport是一款利用什么语言开发的报表工具? FineReport是一款基于Java语言开发的报表工具。Java是一种广泛使用的编程语言,特别适合于跨平台的软件开发。FineReport利用Java语言的诸多优势,如稳定性、安全性、可移植性和强大的网络功能&a…...
git merge 命令合并指定分支到当前分支
git merge 是一个用于合并两个分支的 Git 命令。当你在不同的分支上工作时,可能会有一些不同的更改。使用 git merge 可以将这些更改合并到一起。以下是一些常见的 git merge 用法示例: 1. 合并当前分支与另一个分支的更改 git merge <branch-name&…...
【在线OJ】Vue创建OJ管理系统
一、创建项目 vue ui命令创建项目 项目创建完成后来到项目 二、导航栏 首先创建一个根页面,让他展示在页面上 创建之后来到路由配置界面 然后安装ElementUI,来到官网找到导航栏 复制代码后粘贴到刚才创建的vue文件里,启动项目ÿ…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
