Dify 服务器部署实战:Docker Compose 一键上线,附配置文件与避坑指南
Dify 部署完整教程|附配置文件
前言
Dify 是一款开源的 LLM 应用开发平台,支持可视化编排 AI 应用、构建聊天机器人、Agent、知识库问答、工作流以及 API 服务。相比从零开发一个大模型应用,Dify 提供了更完整的工程化能力,包括模型接入、提示词管理、数据集管理、向量检索、应用发布、API 调用、日志观测等功能,非常适合企业内部知识库、智能客服、AI 助手、自动化工作流等场景。
本文将以 Docker Compose 部署方式 为主,完整介绍 Dify 的部署流程,并附上常用配置文件示例。该方式适合个人开发者、中小团队以及测试环境快速上线。如果你希望在服务器上稳定运行 Dify,本文也会补充域名、反向代理、HTTPS、环境变量配置、常见问题排查等内容。
一、部署前准备
在开始部署 Dify 之前,需要准备一台 Linux 服务器。推荐使用 Ubuntu 20.04 / 22.04,也可以使用 Debian、CentOS、Rocky Linux 等系统。
1. 服务器配置建议
如果只是个人测试,最低配置可以较低;如果要接入知识库、多人使用,建议适当提高配置。
| 使用场景 | CPU | 内存 | 磁盘 |
|---|---|---|---|
| 个人测试 | 2 核 | 4 GB | 30 GB |
| 小团队使用 | 4 核 | 8 GB | 80 GB |
| 企业内部部署 | 8 核以上 | 16 GB 以上 | 200 GB 以上 |
注意:如果 Dify 使用本地向量数据库、处理较多知识库文档,磁盘空间和内存都要预留充足。
2. 软件环境要求
部署前需要安装以下组件:
- Docker
- Docker Compose
- Git
- Nginx(可选,用于反向代理和 HTTPS)
- 域名(可选,但生产环境建议配置)
本文默认使用 Docker Compose 部署,因此不需要手动安装 PostgreSQL、Redis、向量数据库等服务,Dify 官方 Compose 文件会统一编排这些服务。
二、安装 Docker 和 Docker Compose
以下命令以 Ubuntu 系统为例。
1. 更新系统依赖
sudo apt update
sudo apt upgrade -y
安装常用工具:
sudo apt install -y ca-certificates curl gnupg lsb-release git
2. 安装 Docker
添加 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:
sudo systemctl enable docker
sudo systemctl start docker
查看 Docker 版本:
docker version
查看 Docker Compose 版本:
docker compose version
如果能够正常输出版本信息,说明 Docker 环境已安装完成。
三、获取 Dify 项目源码
进入服务器合适目录,例如 /opt:
cd /opt
克隆 Dify 官方仓库:
sudo git clone https://github.com/langgenius/dify.git
进入 Docker 部署目录:
cd /opt/dify/docker
查看目录文件:
ls -lah
通常会看到如下文件或目录:
docker-compose.yaml
.env.example
nginx/
volumes/
middleware.env.example
不同版本的 Dify 文件结构可能略有差异,但核心部署方式基本一致。
四、配置环境变量
Dify 的主要配置集中在 .env 文件中。官方一般提供 .env.example 示例文件,我们需要复制一份并进行修改。
cp .env.example .env
然后编辑 .env:
nano .env
如果你熟悉 Vim,也可以使用:
vim .env
五、核心配置项说明
.env 文件内容较多,不同版本变量名可能会更新。下面列出常见且重要的配置项。
1. 服务访问地址
CONSOLE_API_URL=
CONSOLE_WEB_URL=
SERVICE_API_URL=
APP_API_URL=
APP_WEB_URL=
如果只是本地或服务器 IP 测试,可以先留空或设置为服务器地址。生产环境建议填写完整域名。
示例:
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
如果你使用的是纯 IP 访问,例如:
CONSOLE_API_URL=http://你的服务器IP
CONSOLE_WEB_URL=http://你的服务器IP
SERVICE_API_URL=http://你的服务器IP
APP_API_URL=http://你的服务器IP
APP_WEB_URL=http://你的服务器IP
2. Secret Key
Dify 需要配置安全密钥,例如:
SECRET_KEY=your-secret-key
建议使用随机字符串,不要直接使用默认值。可以通过以下命令生成:
openssl rand -base64 42
然后写入:
SECRET_KEY=生成的随机字符串
3. 数据库配置
Dify 默认使用 PostgreSQL。Compose 部署时数据库通常由容器自动启动,配置类似:
DB_USERNAME=postgres
DB_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
生产环境不建议使用默认密码,建议修改为强密码:
DB_USERNAME=postgres
DB_PASSWORD=请替换为强密码
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
注意:如果已经启动过容器并初始化了数据库,再修改数据库密码可能会导致连接失败。首次部署前修改最稳妥。
4. Redis 配置
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
如果你希望设置 Redis 密码,可以配置:
REDIS_PASSWORD=请替换为Redis密码
但同时要确保 Docker Compose 中 Redis 服务也启用对应密码,否则会出现连接失败。
5. 向量数据库配置
Dify 支持多种向量数据库,例如 Weaviate、Qdrant、Milvus、pgvector 等。官方 Docker Compose 默认可能使用 Weaviate 或其他向量库,具体取决于版本配置。
常见配置示例:
VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=
如果使用 Qdrant:
VECTOR_STORE=qdrant
QDRANT_URL=http://qdrant:6333
QDRANT_API_KEY=
对于新手来说,建议先使用官方默认向量数据库,不要一开始就改动太多。
6. 文件存储配置
默认可以使用本地存储:
STORAGE_TYPE=local
如果是生产环境且需要更稳定的文件管理,可以配置 S3 兼容对象存储,例如 AWS S3、MinIO、阿里云 OSS 等。
本地存储示例:
STORAGE_TYPE=local
STORAGE_LOCAL_PATH=storage
S3 示例:
STORAGE_TYPE=s3
S3_ENDPOINT=https://s3.amazonaws.com
S3_BUCKET_NAME=dify
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_REGION=ap-southeast-1
7. 邮件服务配置
如果需要邀请成员、找回密码等功能,建议配置 SMTP。
MAIL_TYPE=smtp
MAIL_FROM=noreply@example.com
SMTP_SERVER=smtp.example.com
SMTP_PORT=465
SMTP_USERNAME=noreply@example.com
SMTP_PASSWORD=邮箱授权码
SMTP_USE_TLS=true
不同邮箱服务商的 SMTP 端口和安全策略不同,需要根据服务商文档调整。
六、配置文件示例
下面提供一个适合单机 Docker Compose 部署的 .env 示例。请根据自己的域名、密码、密钥进行修改。
.env 示例配置
# =========================
# Dify 基础访问地址
# =========================
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-a-random-secret-key
# =========================
# 数据库配置
# =========================
DB_USERNAME=postgres
DB_PASSWORD=replace-with-strong-db-password
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
# =========================
# Redis 配置
# =========================
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
# =========================
# Celery 配置
# =========================
CELERY_BROKER_URL=redis://redis:6379/1
# =========================
# 向量数据库配置
# =========================
VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=
# =========================
# 文件存储配置
# =========================
STORAGE_TYPE=local
STORAGE_LOCAL_PATH=storage
# =========================
# 上传文件限制
# =========================
UPLOAD_FILE_SIZE_LIMIT=15
UPLOAD_FILE_BATCH_LIMIT=5
# =========================
# 邮件配置,可选
# =========================
MAIL_TYPE=smtp
MAIL_FROM=noreply@example.com
SMTP_SERVER=smtp.example.com
SMTP_PORT=465
SMTP_USERNAME=noreply@example.com
SMTP_PASSWORD=replace-with-email-password
SMTP_USE_TLS=true
# =========================
# Web 服务配置
# =========================
WEB_API_CORS_ALLOW_ORIGINS=*
CONSOLE_CORS_ALLOW_ORIGINS=*
说明:Dify 官方版本更新较快,变量名可能出现变化。实际部署时应以官方
.env.example为准,本文配置可作为理解和修改参考。
七、启动 Dify 服务
确认 .env 配置完成后,在 /opt/dify/docker 目录执行:
docker compose up -d
该命令会自动拉取镜像并启动所有服务。首次启动需要下载多个镜像,耗时取决于服务器网络环境。
查看容器状态:
docker compose ps
如果服务全部处于 running 或 healthy 状态,说明启动正常。
查看日志:
docker compose logs -f
也可以单独查看某个服务日志,例如:
docker compose logs -f api
docker compose logs -f web
docker compose logs -f worker
docker compose logs -f db
八、访问 Dify 控制台
如果你未配置域名和 Nginx,一般可以通过服务器 IP 访问:
http://服务器IP
如果配置了域名:
https://dify.example.com
首次访问时,Dify 会引导你创建管理员账号。按照页面提示填写邮箱、用户名和密码即可。
创建完成后,就可以进入控制台,开始配置模型供应商、创建应用、导入知识库等。
九、配置大模型供应商
部署 Dify 后,最重要的一步是配置模型。Dify 支持多种模型供应商,例如:
- OpenAI
- Azure OpenAI
- Anthropic
- Google Gemini
- Ollama
- DeepSeek
- Zhipu AI
- Moonshot
- Tongyi
- Baichuan
- OpenRouter
- 本地模型服务
进入 Dify 控制台后,通常可以在:
设置 → 模型供应商
中添加模型 API Key。
例如配置 OpenAI:
Provider: OpenAI
API Key: sk-xxxx
Base URL: https://api.openai.com/v1
如果你使用第三方兼容 OpenAI API 的服务,通常需要填写自定义 Base URL。
例如:
Base URL: https://api.example.com/v1
API Key: your-api-key
配置完成后,可以设置默认模型,例如:
- Chat Model:gpt-4o-mini
- Embedding Model:text-embedding-3-small
知识库问答通常需要配置 Embedding 模型,否则无法正常进行向量化。
十、Nginx 反向代理配置
生产环境建议使用 Nginx 反向代理,并配置 HTTPS。假设你的域名是:
dify.example.com
Dify 容器对外暴露端口通常是 80 或其他端口,具体以 Docker Compose 文件为准。如果容器已经占用宿主机 80 端口,则 Nginx 可以直接使用 Dify 自带的 nginx 服务;如果你想使用宿主机 Nginx 代理,可以将 Dify 映射到例如 8080 端口。
下面给出一个宿主机 Nginx 反向代理示例。
Nginx 配置文件示例
创建配置文件:
sudo nano /etc/nginx/conf.d/dify.conf
写入以下内容:
server {
listen 80;
server_name dify.example.com;
client_max_body_size 50M;
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";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
检查 Nginx 配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
注意:上面的
proxy_pass http://127.0.0.1:8080;需要与你实际 Dify 暴露端口一致。如果 Dify 直接占用了 80 端口,就不能让宿主机 Nginx 同时监听 80 端口。
十一、配置 HTTPS 证书
推荐使用 Certbot 自动申请 Let’s Encrypt 免费证书。
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
sudo certbot --nginx -d dify.example.com
根据提示选择是否自动跳转 HTTPS。完成后,Certbot 会自动修改 Nginx 配置。
3. 测试自动续期
sudo certbot renew --dry-run
如果输出正常,说明证书自动续期可用。
十二、Docker Compose 配置文件示例
一般情况下不建议随意修改官方 docker-compose.yaml,因为 Dify 的服务较多,包括 API、Web、Worker、数据库、Redis、向量数据库、Nginx 等。如果确实需要调整端口,可以参考以下简化示例。
docker-compose.override.yaml 示例
在 /opt/dify/docker 目录下创建:
nano docker-compose.override.yaml
写入:
services:
nginx:
ports:
- "8080:80"
api:
restart: always
worker:
restart: always
web:
restart: always
db:
restart: always
redis:
restart: always
这样可以避免直接修改官方 docker-compose.yaml。以后升级 Dify 时,官方文件变化不会被你大量改动影响。
然后重新启动:
docker compose down
docker compose up -d
十三、开放防火墙端口
如果服务器开启了防火墙,需要放行 HTTP 和 HTTPS 端口。
Ubuntu UFW 示例
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
如果你使用 8080 端口测试,也需要放行:
sudo ufw allow 8080/tcp
云服务器还需要在云厂商安全组中放行相应端口,例如阿里云、腾讯云、华为云、AWS、Azure 等。
十四、数据持久化与备份
Dify 的数据库、上传文件、向量数据都非常重要。Docker Compose 部署通常会通过 volume 持久化数据。你需要重点关注以下内容:
- PostgreSQL 数据
- Redis 数据
- 向量数据库数据
- 上传文件目录
.env配置文件
1. 备份 PostgreSQL
可以通过容器执行 pg_dump:
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. 备份 Dify Docker 目录
建议定期备份整个 Docker 部署目录:
tar -zcvf dify-docker-backup.tar.gz /opt/dify/docker
如果数据卷不在该目录内,还需要单独备份 Docker volumes。
3. 查看 Docker volume
docker volume ls
查看具体 volume 信息:
docker volume inspect volume_name
生产环境建议制定定期备份策略,例如每天凌晨备份数据库,每周备份完整数据,并将备份文件上传至对象存储。
十五、升级 Dify
Dify 版本更新比较频繁,升级前一定要备份数据。
1. 停止服务
cd /opt/dify/docker
docker compose down
2. 拉取最新代码
cd /opt/dify
git pull
3. 检查配置差异
升级后建议对比 .env.example 和当前 .env:
cd /opt/dify/docker
diff .env.example .env
如果新版本增加了环境变量,需要手动补充到 .env 中。
4. 拉取最新镜像并启动
docker compose pull
docker compose up -d
5. 查看日志
docker compose logs -f
确认 API、Worker、Web、数据库等服务启动正常后,再访问页面验证功能。
十六、常见问题排查
1. 页面无法访问
首先查看容器状态:
docker compose ps
再查看端口监听:
sudo ss -tulnp | grep -E '80|443|8080'
如果端口没有监听,说明容器或 Nginx 未正常启动。
查看日志:
docker compose logs -f nginx
docker compose logs -f web
docker compose logs -f api
2. API 服务启动失败
常见原因包括:
.env配置错误- 数据库密码不匹配
- Redis 无法连接
- SECRET_KEY 未配置
- 数据库尚未初始化完成
查看 API 日志:
docker compose logs -f api
如果出现数据库连接错误,重点检查:
DB_HOST=db
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=你的密码
DB_DATABASE=dify
3. 知识库无法索引
知识库索引失败通常与以下因素有关:
- 没有配置 Embedding 模型
- 模型 API Key 无效
- 向量数据库未启动
- 文档过大或格式不支持
- Worker 服务异常
查看 Worker 日志:
docker compose logs -f worker
查看向量数据库日志:
docker compose logs -f weaviate
或:
docker compose logs -f qdrant
具体取决于你使用的向量数据库。
4. 上传文件失败
检查上传文件大小限制:
UPLOAD_FILE_SIZE_LIMIT=15
UPLOAD_FILE_BATCH_LIMIT=5
同时检查 Nginx 的上传限制:
client_max_body_size 50M;
如果 Nginx 限制太小,即使 Dify 配置允许上传,也会被反向代理拦截。
5. HTTPS 后回调地址异常
如果启用 HTTPS,但 .env 中仍然配置了 HTTP 地址,可能出现接口请求异常、跳转异常、应用分享链接不正确等问题。
请确保:
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
修改后重启服务:
docker compose down
docker compose up -d
十七、安全加固建议
生产环境部署 Dify 时,建议进行以下安全加固:
-
不要使用默认数据库密码
PostgreSQL、Redis 等服务应使用强密码。 -
使用 HTTPS
登录凭证、API Key、应用请求都应通过 HTTPS 传输。 -
限制后台访问来源
如果是企业内部使用,可以通过防火墙或 Nginx 白名单限制访问 IP。 -
定期备份数据
数据库和知识库文件一旦丢失,恢复成本较高。 -
及时升级版本
Dify 和依赖组件更新较快,建议关注官方发布说明。 -
保护
.env文件
.env中包含数据库密码、密钥等敏感信息,不要上传到公开仓库。 -
合理配置模型 Key 权限
如果使用 OpenAI、DeepSeek、通义千问等模型 API Key,建议单独创建用途明确的 Key,并控制额度。
十八、一个完整部署流程总结
如果你想快速部署,可以按下面命令执行:
# 1. 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release git
# 2. 安装 Docker
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
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 3. 克隆 Dify
cd /opt
sudo git clone https://github.com/langgenius/dify.git
cd /opt/dify/docker
# 4. 创建环境变量文件
cp .env.example .env
# 5. 编辑配置文件
nano .env
# 6. 启动服务
docker compose up -d
# 7. 查看状态
docker compose ps
如果容器正常启动,即可通过服务器 IP 或域名访问 Dify。
结语
通过本文的步骤,你已经可以完成 Dify 的 Docker Compose 部署,并掌握环境变量、数据库、Redis、向量数据库、Nginx 反向代理、HTTPS、备份升级和常见故障排查等关键内容。
对于大多数用户来说,使用官方 Docker Compose 是部署 Dify 最简单、最稳定的方式。测试环境可以直接使用 IP 访问,生产环境建议配置域名、HTTPS、强密码和定期备份。如果后续团队规模扩大,也可以将 PostgreSQL、Redis、向量数据库拆分到独立服务器或托管服务中,以提升稳定性和可维护性。
Dify 的优势不只是“部署一个 AI 平台”,更重要的是它提供了一套从模型接入、知识库构建、提示词编排到应用发布的完整工作流。部署完成后,你可以继续尝试创建聊天助手、企业知识库、自动化 Agent、工作流应用,并通过 API 将 AI 能力集成到自己的业务系统中。