从零搭建 Dify:Docker 部署、配置源码与避坑指南
问答社区 2026-06-07 06:23 15

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

如果所有服务状态均为 runninghealthy,说明服务已经正常启动。

查看日志:

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

生产环境建议:

  1. 不要使用默认密码;
  2. 所有密钥都使用随机生成;
  3. 数据库数据目录做好备份;
  4. 仅开放必要端口;
  5. 配置 HTTPS;
  6. 定期更新镜像和源码。

十二、接入 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 应用

部署完成并配置好模型之后,可以创建一个简单聊天机器人。

操作步骤:

  1. 登录 Dify 控制台;
  2. 点击「创建应用」;
  3. 选择「聊天助手」;
  4. 输入应用名称,例如「智能客服」;
  5. 选择模型,例如 GPT-4o mini、DeepSeek Chat 或 Qwen;
  6. 编写系统提示词;
  7. 点击发布。

示例 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、修改默认密码、做好数据备份,并定期关注官方版本更新。

标签:

  • Dify
  • Docker部署
  • DockerCompose
  • LLMOps