Loading...

文章背景图

Dify 开源 LLM 应用平台部署教程:零基础 Docker Compose 复现全流程

2026-10-30
0
- 字
- 分钟
|

Dify 开源 LLM 应用平台部署教程:零基础 Docker Compose 复现全流程

信息来源:Dify GitHub README / docs.dify.ai 原生部署逻辑
部署方式:官方 Docker Compose 方案
对应版本:Dify v1.18.0(2026-10-23 发布)

Dify 是目前开源圈里最"完整"的 LLM 应用开发平台之一——它把可视化工作流编排、RAG 知识库、Agent 构建、多模型接入这四件事做进了同一个控制台,应用既可以发布成 API 给后端调用,也可以直接生成 WebApp 交给前端嵌入。相比自己用 LangChain 拼一套,Dify 省掉的是"胶水代码"那几十小时;相比 Coze 这种闭源平台,它胜在数据完全在自己手里。

本文严格对照官方仓库的 docker/ 目录,走一遍从克隆、配置 .env、启动容器、初始化管理员、接入模型供应商,到创建第一个 RAG 应用的全过程,并在每个环节标注官方文档里明确写过的坑。

一、项目介绍

Dify 的核心是一套「应用(App)」抽象。每个应用有三种典型形态:

  • Chatflow(对话流):多轮对话 + 知识库检索,最常见的客服 / 问答机器人形态;
  • Workflow(工作流):纯流程编排,无对话历史,适合文档处理、批量生成这类任务;
  • Agent(智能体):给 LLM 挂上工具(搜索、代码执行、HTTP 请求),让它自主决策下一步。

底层支撑则是四大件:

  1. 可视化编排画布:拖拽节点连线就能定义 LLM 调用链路,不必写胶水代码;
  2. RAG 引擎:文档上传后自动分段、向量化、索引,检索时按相似度召回;
  3. 多模型供应商:OpenAI / Anthropic / 通义千问 / 文心一言 / 智谱 / Gemini / Ollama 等统一在设置页配置;
  4. 应用发布:一键生成 API Key 与调用示例,也可打包成嵌入前端的小组件。

二、功能拆解

  • 可视化 Prompt 编排与工作流画布(节点式拖拽)
  • 多模型接入(OpenAI / Anthropic / Ollama / 通义 / 文心 / 智谱 / Gemini 等)
  • 知识库文档向量化检索(RAG),支持分段预览与召回测试
  • 应用发布为 API / 可嵌入 WebApp,支持分享链接
  • 多用户管理、工作空间隔离、对话日志追踪与标注反馈
  • 插件体系(Plugin Daemon)扩展模型与工具
  • 沙箱(Sandbox)执行用户代码,SSRF 代理隔离出站请求

三、官方 / GitHub 链接

  • GitHub:https://github.com/langgenius/dify
  • 官方文档:https://docs.dify.ai
  • 环境变量参考:https://docs.dify.ai/en/getting-started/install-self-hosted/environment-variables
  • 常见部署问题:https://docs.dify.ai/en/getting-started/install-self-hosted/common-issues

四、环境要求

官方当前对自部署的最低要求如下:

依赖 版本要求
操作系统 Linux / macOS(Windows 需 Docker Desktop)
Docker ≥ 19.03(Linux)
Docker Compose ≥ v2.24.0
CPU ≥ 2 核
内存 ≥ 4 GiB(macOS 建议给 Docker Desktop 分配 8 GiB)
磁盘 ≥ 20 GB(含镜像与向量库数据)
端口 80(可通过 EXPOSE_NGINX_PORT 修改)

需要提前准备:Git、curl、jq(用于拉取最新 release 标签),以及至少一个可用的模型 API Key,或本机已跑起来的 Ollama。

五、部署步骤

步骤 1:克隆仓库

官方推荐直接检出最新 release 标签,而不是跟随 main 分支:

git clone --branch "$(curl -s https://api.github.com/repos/langgenius/dify/releases/latest | jq -r .tag_name)" https://github.com/langgenius/dify.git
cd dify/docker

如果机器上没有 jq,直接 git clone https://github.com/langgenius/dify.git 拉 main 分支也能跑,但生产环境建议锁定 release 标签。

步骤 2:准备环境变量

cp .env.example .env

这是最关键的一步。.env.example 里大量配置是空值或默认值,直接启动等于把密钥暴露在公网上。

