从零搭建 Dify:Docker 部署、源码配置与上线实战指南
Dify Docker部署教程|附源码
随着大模型应用的快速普及,越来越多的团队开始尝试构建自己的 AI 应用,例如智能客服、知识库问答、工作流自动化、内容生成助手、企业内部 Copilot 等。如果从零开始开发,不仅需要处理模型接入、Prompt 编排、向量数据库、文件解析、用户管理、API 调用等复杂问题,还要考虑后续部署和运维成本。
Dify 正是为了解决这些问题而出现的开源大模型应用开发平台。它提供了可视化的应用编排能力,支持聊天助手、文本生成应用、Agent、工作流、知识库、插件工具、API 发布等功能。对于企业或个人开发者来说,Dify 可以大幅降低大模型应用的开发门槛。
本文将详细介绍如何使用 Docker 部署 Dify,并附带常用源码配置说明。文章适合 Linux 服务器部署场景,也适合本地学习和测试使用。
一、Dify 简介
Dify 是一个开源的 LLMOps 平台,主要用于快速构建和部署基于大语言模型的应用。它支持多种模型供应商,例如 OpenAI、Anthropic、Azure OpenAI、通义千问、文心一言、智谱 AI、DeepSeek,以及本地模型服务等。
Dify 的核心能力包括:
- 可视化创建 AI 应用
- 支持聊天助手、文本生成、Agent、Workflow 工作流
- 支持知识库和 RAG 检索增强生成
- 支持多模型供应商配置
- 支持 API 发布和应用嵌入
- 支持团队协作与权限管理
- 支持 Docker 快速部署
- 支持二次开发和私有化部署
对于希望快速落地 AI 应用的开发者来说,Dify 的优势非常明显:它既可以作为低代码平台直接使用,也可以作为开源项目进行二次开发。
二、部署前准备
在正式部署 Dify 之前,需要准备一台服务器或本地环境。推荐使用 Linux 系统,例如 Ubuntu、Debian、CentOS、Rocky Linux 等。
1. 服务器配置建议
如果只是本地测试或小规模使用,可以选择较低配置:
| 使用场景 | CPU | 内存 | 磁盘 |
|---|---|---|---|
| 本地学习测试 | 2 核 | 4GB | 20GB |
| 小团队试用 | 2-4 核 | 8GB | 50GB |
| 生产环境 | 4 核以上 | 16GB 以上 | 100GB 以上 |
需要注意的是,Dify 本身不一定需要 GPU,因为它主要负责应用编排、知识库、API 服务等功能。如果你使用的是 OpenAI、DeepSeek、通义千问等云端模型服务,则服务器无需 GPU。如果你要接入本地大模型,则需要额外部署模型推理服务,例如 Ollama、vLLM、Xinference 等。
2. 软件环境要求
部署 Dify 通常需要以下软件:
- Git
- Docker
- Docker Compose
建议使用较新的 Docker 版本,以避免兼容性问题。
查看 Docker 版本:
docker -v
查看 Docker Compose 版本:
docker compose version
如果命令无法执行,说明还没有安装 Docker 或 Docker Compose。
三、安装 Docker 和 Docker Compose
以下以 Ubuntu 系统为例进行说明。
1. 更新系统软件包
sudo apt update
sudo apt upgrade -y
2. 安装基础依赖
sudo apt install -y ca-certificates curl gnupg git
3. 安装 Docker
可以使用 Docker 官方安装脚本:
curl -fsSL https://get.docker.com | bash
安装完成后,启动 Docker:
sudo systemctl enable docker
sudo systemctl start docker
查看 Docker 是否安装成功:
docker -v
如果希望当前用户无需每次都输入 sudo,可以将当前用户加入 docker 用户组:
sudo usermod -aG docker $USER
执行后需要重新登录终端才能生效。
4. 检查 Docker Compose
现在新版 Docker 默认集成了 Docker Compose 插件,可以执行:
docker compose version
如果能正常显示版本号,说明 Docker Compose 可用。
四、获取 Dify 源码
Dify 是开源项目,可以直接从 GitHub 获取源码。
git clone https://github.com/langgenius/dify.git
进入项目目录:
cd dify
Dify 的 Docker 部署文件一般位于 docker 目录中:
cd docker
查看目录内容:
ls
通常可以看到类似以下文件:
docker-compose.yaml
.env.example
nginx
volumes
middleware.env.example
其中比较重要的是:
docker-compose.yaml:Docker Compose 编排文件.env.example:环境变量示例文件nginx:Nginx 配置目录volumes:数据持久化目录middleware.env.example:中间件配置示例
五、配置环境变量
进入 docker 目录后,复制环境变量文件:
cp .env.example .env
然后编辑 .env 文件:
vim .env
如果你不熟悉 vim,也可以使用 nano:
nano .env
.env 文件中包含了大量配置项,例如服务端口、数据库配置、Redis 配置、向量数据库配置、Nginx 配置、密钥配置等。初次部署时,大多数配置可以保持默认值,但以下几类配置建议重点检查。
六、关键配置说明
1. 应用访问地址
在 .env 文件中,通常会有类似以下配置:
CONSOLE_WEB_URL=
APP_WEB_URL=
SERVICE_API_URL=
如果你是在本地测试,可以先保持为空或使用本地地址。
如果你部署在服务器,并准备通过域名访问,可以配置为:
CONSOLE_WEB_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
如果暂时没有域名,使用服务器 IP 也可以:
CONSOLE_WEB_URL=http://你的服务器IP
APP_WEB_URL=http://你的服务器IP
SERVICE_API_URL=http://你的服务器IP
2. 对外访问端口
Dify 默认通过 Nginx 暴露服务,常见端口是 80 或 443。在 .env 中可能会看到:
EXPOSE_NGINX_PORT=80
EXPOSE_NGINX_SSL_PORT=443
如果服务器的 80 端口已经被占用,可以修改为其他端口,例如:
EXPOSE_NGINX_PORT=8080
访问时就需要使用:
http://服务器IP:8080
3. 数据库配置
Dify 默认会通过 Docker Compose 启动 PostgreSQL 数据库。初次部署一般不需要手动修改数据库配置。
常见配置如下:
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
生产环境建议修改默认数据库密码:
DB_PASSWORD=你的强密码
密码建议包含大小写字母、数字和特殊字符。
4. Redis 配置
Redis 用于缓存、任务队列等场景。默认由 Docker Compose 启动:
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
生产环境也建议设置 Redis 密码:
REDIS_PASSWORD=你的Redis密码
5. 向量数据库配置
Dify 支持多种向量数据库,例如 Weaviate、Qdrant、Milvus、PGVector 等。默认部署通常会启用某一种向量数据库。
在 .env 中可能会看到:
VECTOR_STORE=weaviate
如果你只是快速体验,保持默认即可。如果生产环境已有向量数据库,也可以改为对应类型,并配置连接信息。
常见示例:
VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
或者使用 Qdrant:
VECTOR_STORE=qdrant
QDRANT_URL=http://qdrant:6333
不同版本的 Dify 配置项可能略有差异,建议以项目中的 .env.example 为准。
6. 密钥配置
Dify 中可能包含类似以下配置:
SECRET_KEY=
如果为空,建议生成一个随机密钥并填入。
可以使用以下命令生成:
openssl rand -base64 42
然后配置:
SECRET_KEY=生成的随机字符串
密钥用于应用安全相关功能,生产环境务必不要使用默认值。
七、启动 Dify
配置完成后,在 dify/docker 目录下执行:
docker compose up -d
该命令会自动拉取所需镜像,并启动相关容器。第一次启动需要下载镜像,耗时取决于网络环境。
查看容器状态:
docker compose ps
如果所有服务状态为 running 或 healthy,说明启动成功。
也可以查看日志:
docker compose logs -f
如果只想查看某个服务的日志,例如 API 服务:
docker compose logs -f api
查看 Web 服务日志:
docker compose logs -f web
八、访问 Dify 控制台
启动成功后,可以通过浏览器访问:
http://服务器IP
如果你修改了端口,例如使用 8080:
http://服务器IP:8080
首次访问时,Dify 会引导你创建管理员账号。按照页面提示填写邮箱、用户名和密码即可。
创建完成后,即可进入 Dify 控制台。
在控制台中,你可以完成以下操作:
- 创建聊天助手
- 创建文本生成应用
- 创建知识库
- 上传文档
- 配置模型供应商
- 发布 API
- 创建 Workflow 工作流
- 查看应用调用日志
九、配置模型供应商
Dify 本身不是模型推理服务,它需要接入模型供应商才能完成文本生成或对话能力。
进入 Dify 控制台后,可以在模型供应商页面添加模型。不同版本页面名称可能略有差异,一般在:
设置 → 模型供应商
1. 配置 OpenAI
如果使用 OpenAI,可以填写:
Provider: OpenAI
API Key: sk-xxxx
Model: gpt-4o-mini / gpt-4o / gpt-3.5-turbo 等
如果你使用的是兼容 OpenAI API 的第三方服务,也可以配置 API Base URL。
2. 配置 DeepSeek
如果使用 DeepSeek,可以配置 DeepSeek 的 API Key,并选择对应模型,例如:
deepseek-chat
deepseek-reasoner
3. 配置本地模型
如果你使用 Ollama,可以先在服务器上启动 Ollama:
ollama serve
然后拉取模型:
ollama pull llama3
如果 Dify 运行在 Docker 容器中,访问宿主机服务时要注意网络地址。Linux 下可以根据实际情况使用宿主机 IP,或者将 Ollama 也通过 Docker Compose 加入同一网络。
常见配置示例:
API Base URL: http://宿主机IP:11434
Model: llama3
如果使用 vLLM、Xinference、LM Studio 等,只要它们提供 OpenAI-compatible API,也可以在 Dify 中以兼容接口方式接入。
十、创建一个简单聊天应用
完成模型配置后,可以创建一个聊天助手测试。
操作流程如下:
- 进入 Dify 控制台
- 点击“创建应用”
- 选择“聊天助手”
- 输入应用名称,例如“智能问答助手”
- 选择已配置的大模型
- 编写系统提示词
- 点击调试运行
- 发布应用
示例系统提示词:
你是一个专业、耐心、准确的中文智能助手。
请使用简洁清晰的中文回答用户问题。
如果遇到不确定的信息,请明确说明不确定,不要编造。
调试成功后,可以点击发布,Dify 会生成应用访问链接和 API 调用方式。
十一、创建知识库问答应用
Dify 的一个重要能力是知识库,也就是 RAG 应用。它可以将企业文档、产品说明书、FAQ、制度文件等上传到知识库中,然后让 AI 基于知识库内容回答问题。
1. 创建知识库
进入知识库页面,点击新建知识库,然后上传文档。支持的文档格式通常包括:
- Word
- TXT
- Markdown
- HTML
- CSV
- Excel
上传后,Dify 会进行文本切分、向量化和索引构建。
2. 绑定知识库
创建聊天应用后,可以在上下文或知识库配置中绑定已有知识库。用户提问时,Dify 会先检索相关文档片段,再将检索结果和用户问题一起发送给大模型,从而提升回答准确性。
3. 知识库应用提示词示例
你是企业内部知识库助手。
请优先根据知识库内容回答用户问题。
如果知识库中没有相关信息,请回答“当前知识库中没有找到相关内容”,不要自行编造。
回答时请尽量引用知识库中的关键依据。
十二、附源码:Docker Compose 核心配置示例
下面给出一个简化版的 Docker Compose 示例,用于帮助理解 Dify 部署结构。实际部署时应以官方仓库中的 docker-compose.yaml 为准。
version: "3.8"
services:
api:
image: langgenius/dify-api:latest
container_name: dify-api
restart: always
env_file:
- .env
depends_on:
- db
- redis
volumes:
- ./volumes/app/storage:/app/api/storage
networks:
- dify
worker:
image: langgenius/dify-api:latest
container_name: dify-worker
restart: always
env_file:
- .env
command: celery -A app.celery worker -P gevent -c 1
depends_on:
- db
- redis
volumes:
- ./volumes/app/storage:/app/api/storage
networks:
- dify
web:
image: langgenius/dify-web:latest
container_name: dify-web
restart: always
env_file:
- .env
networks:
- dify
db:
image: postgres:15-alpine
container_name: dify-db
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: dify
volumes:
- ./volumes/db/data:/var/lib/postgresql/data
networks:
- dify
redis:
image: redis:6-alpine
container_name: dify-redis
restart: always
volumes:
- ./volumes/redis/data:/data
networks:
- dify
nginx:
image: nginx:latest
container_name: dify-nginx
restart: always
ports:
- "80:80"
depends_on:
- api
- web
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
networks:
- dify
networks:
dify:
driver: bridge
这个示例展示了 Dify 的基本服务关系:
api:后端 API 服务worker:异步任务服务web:前端页面服务db:PostgreSQL 数据库redis:缓存和任务队列nginx:反向代理入口
实际官方 Compose 文件通常更复杂,可能还包含 sandbox、plugin daemon、向量数据库、SSR 服务、数据库初始化等内容。
十三、附源码:常用 .env 配置示例
以下是一个简化版 .env 示例,仅用于说明关键配置。
# =========================
# Basic
# =========================
CONSOLE_WEB_URL=http://your-server-ip
APP_WEB_URL=http://your-server-ip
SERVICE_API_URL=http://your-server-ip
SECRET_KEY=replace-with-your-secret-key
# =========================
# Nginx
# =========================
EXPOSE_NGINX_PORT=80
EXPOSE_NGINX_SSL_PORT=443
# =========================
# Database
# =========================
DB_USERNAME=postgres
DB_PASSWORD=change-this-password
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
# =========================
# Redis
# =========================
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=change-this-redis-password
# =========================
# Vector Store
# =========================
VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
# =========================
# Upload
# =========================
UPLOAD_FILE_SIZE_LIMIT=15
UPLOAD_FILE_BATCH_LIMIT=5
生产环境中,建议至少修改:
SECRET_KEYDB_PASSWORDREDIS_PASSWORD- 对外访问地址
- Nginx 端口
- 文件上传限制
- 向量数据库配置
十四、配置域名和 HTTPS
如果是生产环境,建议使用域名和 HTTPS。假设你的域名是:
dify.example.com
需要先将域名 DNS 解析到服务器 IP。
然后可以使用 Nginx 反向代理、宝塔面板、1Panel、Nginx Proxy Manager 或 Traefik 配置 HTTPS。
如果你直接使用 Dify 自带 Nginx,也可以修改其 Nginx 配置并挂载证书。但更推荐在 Dify 外层再加一个统一入口代理,例如:
用户浏览器
↓
外层 Nginx / 反向代理 / 网关
↓
Dify Nginx
↓
Dify Web & API
外层 Nginx 示例:
server {
listen 80;
server_name dify.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
如果使用 Certbot 申请证书:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d dify.example.com
申请成功后,访问地址就可以改为:
https://dify.example.com
同时记得更新 .env:
CONSOLE_WEB_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
更新配置后重启服务:
docker compose down
docker compose up -d
十五、常用运维命令
1. 启动服务
docker compose up -d
2. 停止服务
docker compose down
3. 重启服务
docker compose restart
4. 查看容器状态
docker compose ps
5. 查看日志
docker compose logs -f
查看指定服务日志:
docker compose logs -f api
6. 拉取最新镜像
docker compose pull
7. 更新并重启
docker compose down
docker compose pull
docker compose up -d
8. 查看磁盘占用
docker system df
9. 清理无用镜像
docker image prune -a
执行清理命令前要谨慎,避免删除仍然需要的镜像。
十六、数据备份与恢复
Dify 部署后,数据主要保存在 Docker 挂载目录中,例如:
dify/docker/volumes
其中可能包含:
- PostgreSQL 数据
- Redis 数据
- 上传文件
- 知识库文件
- 向量数据库数据
1. 备份 volumes 目录
最简单的方式是直接备份整个 volumes 目录:
tar -zcvf dify-volumes-backup.tar.gz volumes
2. 备份数据库
也可以单独备份 PostgreSQL:
docker exec -t dify-db pg_dump -U postgres dify > dify-db-backup.sql
3. 恢复数据库
恢复前建议先停止相关服务,避免数据写入冲突。恢复命令示例:
cat dify-db-backup.sql | docker exec -i dify-db psql -U postgres -d dify
生产环境建议建立定期备份策略,例如每天凌晨自动备份数据库和上传文件,并将备份文件保存到远程对象存储或其他服务器。
十七、常见问题排查
1. 容器启动失败
先查看容器状态:
docker compose ps
再查看日志:
docker compose logs -f
常见原因包括:
- 端口被占用
- 环境变量配置错误
- 镜像拉取失败
- 数据库未正常启动
- 磁盘空间不足
2. 访问页面打不开
检查以下内容:
- 服务器安全组是否放行 80/443/自定义端口
- 防火墙是否阻止访问
- Docker 容器是否正常运行
- Nginx 容器端口映射是否正确
.env中的访问地址是否正确
查看端口占用:
sudo lsof -i:80
3. 上传知识库失败
可能原因包括:
- 文件过大
- Worker 服务异常
- 向量数据库异常
- 模型 Embedding 配置不正确
- 文件解析服务异常
建议查看:
docker compose logs -f worker
docker compose logs -f api
4. 模型调用失败
检查:
- API Key 是否正确
- 模型供应商是否可用
- API Base URL 是否填写正确
- 服务器是否能访问外网
- 模型额度是否充足
- 代理配置是否正确
可以在服务器中测试网络:
curl https://api.openai.com
如果使用国内模型供应商,则测试对应 API 地址。
5. 容器反复重启
通常需要查看日志定位问题:
docker compose logs -f 服务名
比如:
docker compose logs -f api
如果日志中出现数据库连接失败,需要检查数据库容器状态和数据库密码配置。如果出现 Redis 连接失败,需要检查 Redis 配置是否一致。
十八、生产环境优化建议
如果计划将 Dify 用于生产环境,建议不要只停留在“能运行”的状态,还需要关注安全性、稳定性和可维护性。
1. 修改默认密码
务必修改数据库、Redis、管理后台等默认密码,并保存到安全位置。
2. 使用 HTTPS
生产环境建议强制使用 HTTPS,避免 API Key、登录凭证等敏感信息被明文传输。
3. 配置备份
至少备份:
- 数据库
- 上传文件
- 向量数据库数据
.env配置文件
4. 监控资源
关注 CPU、内存、磁盘、网络等资源。尤其是知识库较多时,向量数据库和文件存储会占用较多磁盘。
5. 限制开放端口
对外只开放必要端口,例如 80 和 443。数据库、Redis、向量数据库等端口不建议暴露到公网。
6. 定期升级
Dify 更新较快,建议关注官方发布说明。在升级前一定要备份数据,避免版本变更导致兼容问题。
7. 使用固定版本镜像
生产环境不建议长期使用 latest,更推荐使用明确版本号,例如:
image: langgenius/dify-api:0.x.x
这样可以避免镜像自动变化导致不可控问题。
十九、升级 Dify
升级前请先备份:
tar -zcvf dify-backup-before-upgrade.tar.gz volumes .env docker-compose.yaml
然后进入源码目录拉取最新代码:
cd dify
git pull
cd docker
如果官方 .env.example 有变化,需要对比新旧配置:
diff .env.example .env
拉取最新镜像:
docker compose pull
重启服务:
docker compose down
docker compose up -d
查看日志确认服务正常:
docker compose logs -f
二十、总结
本文完整介绍了 Dify 的 Docker 部署流程,包括服务器准备、Docker 安装、源码获取、环境变量配置、服务启动、模型供应商配置、知识库应用创建、Docker Compose 源码示例、.env 配置示例、HTTPS 配置、常用运维命令、数据备份、问题排查和生产环境优化建议。
对于个人开发者来说,Dify 可以帮助你快速搭建 AI 应用原型;对于企业团队来说,Dify 可以作为私有化 LLMOps 平台,用于构建内部知识库、客服机器人、流程自动化工具和智能工作助手。
如果你只是体验,按照本文步骤使用默认 Docker 配置即可快速启动。如果你准备正式上线,则建议重点关注安全配置、域名 HTTPS、数据备份、版本管理和资源监控。通过 Docker 部署 Dify 的优势在于简单、快速、可迁移,也方便后期升级和扩展。
最后,再给出最核心的部署命令汇总:
# 克隆源码
git clone https://github.com/langgenius/dify.git
# 进入 Docker 部署目录
cd dify/docker
# 复制环境变量文件
cp .env.example .env
# 根据需要编辑配置
vim .env
# 启动服务
docker compose up -d
# 查看状态
docker compose ps
# 查看日志
docker compose logs -f
完成以上步骤后,打开浏览器访问服务器 IP 或域名,就可以开始使用 Dify 构建属于自己的 AI 应用了。