1. Dify 简介
Dify 是一个开源的大模型(LLM,Large Language Model)应用开发平台,提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,旨在通过低代码/无代码方式简化生成式 AI 应用的构建,仅通过拖拉拽和配置即可构建复杂的企业级人工智能应用。此外也支持通过其插件体系、API 调用等方式编程开发扩展实现更为复杂的功能需求。
在 deepseek-r1
带动起来的 AI 热潮下,大家对部署私有 deepseek 模型和搭建本地知识库、AI智能体具有前所未有的热情。在众多支持知识库、工作流和智能体的应用框架中,Dify 因其安装使用简单、配置灵活、可玩性高等特点而独树一帜。
近期 Dify 发布了全新的 1.0.0 版本。本文将介绍 Dify 1.x 版本基于 docker 的私有化安装配置及使用过程中遇到的主要问题的解决方法。
2. 基于 docker 部署 Dify
请先确保已安装了 git
和 docker
(企业内也可以安装 podman
替代 docker
)。可参考:
- Git 安装: https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
- Docker Desktop 安装: https://www.docker.com
- Podman 安装(Docker替代): https://podman.io/docs/installation
然后参考执行如下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 示例,进入工作目录 cd ~ /workspace # 拉取 Dify 仓库源码 git clone https: //github .com /langgenius/dify .git # 将 `dify/docker` 目录复制出来 # 因为后文会涉及修改 `docker-compose.yaml` 文件,故不修改仓库中文件,方便后续拉代码升级 cp -r dify /docker dify-docker cd dify-docker # 复制方式创建环境变量配置文件 .env cp . env .example . env # 拉取镜像 -- 国内用户可能会失败,可参考下一章节内容解决 docker-compose pull |
新建 run.sh
文件,用于快速启停 Dify 服务:
1 2 3 | echo "docker-compose down && docker-compose up -d" > run.sh # 赋予可执行权限 chmod +x run.sh |
执行 ./run.sh
启动 Dify 服务。然后可通过浏览器访问 http:<ip>:<nginx 端口>
,如:http://192.168.1.100:8001
。
以上即为基于 docker 安装和配置并启动 Dify 的全部步骤。
但是如果你是国内用户且没有开代理上网方式,那么你可能会遇到一些问题,可参考下一章节内容解决,主要是通过修改 docker-compose.yaml
和 .env
文件的部分配置以适应国内网络环境。
3. Dify 1.x 版本国内安装的主要问题及解决
首先你应掌握基于 docker 部署的服务通过查看日志分析排查问题的基本方法:
1 2 3 4 5 6 7 8 | # 查看当前运行中的容器服务 docker ps # 以 watch 模式查看某个容器打印的日志 docker logs -f <容器ID> # 示例: docker logs -f dify-docker_dify-api-1 docker logs -f dify-docker_dify-plugin-daemon-1 |
3.1 Docker 镜像拉取失败的问题及解决
- 设置
docker
镜像源为hub.mirrorify.net
- 编辑
docker-compose.yaml
文件- 搜索并替换
ghcr.io
为ghcr.mirrorify.net
- 搜索并替换
quay.io
为quay.mirrorify.net
- 搜索并替换
docker.elastic.co
为elastic.mirrorify.net
- 搜索并替换
然后再执行 docker-compose pull
拉取镜像。
3.2 启动报 80 端口禁止绑定的问题及解决
这主要是因为我使用了 Podman。Podman 是以非 root 用户身份启动容器服务的,非 root 用户默认只能使用 1024 以上端口。使用 sysctl
命令可以修改该起始端口,示例:
1 2 3 4 | # 临时生效 sysctl net.ipv4.ip_unprivileged_port_start=0 # 永久生效 echo "net.ipv4.ip_unprivileged_port_start=0" >> /etc/sysctl .conf |
也可以编辑 .env
文件,搜索并修改 NGINX 映射端口号为 1024 以上。示例:
1 2 | EXPOSE_NGINX_PORT=8001 EXPOSE_NGINX_SSL_PORT=4443 |
3.3 Dify 插件市场模型、插件安装失败的问题及解决
Dify 1.0 版本上线了全新的插件市场,所有的模型、工具和扩展都可通过插件模式进行安装。当然如果有开发能力,也可以开发自己的插件,这无疑为 Dify 提供了非常大的个性化定制潜力,可玩性也高了不少。Dify 1.0 的插件市场功能比较完整,但细节还不够完善,网络环境较差的情况下使用体验较差。
Dify 插件的底层是 Python 代码开发,插件依赖的第三方库则需要在安装时实时下载。
由于众所周知的原因,国内用户在安装插件时,大概率会遇到因网络问题下载慢、无法成功安装等现象。可以通过设置 pip 使用国内镜像源解决。
在 docker-compose.yaml
中查找plugin_daemon
,在其下方的 environment
下新增内容参考如下(注意与原有内容对比,仅添加新增部分即可):
1 2 3 4 5 6 7 8 9 10 11 12 | plugin_daemon: image: langgenius/dify-plugin-daemon : 0.0.3-local restart: always environment: # 设置超时时间为 300 秒 PYTHON_ENV_INIT_TIMEOUT: $ { PYTHON_ENV_INIT_TIMEOUT : -300 } # 设置 pip 使用国内镜像源 PIP_MIRROR_URL: $ { PIP_MIRROR_URL : -https : //pypi.tuna.tsinghua.edu.cn/simple } volumes: - ./volumes/plugin_daemon : /app/storage # 主要是持久化缓存 .cache/pip - ./volumes/plugin_daemon/ .cache: /root/.cache |
此外还需修改 .env
文件,在末尾添加如下环境变量配置:
1 2 3 4 5 | MARKETPLACE_URL=https: //marketplace .dify.ai PLUGIN_WORKING_PATH= /app/storage/cwd PYTHON_ENV_INIT_TIMEOUT=300 PIP_MIRROR_URL=https: //pypi .tuna.tsinghua.edu.cn /simple |
相关建议参考:
- 插件安装过程可能会比较久,且Web界面上没有任何提示。可通过查看
dify-plugin-daemon
容器的 docker 日志,了解是否发生了异常等更多信息。 - 如果已经安装插件失败过,然后通过以上方式操作仍然无法解决插件安装问题,可删除
dify-docker/volumes
目录后重启服务再试(如果已有历史数据请谨慎操作,所有私有数据均在该目录下)。 - 若通过 Web 界面插件市场安装总是失败,可尝试通过点击详情,到详情页下载后,再回来通过“本地插件”上传方式进行安装。
3.4 使用 Podman 启动报错的问题及解决
Podman
是当前最佳的 docker
开源替代品,由于因授权问题公司禁止使用 docker-desktop,所以我日常是使用 Podman 替代 Docker。
关于 Podman
的安装与使用可参考该文:
在使用 podman-compose
启动服务时遇到了 network
相关的报错:
1 | RuntimeError: missing networks: default |
经排查分析解决方法为,编辑 docker-compose.yaml
文件,搜索 networks
并在其下方新增如下内容即可:
1 2 3 4 5 6 7 8 | sandbox: networks: - ssrf_proxy_network - default # 需新增的内容 networks: default: # 需新增的内容 driver: bridge # 需新增的内容 |
- 解决参考:https://github.com/langgenius/dify/issues/14491
3.5 工作流执行自定义代码报错:Run failed: error: operation not permitted
问题现象:在 Dify 工作流中配置执行自定义 Node.js 或 Python 代码时报错,提示 Run failed: error: operation not permitted
。
可参考这篇文章了解原因及解决办法:https://lzw.me/a/dify-sandbox-allowed_syscalls.html
4. Dify 1.x 的模型下载、配置及使用
新版本的所有模型配置都通过插件形式提供。首先需要下载和安装模型,然后配置它。推荐在插件市场下载安装如下几个模型:
ollama
:如果你本地安装了ollama
并拉取了本地模型,那么就需要它。当前版本的ollama
插件添加模型比较简易,不会自动从 API 获取模型列表,而且只支持配置LLM
和EMBEDDING
类型的模型。这点应该后续有较大优化空间。OpenAI
:当前基本上第三方模型供应商提供的API都与OpenAI
是兼容的,所以如果你使用了第三方模型,但找不到其对应插件,安装这个来配置就没错。- 例如我这里配置为了
AICNN
的模型,参见上图示例。
- 例如我这里配置为了
硅基流动
:提供了 63 种模型可选,新用户注册送 14 元赠金
。
可以通过添加第三方模型供应商的 API 以使用更为强大的大模型能力。当前有如下几个注册送免费额度的供应商:
- 硅基流动(
邀请注册送14元赠金
)https://cloud.siliconflow.cn/i/hDM9hDR6 - 派欧算力云(
邀请注册送50元赠金
)https://ppinfra.com/user/register?invited_by=XRMRL5 - 智谱AI(
邀请注册送2000万Tokens,每月可邀请10名新用户
)https://www.bigmodel.cn/invite?icode=TY4kHajmj2PV8KLUkl97jP2gad6AKpjZefIo3dVEQyA%3D - 火山方舟DeepSeek(
邀请注册送15元
)https://volcengine.com/L/i55LvAaP/ - AICNN(
提供Grok3/Claude 3.7 sonnet。邀请注册送8888积分,每日签到送积分
)http://aicnn.cn/loginPage?aff=4MvsDBGxfZ
在完成安装和配置之后,就可以通过在“工作室”创建个性化 AI 应用了。下图是一个较为复杂的投资工具工作流示例,它包含了数十个工作步骤,通过它可以看出工作流模式是相当具有灵活性了:
值得一提的是,Dify 支持 DSL 导入导出,可以方便的将工作流导出为 DSL 文件,然后分享给他人,他人再通过 DSL 文件导入即可。下面是一些开源的 Dify DSL 仓库,若有兴趣可以下载和参考,学习他人是如何创建和使用的:
- https://github.com/wwwzhouhui/dify-for-dsl.git
- https://github.com/svcvit/Awesome-Dify-Workflow.git
- https://github.com/aircrushin/awesome-dify-workflow.git
- https://github.com/BannyLon/DifyAIA.git
- https://github.com/din4e/DifyDSL4RedTeam.git
5. 总结与参考
总体来讲,Dify 1.0 版本最大的变化是引入了全新的插件体系,并提供了插件市场,将大厂模型适配、工具、扩展等从核心框架抽离为独立的插件,从而使得其个性化定制有了非常大的空间。通过安装官方插件可满足低代码/无代码方式快速搭建 AI 原生应用,也可通过开发定制私有插件扩展更为复杂的个性化能力需求。这种模式也为后续引入付费插件提供了想象空间。
不过当前的插件体系细节还不够完善,网络环境一般的情况下体验较差,只是安装和配置插件的过程就会消耗掉许多的时间。已在使用低版本的同学建议多等一等,可以通过全新安装体验后再决定是否值得升级。
提示:关注公众号志文工作室
并回复 dify
,可获取已修改适配的 docker-compose.yaml
和 .env
文件网盘下载。
我发现模型添加不上去,有遇到吗?