Dify:开源 LLM 应用开发神器,超详细安装、升级与问题解决指南
1. 基本说明
安装参考:GitCode - 全球开发者的开源社区,开源代码托管平台、Deploy with Docker Compose | Dify、https://github.com/langgenius/dify(偶尔打不开)
简介:开源的 LLM 应用开发平台,可帮助企业快速构建和部署基于 AI 的应用程序,通过整合 AI 技术和本地知识库管理能力,实现高效的内部信息管理。
特点:功能丰富,有 AI 工作流、RAG 管道、模型管理、可观测性等功能;灵活扩展,提供可定制化接口和插件机制;安全可靠,支持本地部署和私有化管理;高效便捷,通过 Docker 化部署和简单易用的界面,方便快速上手。
应用场景:适用于企业构建内部知识库,实现文档检索、问答系统、自动化工作流等场景。
对比:

2. 前置
git客户端、安装docker(用于拉取dify项目并启动项目)
[root@localhost docker]# docker -v
Docker version 26.1.4, build 5650f9b
[root@localhost docker]# git --version
git version 1.8.3.1
3. 下载安装dify
创建一个目录/usr/ai。
mkdir /usr/ai
cd /usr/ai
从github上拉取dify
[root@localhost ai]# git clone https://github.com/langgenius/dify.git
无法访问github.com,则可以尝试以下地址(不太建议,代码不是最新!),有机会可以到git下载zip保存好(但是没有.git文件夹,不能直接进行后续升级)https://github.com/langgenius/dify/archive/refs/heads/main.zip
[root@localhost ai]# git clone https://gitcode.com/gh_mirrors/di/dify.git
开始安装
# 进入/usr/ai/dify/docker目录(Dify源代码中的Docker目录)
[root@localhost ai]# cd dify/docker
# 复制环境配置文件
[root@localhost docker]# cp .env.example .env
!!!!!#这里看下问题10.2,建议先改以下.env文件。!!!!!!!!!
# 启动docker容器,可以直接:docker compose up -d
# ubuntu可能是docker-compose 中间有个“-”
[root@localhost docker]# docker compose up -d
# 执行命令后,看到类似于以下内容的输出,显示所有容器的状态和端口映射:
[+] Running 11/11
✔ Network docker_ssrf_proxy_network Created 3.0s
✔ Network docker_default Created 0.4s
✔ Container docker-sandbox-1 Started 6.4s
✔ Container docker-web-1 Started 8.5s
✔ Container docker-ssrf_proxy-1 Started 8.5s
✔ Container docker-db-1 Started 7.4s
✔ Container docker-redis-1 Started 8.7s
✔ Container docker-weaviate-1 Started 6.6s
✔ Container docker-worker-1 Started 13.4s
✔ Container docker-api-1 Started 12.8s
✔ Container docker-nginx-1 Started
# 最后,检查所有容器是否成功运行:
[root@localhost docker]# docker compose ps
# 执行命令后,看到类似于以下内容的输出:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-api-1 langgenius/dify-api:0.15.2 "/bin/bash /entrypoi…" api 11 minutes ago Up 11 minutes 5001/tcp
docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db 11 minutes ago Up 11 minutes (healthy) 5432/tcp
docker-nginx-1 nginx:latest "sh -c 'cp /docker-e…" nginx 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis 11 minutes ago Up 11 minutes (healthy) 6379/tcp
docker-sandbox-1 langgenius/dify-sandbox:0.2.10 "/main" sandbox 11 minutes ago Up 11 minutes (healthy)
docker-ssrf_proxy-1 ubuntu/squid:latest "sh -c 'cp /docker-e…" ssrf_proxy 11 minutes ago Up 11 minutes 3128/tcp
docker-weaviate-1 semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" weaviate 11 minutes ago Up 11 minutes
docker-web-1 langgenius/dify-web:0.15.2 "/bin/sh ./entrypoin…" web 11 minutes ago Up 11 minutes 3000/tcp
docker-worker-1 langgenius/dify-api:0.15.2 "/bin/bash /entrypoi…" worker 11 minutes ago Up 11 minutes 5001/tcp
重启dify
如果改了/usr/ai/dify/docker/.env配置文件内容,可能需要重启。
进入/usr/ai/dify/docker目录,通过docker compose命令可以知道如何重启dify。
4. 访问
访问http://{IP}/install,设置一个管理员账号+密码
5. 配置模型
在服务器上使用ollama list可以查到模型名称(复制出来)
[root@localhost ~]# ollama list
NAME ID SIZE MODIFIED
modelscope.cn/unsloth/DeepSeek-R1-Distill-Qwen-32B-GGUF:latest fa4803bcd315 19 GB 2 hours ago
登录Dify进入模型设置


填写配置信息,需要刚才用ollama list查到的模型名称
6. 添加应用/助手
这里需要给应用选择模型:

7. 默认数据库postgre
详见:/usr/local/ai/dify/docker/.env文件内容
DB_USERNAME=postgres
DB_PASSWORD=difyai123456
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
8. 关联知识库(可选)
如果需要调用嵌入模型处理文档以实现更精确的检索,可以帮助LLM生成高质量的答案。则还需要配置 Nomic-Embed-Text 模型:
# 从 Ollama的官方网站下载 nomic-embed-text 模型文件。
ollama pull nomic-embed-text
# 从国内模型库下载
ollama run modelscope.cn/Embedding-GGUF/nomic-embed-text-v1.5-GGUF
9. dify升级指南
9.1. 判断是否存在新版dify
可以查看版本号后面是否为绿色(绿色表示当前已为最新版本),点击版本号可以看到最新版本。