必须修改的核心项:

# 1. 应用密钥(必须改成随机值,否则会话可被伪造)
SECRET_KEY=改成随机字符串
# 生成方式:openssl rand -base64 42

# 2. 数据库密码(默认是 difyai123456,人人皆知)
DB_PASSWORD=改成你自己的强密码

# 3. Redis 密码
REDIS_PASSWORD=改成你自己的强密码

# 4. 首次安装的管理员密码(不设则 /install 页面任何人可抢注)
INIT_PASSWORD=设置初始管理员密码

INIT_PASSWORD 是官方文档特别强调的一项:如果服务器在管理员创建前就暴露在公网,另一个访问者可能抢先注册第一个账号。设了它,/install 页面就需要凭密码才能进入。

关于向量库与存储的默认值:

VECTOR_STORE=weaviate      # 默认内置 Weaviate,可换 qdrant / pgvector / milvus 等
STORAGE_TYPE=opendal       # 默认 opendal,附件落在本地卷

步骤 3:启动服务

docker compose up -d
docker compose ps

默认启动的服务集由 .env 里的这一行决定:

COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql},collaboration

也就是 db_postgres、weaviate、api_websocket 这些带 profile 的服务会被自动拉起。docker compose ps 里 init_permissions 显示 Exited 是正常现象——它是一次性初始化任务,跑完就退出。其余容器应当是 Up 或 healthy。

初次拉镜像比较久(包含向量库和 Postgres),耐心等几分钟。

步骤 4:初始化管理员

浏览器打开 http://你的服务器IP/install,设置邮箱和密码,创建第一个管理员账号。

注意端口由 EXPOSE_NGINX_PORT(默认 80)和 NGINX_PORT(默认 80)共同决定,被占用就改 EXPOSE_NGINX_PORT=8080,然后访问 http://你的服务器IP:8080/install。

步骤 5:接入模型供应商

进入「设置 → 模型供应商」:

  • OpenAI / Anthropic / 通义千问 / 智谱:填 API Key 即可;
  • 本地 Ollama:如果 Ollama 跑在宿主机上,Base URL 填 http://host.docker.internal:11434,并确认 Ollama 监听 0.0.0.0:
sudo systemctl edit ollama
# 加入:[Service]
# Environment="OLLAMA_HOST=0.0.0.0:11434"
sudo systemctl restart ollama

步骤 6:创建第一个 RAG 应用

  1. 「知识库」→ 新建知识库 → 上传文档(支持 PDF / Word / Markdown / TXT 等);
  2. 选择分段策略与索引方式(高质量 / 经济),等待向量化完成;
  3. 「工作室」→ 创建应用 → 选 Chatflow → 挂上刚才的知识库 → 调好 Prompt;
  4. 预览调试,确认能正确召回片段后再发布。

六、配置文件全部参数解释

