1. 基本说明

官网:Dify.AI · 生成式 AI 应用创新引擎

安装参考:GitCode - 全球开发者的开源社区,开源代码托管平台Deploy with Docker Compose | Difyhttps://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).

解决办法:

参考Dify客户端异常error: a client-side exception has occurred (see the browser console for more i_application error: a client-side exception has occ-CSDN博客

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. 帮助文档

接入大模型 | Dify

Docs

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