后续会深度研究下dify,智能体的应用要更广泛一些。我也会根据自己的需求,在dify中中的功能进行增强。
项目结构
- api - 后端API服务web - 前端Web应用sdks - SDK库docker - Docker相关配置dev - 开发相关工具,主要是同步脚本等images - 项目说明的的图片资源
我先让codeBuddy帮我分析下这个工程,看下如何运行。
中间件依赖
dify的启动,一来一堆中间件
cd docker# 拷贝中间件的环境变量cp middleware.env.example middleware.env# 我在docker-compose.middleware.yaml 第一行增加name: 'dify-middleware'# 挂在PGDATA_HOST_VOLUMEREDIS_HOST_VOLUMEWEAVIATE_HOST_VOLUME# 启动docker compose -f docker-compose.middleware.yaml up -d
api项目
uv环境安装
从1.3开始dify的python环境使用uv管理了。
#安装uvpip install uv# 安装python 3.12uv python install 3.12
准备配置文件
cd dify/api# 复制出一个.envcp .\.env.example .env
替换SECRET_KEY
生成随机密钥并替换 .env 文件中的 SECRET_KEY 值
#替换秘钥,官方的是linux版本,我改成了win$key = [Convert]::ToBase64String((1..42 | ForEach-Object { Get-Random -Maximum 256 }))(Get-Content .env) -replace '^SECRET_KEY=.*', "SECRET_KEY=$key" | Set-Content temp_envMove-Item temp_env .env -Force
安装依赖
# 同步uv.lock中的一来到本地uv sync
设置python interpreter
- 打开setting选择dify的项目的Python Interpreter
2
通过Add Interpreter
的Add Local Interpreter
3
选择已经存在的4
选择路径最后点击ok执行数据库迁移
执行数据库迁移到最新版本:
uv run flask db upgrade
启动api服务
# 在dify目录下执行该命令uv --directory api run flask run --host 0.0.0.0 --port=5001 --debug# 等价于 进入api目录后执行uv run flask run --host 0.0.0.0 --port=5001 --debug
命令解释
--directory
指定工作目录为api启动worker服务
# linux 或macuv run celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace# win11uv run celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --loglevel INFO
需要注意的是,在.env中LOG_TZ默认时区为 UTC,改成中国地区LOG_TZ=Asia/Shanghai
前端项目
dify要求前端的环境是:Node.js v22 + Pnpm v10
看了下我本地的,版本比官方的要低
PS C:\Users\yxkong> node -vv20.15.1PS C:\Users\yxkong> pnpm -v9.15.4
直接执行报:
pnpm install --frozen-lockfile WARN Unsupported engine: wanted: {"node":">=v22.11.0"} (current: {"node":"v20.15.1","pnpm":"9.15.4"}) Lockfile is up to date, resolution step is skipped Packages: +1781 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ╭───────────────────────────────────────────────────────────────────╮ │ │ │ Update available! 9.15.4 → 10.11.1. │ │ Changelog: https://github.com/pnpm/pnpm/releases/tag/v10.11.1 │ │ Run "pnpm add -g pnpm" to update. │ │ │ ╰───────────────────────────────────────────────────────────────────╯
先升级下,以前用mac的时候,很简单,直接执行下面的命令即可。
npm install -g n
在win上没法执行,直接从官网下载一个覆盖安装。nodejs.org/zh-cn/downl…
pnpm安装升级到是简单。
# 升级 pnpm 到最新版npm install -g pnpm@latest# 验证版本pnpm -v10.11.1
建议大家把缓存目录都改下,要不然c盘越来越大。
安装依赖
pnpm install --frozen-lockfile
准备配置
在web目录下,直接从.env.example复制出一个.env
文件,正常不用改
cp .env.example .env
构建web服务
直接执行pnpm build
即可
(dify-api) PS E:\ai\code\dify\web> pnpm build> dify-web@1.4.1 build E:\ai\code\dify\web> next build ▲ Next.js 15.2.3 - Environments: .env Creating an optimized production build ... ✓ Compiled successfully Skipping validation of types Skipping linting ✓ Collecting page data ✓ Generating static pages (26/26) ✓ Collecting build traces ✓ Finalizing page optimization
启动web服务
在linux或mac中,启动直接执行pnpm start
即可,在win中报错
(dify-api) PS E:\ai\code\dify\web> pnpm start> dify-web@1.4.1 start E:\ai\code\dify\web> cp -r .next/static .next/standalone/.next/static && cp -r public .next/standalone/public && cross-env PORT=$npm_config_port HOSTNAME=$npm_config_host node .next/standalone/server.js 0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487AllocationBase 0x0, BaseAddress 0x71690000, RegionSize 0x80000, State 0x10000C:\Users\yxkong\scoop\apps\coreutils\current\bin\cp.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0 ELIFECYCLE Command failed with exit code 1.
win11上无法执行,我直接让codebuddy给我创建了一个兼容模式
关键点:
- 使用
fs-extra
屏蔽操作系统之间的差异性,添加依赖cd web && pnpm add fs-extra@11 --save-exact
- 新增start.js
const fs = require('fs-extra'); const { spawn } = require('child_process'); async function main() { try { // 复制.next/static目录 await fs.copy('.next/static', '.next/standalone/.next/static'); console.log('Copied .next/static successfully'); // 复制public目录 await fs.copy('public', '.next/standalone/public'); console.log('Copied public directory successfully'); // 获取环境变量 const port = process.env.npm_config_port || process.env.PORT || 3000; const hostname = process.env.npm_config_host || process.env.HOSTNAME || 'localhost'; // 启动服务器 const server = spawn('node', ['.next/standalone/server.js'], { env: { ...process.env, PORT: port, HOSTNAME: hostname }, stdio: 'inherit' }); server.on('error', (err) => { console.error('Failed to start server:', err); process.exit(1); }); } catch (err) { console.error('Error during startup:', err); process.exit(1); } } main();
- codebuddy修改了启动脚本
如果启动失败,把node_modules删除,然后重新走一遍即可。
后记
- 修改的脚本在win11上验证通过,还未在mac和linux上验证,等验证了,我提交一个prdify官方的文档还是比较健全的,照着操作,遇到的问题不太多整体上dify的代码清晰度,对于javaer来说,还是比较友好的
系列文章
dify应用
DeepSeek+dify 本地知识库:真的太香了
Deepseek+Dify本地知识库相关问题汇总
dify的sandbox机制,安全隔离限制
DeepSeek+dify 本地知识库:高级应用Agent+工作流
DeepSeek+dify知识库,查询数据库的两种方式(api+直连)
DeepSeek+dify 工作流应用,自然语言查询数据库信息并展示
聊聊dify权限验证的三种方案及实现
dify1.0.0版本升级及新功能预览
Dify 1.1.0史诗级更新!新增"灵魂功能"元数据,实测竟藏致命Bug?手把手教你避坑
【避坑血泪史】80次调试!我用Dify爬虫搭建个人知识库全记录
手撕Dify1.x插件报错!从配置到网络到Pip镜像,一条龙排雷实录
dify1.2.0升级,全新循环节点优化,长文写作案例
dify1.x无网环境安装插件
dify应用:另类的关键词检索
Dify 1.5.0 上线:这次调试功能,真的省了我一半时间
Dify × MCP 实战(一):用插件一分钟搞定MCP Server(含时间踩坑实践)
Dify × MCP 实战(二):发布工作流为 AI 工具服务,全流程配置 + Cherry 调用实战
# Dify × MCP 实战(三):结果别再堆字了!用 AntV 插件打造图表可视化工具
Dify插件实战
dify源码
dify项目结构说明与win11本地部署
Dify 深度拆解(二):后端架构设计与启动流程全景图
10分钟搞定企业级登录!Dify无缝集成LDAP实战指南
一文吃透Dify账户系统:多租户 + 多登录方式 + 权限模型全揭底
ragflow相关
DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)
DeepSeek+ragflow构建企业知识库之工作流,突然觉的dify又香了
DeepSeek+ragflow构建企业知识库:高级应用篇,越折腾越觉得ragflow好玩
RAGFlow爬虫组件使用及ragflow vs dify 组件设计对比
从8550秒到608秒!RAGFlow最新版本让知识图谱生成效率狂飙,终于不用通宵等结果了
以为发现的ragflow的宝藏接口,其实是一个天坑、Chrome/Selenium版本地狱
NLTK三重降噪内幕!RAGFlow检索强悍竟是靠这三板斧
从代码逆向RAGFlow架构:藏在18张表里的AI知识库设计哲学
解剖RAGFlow!全网最硬核源码架构解析
深度拆解RAGFlow分片引擎!3大阶段+视觉增强,全网最硬核架构解析
深度拆解RAGFlow分片引擎之切片实现
RAGFlow核心引擎DeepDoc之PDF解析大起底:黑客级PDF解析术与致命漏洞
RAGFlow 0.18.0 实战解读:从 MCP 支持到插件配置的全流程揭秘
ragflow 0.19.0 图文混排功能支持
mcp
上线3周:告警减少70%!AI巡检分级报告实战(一)
MCP不像想象的那么简单,MCP+数据库,rag之外的另一种解决方案
上线3周:告警减少85%!纯AI驱动巡检通知实战(二)无硬编码方案曝光