Dify本地部署指南:基于Docker快速搭建
在大模型技术席卷全球的今天,越来越多开发者和企业开始探索如何将 LLM(大语言模型)真正落地为可用的应用。然而,从零搭建一个支持 Prompt 工程、知识库检索、Agent 能力的系统,往往意味着复杂的后端架构、繁琐的服务编排与持续的维护成本。
有没有一种方式,能让我们跳过底层开发,直接进入“构建 AI 应用”的阶段?
答案是肯定的 ——Dify就为此而生。
它不是一个简单的前端界面,也不是仅限于调用 API 的玩具平台,而是一个集成了可视化编排、RAG 检索增强、AI Agent 设计、全链路调试与发布能力于一体的开源 AI 应用开发引擎。更关键的是,它支持一键 Docker 部署,让你几分钟内就能在本地跑起一套完整的 AI 开发环境。
这正是我们接下来要做的事:不依赖云服务、不写一行部署脚本,仅通过docker-compose,把 Dify 完整地搬进你的机器。
要运行 Dify,核心依赖是Docker和Docker Compose。这两个工具几乎是现代微服务部署的事实标准,尤其适合像 Dify 这样由多个组件构成的系统 —— 前端、API 服务、数据库、缓存、向量库……全都封装在容器里,互不干扰又协同工作。
如果你还没装 Docker,别担心,过程并不复杂。
以常见的 Ubuntu 系统为例:
sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release # 添加官方 GPG 密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 添加仓库源 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装 Docker 引擎 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io安装完成后,验证一下版本:
sudo docker --version看到类似Docker version 24.0.7的输出,说明基础环境已经就位。
接着是Docker Compose,它是管理多容器应用的关键。虽然有些发行版会随 Docker 自带compose插件,但为了确保兼容性,建议手动安装独立二进制文件:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \ -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose检查是否生效:
docker-compose --version到这里,你已经完成了所有前置准备。不需要配置网络策略、不用提前拉镜像、也不用预先启动数据库 —— 接下来的每一步都将由 Docker 自动完成。
现在正式进入 Dify 的部署流程。
尽管 Dify 提供了预构建镜像,官方仍推荐使用源码中的docker目录进行部署。原因很简单:便于后续自定义扩展,比如修改环境变量、挂载持久化路径、集成私有模型等。
先克隆项目:
git clone https://github.com/langgenius/dify.git cd dify进入目录后查看docker/子目录:
ls -l docker/你会看到几个关键文件:
docker-compose.yml:整个系统的编排蓝图middleware.env.example:环境配置模板volumes/:用于数据持久化的本地目录结构示例
下一步是初始化配置文件:
cp docker/middleware.env.example .env这个.env文件控制着数据库连接、Redis 地址、外部模型接入等核心参数。默认配置已适配本地开发场景,大多数情况下无需修改即可运行。
但如果你想接入自己的大模型服务,就需要在这里填入对应凭证。例如启用 OpenAI:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx或者连接阿里云通义千问:
QWEN_API_KEY=your-access-key MODEL_PROVIDER=qwen甚至可以指向本地运行的 Ollama 实例:
OLLAMA_API_BASE_URL=http://host.docker.internal:11434⚠️ 注意:容器内部访问宿主机服务时,不能使用
localhost,需替换为host.docker.internal(Linux 上可能需要额外配置 DNS)。
保存并退出编辑器,配置就算完成了。
一切就绪,执行启动命令:
docker-compose -f docker/docker-compose.yml up -d这条命令会读取指定路径下的编排文件,在后台启动所有服务。首次运行时,Docker 会自动拉取以下镜像:
difyai/web: 前端界面(React)difyai/api-server: 核心后端服务(Python + FastAPI)postgres:15: 用户数据、应用配置存储redis:7: 缓存与异步任务队列milvus:2.3(可选): 向量数据库,支撑 RAG 功能
整个过程大约持续 1~2 分钟,取决于网络速度和硬件性能。
等待期间你可以喝杯咖啡,顺便思考一下待会儿要创建什么样的 AI 应用。
时间一到,执行:
docker ps你应该能看到类似这样的输出:
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES abc123def456 difyai/web:latest "/docker-entrypoint.…" Up 2 minutes 0.0.0.0:3000->80/tcp dify-web def456ghi789 difyai/api-server:latest "gunicorn app:app -b…" Up 2 minutes 0.0.0.0:5001->5001/tcp dify-api xyz789uvw123 postgres:15 "docker-entrypoint.s…" Up 2 minutes 5432/tcp dify-postgres ...各服务对应的端口如下:
| 服务 | 端口 | 用途 |
|---|---|---|
| Web UI | 3000 | 浏览器访问入口 |
| API Server | 5001 | 所有接口请求处理 |
| PostgreSQL | 5432 | 持久化存储用户、应用、会话信息 |
| Redis | 6379 | 支持缓存、消息队列、任务调度 |
只要状态显示为Up,且没有频繁重启,基本就可以确认服务正常运行了。
打开浏览器,输入:
http://localhost:3000如果是远程服务器部署,请将localhost替换为公网 IP 或域名:
http://<your-ip>:3000首次访问会触发初始化流程:
创建管理员账户
- 输入邮箱(如 admin@dify.ai)
- 设置密码
- 点击“创建账户”登录系统
- 返回登录页
- 使用刚注册的账号登录进入主界面
- 成功跳转至工作台
- 可见“创建新应用”按钮
此时,Dify 已完全就绪,你可以开始构建属于自己的 AI 应用了。
不妨动手创建第一个应用来验证部署效果。
点击「新建应用」→ 选择「文本生成」类型 → 输入名称(如“我的首个AI助手”)→ 创建
进入编辑器后,左侧是对话预览区,右侧是 Prompt 编排面板。这是 Dify 最强大的地方之一:你不再需要去代码里硬编码提示词,而是可以直接拖拽、调整、实时测试。
试着把默认提示词改成:
你是一个乐于助人的AI助手,擅长用中文回答用户问题。然后点击右上角「保存并发布」。
回到左侧面板,输入一句:
你好,你是谁?如果收到类似回复:
我是你的AI助手,我可以帮助你解答各种问题。那就说明一切正常!🎉
这不是简单的 API 转发,而是经过 Dify 完整处理链路的结果:前端请求 → API Server 解析 → 构造 Prompt → 调用模型 → 返回流式响应 → 渲染到页面。每一个环节都在你的掌控之中。
当然,这只是冰山一角。
当你想把它用于生产环境时,还有几项值得考虑的优化点。
首先是反向代理与 HTTPS。直接暴露3000端口显然不适合线上使用。推荐用 Nginx 做一层转发,并配合 Let’s Encrypt 免费证书实现 HTTPS 加密。
示例配置:
server { listen 80; server_name dify.yourdomain.com; location / { proxy_pass http://127.0.0.1:3000; 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 证书,轻松实现安全访问。
其次是外接大模型服务。Dify 支持主流平台开箱即用:
| 平台 | 是否支持 | 接入方式 |
|---|---|---|
| OpenAI (GPT-3.5/GPT-4) | ✅ | 填写 API Key |
| Anthropic (Claude) | ✅ | 填写 API Key |
| 阿里云通义千问 | ✅ | 使用 AccessKey |
| 百度文心一言 | ✅ | 配置 API Key 与 Secret Key |
| 本地 Ollama 模型 | ✅ | 设置 API 地址为http://host.docker.internal:11434 |
这意味着你可以根据需求灵活切换:测试阶段用 GPT 快速验证逻辑;上线后换成私有部署的 Qwen 或 Llama3,兼顾性能与数据安全。
最后是数据持久化与备份。
Dify 默认将重要数据挂载到本地目录:
- 数据库:
./docker/volumes/postgres - 文件存储(MinIO):
./docker/volumes/minio - Redis 快照:
./docker/volumes/redis
这些目录一旦丢失,所有应用配置、知识库上传记录都会清零。因此建议定期打包备份,或结合 rsync、rclone 等工具做自动化同步。
部署过程中难免遇到问题,以下是常见故障及应对方法:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 页面无法访问(Connection Refused) | 服务未成功启动 | 执行docker-compose -f docker/docker-compose.yml logs api查看日志 |
| 提示“数据库连接失败” | PostgreSQL 初始化异常 | 删除volumes/postgres目录后重新启动 |
| 登录后空白页 | 浏览器缓存或 JWT 失效 | 清除缓存或使用无痕模式重试 |
| 模型调用超时 | 外部 API 不可达或网络受限 | 检查.env中模型地址及服务器防火墙设置 |
排查时最有效的命令是查看日志:
docker logs dify-api # 查看后端服务日志 docker logs dify-web # 查看前端容器输出通常错误信息会明确指出问题所在,比如密钥无效、连接超时、权限不足等。
回过头来看,Dify 的价值不仅在于“能用”,更在于“好用”。
它把原本分散在多个系统的功能——Prompt 调试、知识库管理、Agent 规划、版本发布——整合进一个统一平台,极大降低了 AI 应用的构建门槛。无论是个人开发者想快速验证想法,还是团队要做企业级智能客服,都能从中受益。
更重要的是,它是开源的、可自托管的。你不必担心数据被上传到第三方服务器,也不用受制于厂商的定价策略。所有的控制权,都在你自己手里。
这次部署只是一个起点。接下来你可以尝试:
- 上传 PDF、Word 文档,构建基于私有知识库的问答机器人;
- 设计具备记忆和规划能力的 AI Agent,让它自动完成多步任务;
- 集成微信、钉钉、飞书等渠道,让 AI 助手真正走进业务流程。
而这一切,都不再需要从零造轮子。
🔗 更多使用文档详见:https://docs.dify.ai
现在,轮到你了 —— 准备好开启你的 AI 应用开发之旅了吗?
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考