Dify开源LLM应用开发平台本地部署指南
在生成式AI浪潮席卷各行各业的今天,如何快速构建一个稳定、可扩展且易于维护的AI应用,成为开发者面临的核心挑战。市面上不乏大模型接口调用工具,但真正能将提示工程、知识检索、智能体逻辑与可观测性整合为完整工作流的平台却屈指可数。
Dify 正是为此而生——它不仅仅是一个“前端+API”的简单封装,而是提供了一套从界面交互到后台调度、从数据存储到向量检索的全栈解决方案。更关键的是,它是开源的,这意味着你可以完全掌控自己的数据和系统行为,无需担心厂商锁定或隐私泄露。
本文不打算重复官方文档的碎片化说明,而是以一名实战工程师的视角,带你一步步完成 Dify 社区版的本地部署全过程:从环境准备、服务启动,到外网访问配置、模型接入与安全加固,力求让你在一天之内就拥有一个可投入试用的私有化 AI 应用开发平台。
我们选择基于 Docker Compose 的方式部署,原因很简单:轻量、可控、适合学习与中小规模使用。整个过程适用于 Ubuntu 22.04(推荐)、macOS 或 Windows WSL2 环境。
首先确认你的主机满足最低要求:
- CPU:至少双核
- 内存:≥4GB(若运行本地模型建议16GB以上)
- 存储空间:≥10GB SSD(用于数据库与缓存)
- 软件依赖:Git、Docker ≥19.03、Docker Compose Plugin
⚠️ 特别提醒:如果你计划接入 Llama3、Qwen 等本地大模型,请确保已安装 NVIDIA 驱动及 CUDA,并启用 GPU 支持。否则推理速度会非常缓慢。
接下来进入正题。
获取代码并准备配置
Dify 的部署入口位于其 GitHub 仓库中的docker目录下。执行以下命令克隆项目:
git clone https://github.com/langgenius/dify.git cd dify/docker你也可以直接下载发布包(如.tar.gz),解压后进入对应目录。对于生产环境,建议使用带版本号的 Release 包而非main分支。
然后复制示例配置文件:
cp .env.example .env这个.env文件是整个部署的“控制中心”。几个关键参数需要特别注意:
| 参数 | 建议设置 |
|---|---|
COMPOSE_PROJECT_NAME=dify | 容器命名前缀,保持默认即可 |
TAG=latest | 强烈建议改为具体版本,例如v0.15.3,避免自动更新导致兼容问题 |
HOST=localhost | 若对外提供服务,应设为服务器 IP 或域名 |
PORT=80 | 可根据需要调整,比如改为 8080 避免冲突 |
SSL_ENABLED=false | 暂时不启用 HTTPS,后续可通过反向代理实现 |
首次部署建议保留大部分默认值,先让系统跑起来再逐步优化。
启动核心服务
一切就绪后,一键拉起所有容器:
docker-compose up -d这一步会自动下载并启动多个组件:
- nginx:处理静态资源与反向代理
- api:基于 FastAPI 的后端服务,承载所有业务逻辑
- web:React 构建的前端界面
- db:PostgreSQL,持久化用户、应用与日志数据
- redis:缓存会话、任务队列
- worker:异步执行耗时任务(如文档解析)
- milvus(可选):向量数据库,支撑 RAG 功能
可以通过以下命令查看运行状态:
docker ps当看到类似如下输出时,说明服务已正常运行:
CONTAINER ID IMAGE STATUS PORTS NAMES a1b2c3d4e5f6 nginx:alpine Up 3 minutes 0.0.0.0:80->80/tcp docker-nginx-1 b2c3d4e5f6g7 langgenius/dify-api:latest Up 3 minutes docker-api-1 c3d4e5f6g7h8 langgenius/dify-web:latest Up 3 minutes docker-web-1 ...此时打开浏览器访问 http://localhost,你会被引导至初始化页面。
创建管理员账户
这是你在这个 Dify 实例中的“第一把钥匙”——务必使用强密码,并考虑后续绑定企业邮箱。
填写邮箱和密码后提交,系统会自动创建超级管理员账户,并跳转至主界面。
🔐 安全提示:初始账户权限极高,可用于创建组织、邀请成员、管理模型密钥等操作,请妥善保管登录信息。
如果未来忘记密码也不必慌张,Dify 提供了命令行重置功能:
docker exec -it docker-api-1 flask reset-password该命令会进入 API 容器并调用内置 Flask CLI 工具,按提示输入新邮箱和密码即可完成重置。
接入外部大模型服务
登录后第一件事,就是告诉 Dify:“我能用哪些模型?”
点击右上角头像 →「设置」→「模型供应商」,你可以添加多种类型的模型服务:
| 类型 | 支持平台 |
|---|---|
| 文本生成(LLM) | OpenAI、Anthropic、Ollama、Xinference、GPUStack、Azure OpenAI |
| 向量化(Embedding) | OpenAI、BAAI、OneAPI |
| 重排序(Rerank) | Jina、Cohere、BAAI |
| TTS / STT | Azure、Whisper(部分支持) |
场景一:使用 Ollama 运行本地模型
Ollama 是目前最流行的本地模型运行工具之一。假设你已经在宿主机上运行了ollama serve,并且希望 Dify 能调用llama3或qwen:7b这类模型。
在「模型供应商」中选择Ollama,填写 API 地址:
- 如果 Ollama 在宿主机运行:
http://host.docker.internal:11434 - 如果 Ollama 也在容器网络中:
http://ollama:11434
📌 注意:Docker 容器默认无法通过
localhost访问宿主机服务。host.docker.internal是 Docker Desktop 和大多数 Linux 环境下的特殊 DNS 名称,指向宿主机。
同时确保 Ollama 允许远程访问:
export OLLAMA_HOST=0.0.0.0 ollama serve保存后点击“测试连接”,成功后即可勾选可用模型并启用。
场景二:通过 OneAPI 统一管理多个模型源
企业在实际使用中往往需要对接多个模型服务商(如 OpenAI + 国内私有化部署),密钥分散、计费混乱是个常见痛点。
OneAPI 正是为解决这一问题而设计的聚合网关。它可以将不同渠道的 LLM 接口统一为标准 OpenAI 格式,并集中管理流量、额度与权限。
部署好 OneAPI 后,在 Dify 中添加类型为OpenAI API Compatible的供应商:
- Base URL:
http://<your-oneapi-host>:8080/v1 - API Key:OneAPI 分配的令牌(形如
sk-xxx)
保存后,OneAPI 中配置的所有模型都会自动同步到 Dify,极大简化了多源管理成本。
配置邮件服务(提升协作体验)
虽然不是必须项,但一旦开启团队协作,邮件功能就变得至关重要——用户邀请、密码找回都依赖它。
Dify 支持两种主流方式:SMTP 和 Resend。
方案一:使用 SMTP(通用性强)
以 QQ 邮箱为例,修改.env文件:
MAIL_TYPE=smtp SMTP_SERVER=smtp.qq.com SMTP_PORT=587 SMTP_USERNAME=your_email@qq.com SMTP_PASSWORD=your_auth_code SMTP_USE_TLS=true SMTP_FROM=your_email@qq.com注意:QQ 邮箱需开启 POP3/SMTP 服务,并使用“授权码”作为密码,而非登录密码。
方案二:使用 Resend(现代开发者首选)
Resend 是近年来兴起的开发者友好型邮件平台,API 设计简洁,集成方便。
注册账号并验证域名后,获取 API Key,然后在.env中配置:
MAIL_TYPE=resend RESEND_API_KEY=re_XXXXXXXXXXXXXXXXXXXXXX RESEND_DEFAULT_FROM=hello@yourdomain.com无论哪种方式,修改完成后都需要重启服务使配置生效:
docker-compose down && docker-compose up -d构建你的第一个 AI 应用
回到主页,点击「+ 新建应用」,你会发现四种典型模板:
- 文本生成型:单次输出,适合文案生成、摘要提取
- 对话型:支持上下文记忆,构建聊天机器人
- Agent 型:具备规划能力,可调用工具链完成复杂任务
- RAG 型:结合知识库进行精准问答
让我们动手做一个企业内部 FAQ 问答机器人。
选择「高级 RAG」模式,进入编辑界面:
- 在「知识库」模块上传 PDF、Word 或 TXT 文件(如员工手册、产品说明书)
- 设置分块策略:建议 Chunk Size = 512,Overlap = 50,平衡语义完整性与检索精度
- 选择 Embedding 模型:中文场景推荐
BAAI/bge-small-zh-v1.5 - 编写 Prompt 模板:
你是一个企业客服助手,请根据以下知识内容回答问题: {{knowledge}} 问题:{{query}} 答案:其中{{knowledge}}是系统自动注入的检索结果,{{query}}是用户提问。
保存并发布后,你可以通过嵌入网页小部件或将 API 接入现有系统,实现即插即用的知识问答能力。
这种模式的优势在于:既利用了大模型的语言理解与生成能力,又避免了幻觉问题,特别适合对准确性要求较高的企业级场景。
外网访问配置(让更多人使用)
目前 Dify 只能在本地访问。如果想让同事或客户也能使用,就需要打通外网通道。
方法一:端口映射 + 公网 IP(基础方案)
如果你的服务器有公网 IP,只需确保防火墙开放了指定端口(如 80),并通过 NAT 规则将公网 IP 映射到内网主机。
例如:
公网IP:80 → 192.168.1.100:80之后任何人访问http://<your-public-ip>即可进入平台。
❗ 风险提示:直接暴露 HTTP 服务存在安全隐患,仅限测试使用。
方法二:内网穿透(便捷调试)
对于没有公网 IP 的本地开发机,可以使用 FRP 或 Ngrok 实现临时对外暴露。
以 FRP 为例,在客户端配置frpc.ini:
[web] type = tcp local_ip = 127.0.0.1 local_port = 80 remote_port = 8080 server_addr = x.x.x.x server_port = 7000连接成功后,通过http://<frp-server-ip>:8080即可访问。
这类工具非常适合短期演示或远程调试,但不适合长期生产使用。
方法三:域名 + Nginx 反向代理(推荐生产环境)
真正的生产部署应该使用独立域名,并通过 Nginx 做反向代理,配合 Let’s Encrypt 实现免费 HTTPS。
示例配置:
server { listen 80; server_name ai.yourcompany.com; location / { proxy_pass http://127.0.0.1:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }使用 Certbot 自动申请 SSL 证书:
sudo certbot --nginx -d ai.yourcompany.com此后系统将以https://ai.yourcompany.com安全访问,符合企业级安全规范。
进阶实践建议
当你已经跑通基本流程,下面这些经验或许能帮你走得更远。
版本锁定优于 latest
永远不要在.env中使用TAG=latest。镜像更新可能导致接口变更或兼容性问题。
正确的做法是明确指定版本号:
TAG=v0.15.3这样可以在升级前充分测试,必要时还能快速回滚。
重视数据持久化
Dify 默认将数据库、Redis 和 Milvus 数据挂载到本地./data/db、./data/redis等目录。这些是核心资产,必须定期备份。
建议建立自动化脚本,每日压缩打包并上传至异地存储(如对象存储或 NAS)。
性能优化方向
- 高并发场景:可通过增加
api和worker容器实例实现水平扩展 - RAG 性能瓶颈:内置 Milvus 适合轻量使用;重度检索建议替换为独立部署的 Milvus 或 PGVector
- GPU 加速:确保 Ollama/Xinference 已正确加载 CUDA 驱动,模型加载时指定
--gpu参数
安全加固清单
- 修改
.env中的SECRET_KEY,防止会话伪造 - 关闭调试模式:
DEBUG=False - 在反向代理层启用 WAF(如 ModSecurity)防御常见攻击
- 对 API 密钥设置调用频率限制,防止单点滥用
Dify 的价值不仅在于“能做什么”,更在于它如何重新定义了 AI 应用的开发范式——从一行代码都不写,到构建具备真实业务价值的智能系统,中间的距离被前所未有地缩短了。
它不是玩具,也不是简单的 UI 封装,而是一整套面向未来的 AI 工程基础设施。无论是初创团队用来快速验证 MVP,还是大型企业构建统一的 AI 中台,Dify 都展现出了极强的适应性和扩展潜力。
更重要的是,它是开源的。这意味着你不仅可以自由使用,还可以参与贡献、定制功能、甚至将其嵌入自有产品体系之中。
现在,你已经有了一个属于自己的 Dify 实例。下一步,不妨尝试接入更多模型、构建复杂的 Agent 流程,或者将它集成进 CRM、ERP 等现有系统,真正释放生成式 AI 的生产力。
🚀 Define and Modify —— 在不断迭代中,创造出真正有价值的智能产品。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考