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文件里,启动项目ÿ…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