9.2. 升级
进入 docker 目录(/usr/ai/dify/docker)
cd docker
复制 docker - compose.yaml 文件并添加时间戳作为备份文件名
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
从主分支获取最新代码
# 切换到主分支
git checkout main
# 从远程主分支拉取最新代码
git pull origin main
停止服务,在 docker 目录中执行以下命令
docker compose down
备份数据
# 使用 tar 命令创建数据备份,文件名包含时间戳
tar -cvf volumes-$(date +%s).tgz volumes
升级服务
docker compose up -d
完成升级!
10. 问题
10.1. 网络冲突
修改/usr/local/ai/dify/docker/目录下的docker-compose.yaml文件:
networks:
# create a network between sandbox, api and ssrf_proxy, and can not access outside.
ssrf_proxy_network:
driver: bridge
internal: true
ipam:
config:
- subnet: 20.21.0.0/16
milvus:
driver: bridge
ipam:
config:
- subnet: 20.22.0.0/16
opensearch-net:
driver: bridge
internal: true
ipam:
config:
- subnet: 20.23.0.0/16
通过route -n检查,是否与总部ip冲突,冲突的话,先停docker compose down
再使用ip link delete xxxx(route -n找到的冲突的Iface)
可能docker配置/etc/docker/daemon.json也要改!!
10.2. python代码执行超时
修改/usr/local/ai/dify/docker/目录下的.env配置,找到对应相关配置,把超时配置调大些。
# The timeout for the worker in seconds
SANDBOX_WORKER_TIMEOUT=1500
# The sandbox service endpoint.
CODE_EXECUTION_CONNECT_TIMEOUT=100000
CODE_EXECUTION_READ_TIMEOUT=600000
CODE_EXECUTION_WRITE_TIMEOUT=100000
修改后,重启dify:
cd /usr/local/ai/dify/docker/
docker compose down
docker compose up -d
其他说明:不建议使用http插件调用接口,参数复杂的时候,不好处理json格式。
10.3. 调用接口,返回超长
调用接口,接口返回数据量较大,出现一下错误提示:
The length of output variable `result` must be less than 80000 characters
修改/usr/local/ai/dify/docker/目录下的.env配置,找到对应相关配置,把超时配置调大些。并重启dify。
CODE_MAX_STRING_LENGTH=800000
CODE_MAX_STRING_ARRAY_LENGTH=3000
CODE_MAX_OBJECT_ARRAY_LENGTH=3000
CODE_MAX_NUMBER_ARRAY_LENGTH=1000
TEMPLATE_TRANSFORM_MAX_LENGTH=800000
10.4. 镜像拉不动
docker compose up -d时,无法下载,可以尝试从文件dify/docker/docker-compose.yaml找到对应镜像地址,手动docker pull,比如:
docker pull ubuntu/squid:latest
docker pull langgenius/dify-plugin-daemon:0.0.3-local
docker pull langgenius/dify-api: 1.0.0
docker pull langgenius/dify-web:1.0.0
docker pull postgres:15-alpine
docker pull nginx:latest
docker pull redis:6-alpine
docker pull langgenius/dify-sandbox:0.2.10
docker pull semitechnologies/weaviate:1.19.0
记得可能还和/etc/docker/daemon.json有关,改了后重启docker:systemctl restart docker。
{
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "500m",
"max-file":"3"
},
"bip":"20.20.0.1/24",
"live-restore": true,
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
10.5. 内嵌报错
错误信息:
Application error: a client-side exception has occurred (see the browser console for more information).
解决办法:
1.停止dify
docker compose down
2.修改/usr/local/ai/dify/docker/docker-compose.yml,找到web部分,把原来的版本号改为:main。
web:
# image: langgenius/dify-web:0.15.3
image: langgenius/dify-web:main
3.启动
docker compose up -d
10.6. 会话重命名、UI异常问题
dify-web镜像1.0.0 备个份,重新拉,重启dify,解决左侧重命名问题、也能解决UI问题
New conversation-->自动根据用户问题命名
10.7. 知识库嵌入失败
PluginInvokeError: {"args":{},"error_type":"ConnectionError","message":"HTTPSConnectionPool(host='openaipublic.blob.core.windows.net', port=443): Max retries exceeded with url: /gpt-2/encodings/main/vocab.bpe (Caused by NameResolutionError(\"\u003curllib3.connection.HTTPSConnection object at 0x7f025bf43440\u003e: Failed to resolve 'openaipublic.blob.core.windows.net' ([Errno -3] Temporary failure in name resolution)\"))"}
暂未解决
10.8. 如何查看日志
cd dify/docker
# 全部日志
docker compose logs -f
# 最近100行日志
docker compose logs --tail=100 -f
# 错误日志
docker compose logs -f | grep "error"
11. 注意事项
11.1. 不能删除数据
切勿手动登录数据库删除数据,会出现各种问题。end_users、conversations也不能删!
12. 帮助文档
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐




所有评论(0)