Dify 的配置分两层,理解这一点能省很多困惑:

  • docker/.env:必填项,放核心配置(数据库、Redis、密钥、对外 URL);
  • docker/envs/**:可选项,按模块拆分的模板文件(如 envs/vectorstores/qdrant.env.example)。只在需要某个可选组件时才复制对应模板、去掉 .example 后缀再改。

读取优先级:.env 优先于 envs/*.env。

常用 URL 变量(留空时单域名 Nginx 部署可自动探测):

变量 作用
CONSOLE_API_URL 控制台 API 对外地址,OAuth 回调要用
CONSOLE_WEB_URL 控制台前端地址,邮件里的链接用它
APP_WEB_URL 应用前端地址,人机交互表单用它
TRIGGER_URL 外部触发器回调地址
FILES_URL 文件预览的公开基地址
INTERNAL_FILES_URL 容器内部访问文件的地址,可能与 FILES_URL 不同

如果 OAuth 回调跳到了错误地址,或者发布的应用表单里出现 localhost,基本都是这几个变量没配对。

七、对公网暴露与 HTTPS

生产环境不要直接用明文 HTTP 暴露控制台。Compose 项目自带 Nginx 与 Certbot 配置:

# 单域名 + 自动签证书
certbot --nginx -d your-domain.com

同时务必把 .env 里的对外 URL 从 IP / localhost 改成真实域名,否则生成的链接依然指向内网。

八、功能实操教程

以「把一篇文档变成可问答的知识库」为例的最小闭环:

用户提问
  → LLM 意图判断(是否需要检索)
  → 知识库检索(按向量相似度召回 top-k 片段)
  → LLM 结合上下文生成答案
  → 引用来源标注

在画布上就是「开始 → LLM → 知识检索 → LLM → 结束」四个节点连起来的线。把 Prompt IDE 里调好的提示词固化到 LLM 节点,再从「发布 → API 访问」拿到应用密钥:

curl -X POST http://your-domain.com/v1/chat-messages \
  -H "Authorization: Bearer app-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "inputs": {},
    "query": "Dify 的向量库默认用哪个?",
    "user": "user-123",
    "response_mode": "blocking"
  }'

这样你就拥有了一个自己托管的、可被任意后端调用的问答接口。

九、全套报错故障排查

现象 原因 处理
页面一直打不开 Nginx 容器未 healthy,或宿主防火墙未放行端口 docker compose ps 看状态,检查安全组与 ufw
/install 进不去 INIT_PASSWORD 已设但你不知道 看 .env 里该项;也可临时清空再初始化
OAuth 回调地址错误 CONSOLE_API_URL 未配置 改成真实域名,并与模型供应商后台登记的回调一致
应用表单里出现 localhost APP_WEB_URL / TRIGGER_URL 未配置 补齐对应域名
文件预览 404 FILES_URL 与 INTERNAL_FILES_URL 混用 分别设置为浏览器可达地址与容器内可达地址
向量化任务一直失败 向量库容器未起或内存不足 确认 VECTOR_STORE 对应 profile 的容器在跑,给足 4GB+ 内存
插件安装失败 plugin_daemon 未就绪 docker compose logs -f plugin_daemon 看日志
容器频繁 OOM 内存不足 调大 Docker 内存,或换更轻的向量库(pgvector)
改了 .env 不生效 未重建容器 docker compose down && docker compose up -d

排查顺序建议:先 docker compose ps 看容器状态,再 docker compose logs -f --tail=200 看最近日志,不要盲改。

十、升级、回滚与卸载

每次升级都要当成一次配置变更来做,Dify 官方也这样强调。标准流程:

cd dify/docker
# 1. 备份数据卷
docker compose down
sudo tar -czf ~/dify-backup-$(date +%Y%m%d).tar.gz ./volumes/

# 2. 拉取新版本代码
git pull origin main
# 或重新 clone 目标 release 标签

# 3. 比对新旧 .env.example,把新增变量补进本地 .env
# 官方提供了 dify-env-sync.sh 辅助:先做带时间戳的备份,
# 再把新增变量追加进去且不覆盖已有值——但输出仍需人工复核

# 4. 重建
docker compose pull
docker compose up -d

回滚:切回上一个 release 标签,同时把 .env 和 volumes/ 一起还原。只回滚代码不回滚数据卷,新版本写入的数据结构可能让旧版本读不了。

卸载:

docker compose down -v      # -v 会删除数据卷,慎用
sudo rm -rf dify/volumes/

十一、商用许可与合规风险提示

Dify 采用的是修改版 Apache 2.0(Open Source License),除 Apache 2.0 的常规条款外,额外加了两条限制,商用前务必确认:

  1. 多租户限制:除非获得 Dify 官方书面授权,不能用 Dify 源码搭建多租户环境。Dify 语境下一个租户 = 一个 workspace。
  2. LOGO 与版权信息:使用 Dify 前端时,不得移除或修改控制台及应用中的 LOGO 与版权信息;仅使用后端 API 而不涉及前端的场景不受此限。

此外还有两条对贡献者的约定:官方可以调整开源协议的宽松/严格程度;你贡献的代码可能被用于官方商业业务(包括其云业务)。

另需注意:交互设计部分受外观设计专利(appearance patent)保护。

商用部署前建议:确认你的使用模式是否为多租户、是否对外提供 Dify 前端。这两条踩线的场景都需要走官方商业授权。

参考链接

  • 官方仓库:https://github.com/langgenius/dify
  • 官方文档:https://docs.dify.ai
  • Docker 部署说明:https://docs.dify.ai/en/getting-started/install-self-hosted/docker-compose
  • 环境变量参考:https://docs.dify.ai/en/getting-started/install-self-hosted/environment-variables
  • 常见问题排查:https://docs.dify.ai/en/getting-started/install-self-hosted/common-issues
  • License 全文:https://github.com/langgenius/dify/blob/main/LICENSE
评论交流

文章目录