上一篇 下一篇 分享链接 返回 返回顶部

从零搭建 Dify:Docker 部署、源码配置与上线实战指南

发布人:慈云数据-客服中心 发布时间:20小时前 阅读量:0

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 暴露服务,常见端口是 80443。在 .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

如果所有服务状态为 runninghealthy,说明启动成功。

也可以查看日志:

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 中以兼容接口方式接入。


十、创建一个简单聊天应用

完成模型配置后,可以创建一个聊天助手测试。

操作流程如下:

  1. 进入 Dify 控制台
  2. 点击“创建应用”
  3. 选择“聊天助手”
  4. 输入应用名称,例如“智能问答助手”
  5. 选择已配置的大模型
  6. 编写系统提示词
  7. 点击调试运行
  8. 发布应用

示例系统提示词:

你是一个专业、耐心、准确的中文智能助手。
请使用简洁清晰的中文回答用户问题。
如果遇到不确定的信息,请明确说明不确定,不要编造。

调试成功后,可以点击发布,Dify 会生成应用访问链接和 API 调用方式。


十一、创建知识库问答应用

Dify 的一个重要能力是知识库,也就是 RAG 应用。它可以将企业文档、产品说明书、FAQ、制度文件等上传到知识库中,然后让 AI 基于知识库内容回答问题。

1. 创建知识库

进入知识库页面,点击新建知识库,然后上传文档。支持的文档格式通常包括:

  • PDF
  • 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_KEY
  • DB_PASSWORD
  • REDIS_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 应用了。

目录结构
全文