从零搭建 Dify:Docker 部署、配置源码与避坑指南
Dify Docker部署教程|附源码
随着大模型应用开发的普及,越来越多团队开始关注如何快速构建 AI 应用、知识库问答系统、智能客服、工作流自动化工具等。Dify 是目前非常受欢迎的开源大模型应用开发平台,它提供了可视化 Prompt 编排、Agent、Workflow、知识库、模型管理、API 调用等能力,适合个人开发者、企业团队以及 AI 产品原型搭建使用。
本文将详细介绍如何使用 Docker 部署 Dify,并附带常用源码、配置文件、启动命令以及部署过程中的常见问题解决方案。通过本文,你可以在本地服务器、云服务器或内网环境中快速搭建一套可运行的 Dify 服务。
一、Dify 简介
Dify 是一个开源的 LLMOps 平台,全称可以理解为面向大语言模型应用的开发与运维平台。它的核心优势是降低大模型应用开发门槛,让开发者不需要从零搭建后端服务、向量数据库、模型接口、Prompt 管理、知识库检索等复杂模块。
Dify 支持以下能力:
- 可视化创建 AI 应用
- 支持 Chatbot、Agent、Workflow、文本生成应用
- 支持 OpenAI、Azure OpenAI、Anthropic、Google Gemini、通义千问、智谱、DeepSeek 等模型
- 支持本地模型接入,例如 Ollama、LocalAI、Xinference 等
- 支持知识库上传与 RAG 检索增强生成
- 支持 API 调用,方便嵌入业务系统
- 支持 Docker 快速部署
- 支持团队协作和权限管理
对于想要快速落地 AI 应用的开发者来说,Dify 是非常合适的开源选择。
二、部署前准备
在开始部署之前,需要准备一台服务器。推荐配置如下:
| 项目 | 推荐配置 |
|---|---|
| 操作系统 | Ubuntu 20.04 / Ubuntu 22.04 / Debian / CentOS |
| CPU | 2 核及以上 |
| 内存 | 4GB 以上,推荐 8GB |
| 磁盘 | 20GB 以上 |
| Docker | 20.10+ |
| Docker Compose | v2 版本 |
| 网络 | 可以访问 GitHub、Docker Hub 或配置国内镜像 |
如果只是个人测试,2核4G服务器也可以运行。但如果要用于生产环境,建议至少 4核8G,并根据知识库规模增加内存和磁盘容量。
三、安装 Docker
如果你的服务器已经安装 Docker,可以跳过本步骤。
以 Ubuntu 为例,执行以下命令安装 Docker:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
添加 Docker 官方 GPG Key:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
添加 Docker 软件源:
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 docker-compose-plugin
查看 Docker 版本:
docker version
docker compose version
启动 Docker 并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
如果想让当前用户直接执行 Docker 命令,可以执行:
sudo usermod -aG docker $USER
然后退出服务器重新登录。
四、拉取 Dify 源码
Dify 官方代码托管在 GitHub,使用 Git 拉取源码:
git clone https://github.com/langgenius/dify.git
进入项目目录:
cd dify
Dify 的 Docker 部署文件位于 docker 目录中:
cd docker
查看目录结构:
ls -la
一般可以看到类似文件:
.env.example
docker-compose.yaml
nginx
middleware.env.example
ssrf_proxy
五、配置环境变量
Dify 使用 .env 文件进行环境配置。首次部署时,需要复制一份示例配置文件:
cp .env.example .env
然后编辑 .env 文件:
vim .env
如果你不熟悉 vim,也可以使用 nano:
nano .env
1. 配置访问地址
找到类似以下配置项:
CONSOLE_API_URL=
CONSOLE_WEB_URL=
SERVICE_API_URL=
APP_API_URL=
APP_WEB_URL=
如果只是本地测试,可以先保持默认或使用服务器 IP。例如你的服务器 IP 是 http://123.123.123.123,可以配置为:
CONSOLE_API_URL=http://123.123.123.123
CONSOLE_WEB_URL=http://123.123.123.123
SERVICE_API_URL=http://123.123.123.123
APP_API_URL=http://123.123.123.123
APP_WEB_URL=http://123.123.123.123
如果你绑定了域名,例如:
https://dify.example.com
则可以配置为:
CONSOLE_API_URL=https://dify.example.com
CONSOLE_WEB_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
APP_API_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
注意:如果后面配置了 Nginx HTTPS 反向代理,这里的地址建议填写 HTTPS 域名。
2. 配置密钥
.env 文件中会有一些密钥配置,例如:
SECRET_KEY=
建议使用随机字符串生成:
openssl rand -base64 42
将生成结果填入:
SECRET_KEY=你的随机密钥
该配置非常重要,不建议在生产环境中使用默认值。
3. 配置数据库密码
Dify 默认使用 PostgreSQL、Redis、向量数据库等组件。通常 Docker Compose 已经配置好了内部服务,你可以根据需要修改数据库密码。
示例:
DB_USERNAME=postgres
DB_PASSWORD=your_secure_password
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
Redis 示例:
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
如果只是测试环境,可以使用默认配置。但生产环境建议修改所有默认密码。
六、使用 Docker Compose 启动 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
例如:
http://123.123.123.123
首次访问时,系统会进入初始化页面,需要创建管理员账号。
填写信息:
- 管理员邮箱
- 用户名
- 密码
创建完成后,即可进入 Dify 控制台。
如果你部署在本地机器,也可以访问:
http://localhost
八、开放服务器端口
如果你使用的是云服务器,需要在安全组中放行端口。
常用端口如下:
| 端口 | 说明 |
|---|---|
| 80 | HTTP 访问 |
| 443 | HTTPS 访问 |
| 22 | SSH 登录 |
| 5432 | PostgreSQL,通常不建议对外开放 |
| 6379 | Redis,通常不建议对外开放 |
一般情况下,只需要开放:
80
443
22
数据库端口和 Redis 端口建议仅限 Docker 内部网络访问,不要暴露到公网。
九、配置 HTTPS 反向代理
如果你有域名,建议使用 HTTPS。这里以 Nginx Proxy Manager 或系统 Nginx 为例说明。
方式一:使用服务器 Nginx 反向代理
安装 Nginx:
sudo apt install -y nginx
创建配置文件:
sudo vim /etc/nginx/conf.d/dify.conf
写入以下配置:
server {
listen 80;
server_name dify.example.com;
client_max_body_size 100M;
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
不过这里要注意:Dify Docker 内部本身也可能使用 Nginx 监听 80 端口。如果宿主机 Nginx 也监听 80,就会端口冲突。
更推荐的做法是修改 Dify Docker 暴露端口,例如将 Dify 映射到宿主机 8080,然后宿主机 Nginx 反代到 8080。
在 docker-compose.yaml 中找到 nginx 服务端口:
ports:
- "80:80"
改为:
ports:
- "8080:80"
然后宿主机 Nginx 配置:
server {
listen 80;
server_name dify.example.com;
client_max_body_size 100M;
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;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
重启 Nginx:
sudo nginx -t
sudo systemctl reload nginx
方式二:使用 Certbot 申请 SSL 证书
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d dify.example.com
按照提示完成配置。完成后即可通过:
https://dify.example.com
访问 Dify。
十、附源码: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
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 --loglevel INFO
depends_on:
- db
- redis
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: your_secure_password
POSTGRES_DB: dify
volumes:
- ./volumes/db/data:/var/lib/postgresql/data
networks:
- dify
redis:
image: redis:6-alpine
container_name: dify-redis
restart: always
command: redis-server --requirepass your_redis_password
volumes:
- ./volumes/redis/data:/data
networks:
- dify
nginx:
image: nginx:latest
container_name: dify-nginx
restart: always
ports:
- "8080:80"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- api
- web
networks:
- dify
networks:
dify:
driver: bridge
这个示例展示了 Dify 的基本组成:
api:后端 API 服务worker:异步任务服务web:前端页面服务db:PostgreSQL 数据库redis:缓存和队列服务nginx:统一入口代理服务
实际官方配置中还会包含向量数据库、插件服务、沙箱服务、SSRF 代理等模块。
十一、附源码:常用 .env 配置示例
下面是一个示例环境变量配置,仅用于参考:
# 基础配置
CONSOLE_API_URL=https://dify.example.com
CONSOLE_WEB_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
APP_API_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
# 密钥配置
SECRET_KEY=replace_with_your_secret_key
# 数据库配置
DB_USERNAME=postgres
DB_PASSWORD=replace_with_db_password
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
# Redis 配置
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=replace_with_redis_password
REDIS_DB=0
# 上传文件大小
UPLOAD_FILE_SIZE_LIMIT=100
# 向量数据库
VECTOR_STORE=weaviate
# 日志级别
LOG_LEVEL=INFO
生产环境建议:
- 不要使用默认密码;
- 所有密钥都使用随机生成;
- 数据库数据目录做好备份;
- 仅开放必要端口;
- 配置 HTTPS;
- 定期更新镜像和源码。
十二、接入 OpenAI 或其他模型
Dify 部署完成后,还需要配置模型供应商才能正常使用。
进入 Dify 控制台后,依次点击:
设置 → 模型供应商
选择 OpenAI,填写 API Key。
如果使用 OpenAI,可以配置:
API Key: sk-xxxxxx
Base URL: https://api.openai.com/v1
如果使用第三方兼容 OpenAI API 的平台,例如 DeepSeek、硅基流动、OneAPI、NewAPI 等,可以填写对应的 Base URL。
例如 DeepSeek:
Base URL: https://api.deepseek.com/v1
模型名称: deepseek-chat
如果使用本地 Ollama,可以在服务器上安装 Ollama,然后在 Dify 中配置 OpenAI-Compatible 或 Ollama 相关接口。
Ollama 启动示例:
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2.5:7b
ollama serve
测试 Ollama:
curl http://localhost:11434/api/tags
如果 Dify 在 Docker 容器中访问宿主机 Ollama,需要注意网络地址不能写 localhost,可以尝试:
http://host.docker.internal:11434
Linux 下如果无法识别 host.docker.internal,可在 Docker Compose 中额外配置 host 映射。
十三、创建第一个 AI 应用
部署完成并配置好模型之后,可以创建一个简单聊天机器人。
操作步骤:
- 登录 Dify 控制台;
- 点击「创建应用」;
- 选择「聊天助手」;
- 输入应用名称,例如「智能客服」;
- 选择模型,例如 GPT-4o mini、DeepSeek Chat 或 Qwen;
- 编写系统提示词;
- 点击发布。
示例 Prompt:
你是一名专业、耐心的智能客服助手。
你的任务是根据用户的问题提供准确、简洁、友好的回答。
如果用户问题超出你的知识范围,请明确说明无法确认,不要编造答案。
回答时请使用中文。
发布之后,Dify 会提供 API 调用地址和 API Key,你可以将其集成到自己的业务系统中。
十四、附源码:API 调用示例
Dify 提供了标准 API,方便外部系统调用。下面给出一个 Python 调用示例。
Python 示例
import requests
import json
API_KEY = "app-your-api-key"
API_URL = "https://dify.example.com/v1/chat-messages"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"inputs": {},
"query": "请介绍一下 Dify 的主要功能",
"response_mode": "blocking",
"conversation_id": "",
"user": "user-001"
}
response = requests.post(API_URL, headers=headers, data=json.dumps(data))
print(response.status_code)
print(response.json())
curl 示例
curl -X POST 'https://dify.example.com/v1/chat-messages' \
--header 'Authorization: Bearer app-your-api-key' \
--header 'Content-Type: application/json' \
--data-raw '{
"inputs": {},
"query": "你好,请介绍一下你自己",
"response_mode": "blocking",
"conversation_id": "",
"user": "user-001"
}'
如果需要流式输出,可以将:
"response_mode": "blocking"
改成:
"response_mode": "streaming"
十五、数据备份与恢复
Dify 部署后,最重要的数据通常包括:
- PostgreSQL 数据;
- Redis 数据;
- 上传文件;
- 向量数据库数据;
.env配置文件;- Docker Compose 配置文件。
1. 备份 PostgreSQL
进入 docker 目录后执行:
docker compose exec db pg_dump -U postgres dify > dify_backup.sql
恢复数据库:
cat dify_backup.sql | docker compose exec -T db psql -U postgres dify
2. 备份 volumes 目录
Dify 的持久化数据通常在:
dify/docker/volumes
可以打包备份:
tar -zcvf dify-volumes-backup.tar.gz volumes
恢复:
tar -zxvf dify-volumes-backup.tar.gz
建议定期将备份文件上传到对象存储或其他服务器,避免单点故障。
十六、升级 Dify
Dify 更新频率较高,升级前务必先备份数据。
升级步骤:
cd dify
git pull
cd docker
docker compose down
docker compose pull
docker compose up -d
查看服务状态:
docker compose ps
如果升级后出现异常,先查看日志:
docker compose logs -f
生产环境升级建议选择低峰期,并提前在测试环境验证。
十七、常见问题解决
1. 容器启动失败怎么办?
查看容器状态:
docker compose ps
查看日志:
docker compose logs -f
如果是数据库连接失败,重点检查 .env 中数据库用户名、密码、主机名是否一致。
2. 访问页面空白怎么办?
可能原因:
- 前端服务未启动;
- Nginx 配置错误;
.env中 URL 配置不正确;- 浏览器缓存问题。
可以尝试:
docker compose restart
然后清理浏览器缓存重新访问。
3. 上传知识库失败怎么办?
可能原因:
- 文件大小超过限制;
- worker 服务异常;
- 存储目录权限不足;
- 向量数据库未正常启动。
查看 worker 日志:
docker compose logs -f worker
查看向量数据库日志:
docker compose logs -f weaviate
4. 模型调用失败怎么办?
常见原因包括:
- API Key 填写错误;
- Base URL 配置错误;
- 网络无法访问模型供应商;
- 模型名称填写错误;
- 账户余额不足;
- 第三方模型平台限流。
可以在服务器上使用 curl 测试:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer your_api_key"
5. Docker 拉取镜像很慢怎么办?
可以配置 Docker 国内镜像源。编辑:
sudo vim /etc/docker/daemon.json
写入:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}
重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
十八、生产环境部署建议
如果你准备将 Dify 用于正式业务,建议关注以下几点:
1. 安全性
- 修改所有默认密码;
- 使用强随机密钥;
- 不要暴露数据库和 Redis 到公网;
- 配置 HTTPS;
- 使用防火墙限制访问;
- 定期更新系统和镜像。
2. 稳定性
- 配置自动重启;
- 监控 CPU、内存、磁盘;
- 定期查看日志;
- 对数据库和上传文件做周期性备份;
- 尽量不要直接在生产环境测试新版本。
3. 可扩展性
如果访问量较高,可以考虑:
- 单独部署 PostgreSQL;
- 单独部署 Redis;
- 使用更高性能的向量数据库;
- 将模型调用服务和 Dify 服务拆分;
- 使用 Kubernetes 部署;
- 配置负载均衡。
十九、完整部署命令汇总
如果你只想快速部署,可以参考以下命令:
# 安装依赖
sudo apt update
sudo apt install -y git curl vim
# 拉取源码
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
访问:
http://服务器IP
如果配置了域名和 HTTPS:
https://dify.example.com
二十、总结
本文详细介绍了 Dify 的 Docker 部署流程,包括服务器准备、Docker 安装、源码拉取、环境变量配置、Docker Compose 启动、域名 HTTPS 配置、模型接入、API 调用、数据备份、系统升级以及常见问题排查。
对于个人开发者而言,Dify 可以快速帮助你搭建 AI 聊天助手、知识库问答、文本生成工具等应用;对于企业团队而言,Dify 可以作为 AI 应用原型平台和内部 LLMOps 平台使用。
最简单的部署方式就是:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d
部署完成后,配置模型供应商,即可开始创建你的第一个 AI 应用。建议生产环境一定要配置 HTTPS、修改默认密码、做好数据备份,并定期关注官方版本更新。