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

Dify 私有化落地实战:从部署到源码定制一篇讲透

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

Dify 私有化部署方案|附源码

在大模型应用快速落地的过程中,企业往往会遇到一个核心问题:如何在保证数据安全、系统可控、成本可控的前提下,快速搭建属于自己的 AI 应用平台?

Dify 作为一款开源的大模型应用开发平台,提供了 Prompt 编排、RAG 知识库、Agent、工作流、API 发布、权限管理、日志观测等能力,非常适合企业内部构建智能客服、知识库问答、文本生成、数据分析助手、业务流程自动化等 AI 应用。

相比直接使用公有云 SaaS 服务,Dify 私有化部署具有明显优势:

  • 数据不出企业内网,满足安全合规要求;
  • 可接入企业自有大模型或本地模型;
  • 可定制前端、后端、工作流和权限体系;
  • 可与内部系统打通,例如 OA、CRM、ERP、知识库、工单系统;
  • 可按需扩展算力与存储资源,降低长期使用成本。

本文将围绕 Dify 私有化部署方案 展开,包含架构说明、服务器规划、环境准备、Docker Compose 部署方式、源码部署思路、模型接入、知识库配置、反向代理、数据备份、安全加固与常见问题处理,并附上可直接参考的部署源码配置。


一、Dify 是什么?

Dify 是一个开源的大语言模型应用开发平台,定位类似于“AI 应用操作系统”。它不仅仅是一个聊天机器人框架,而是将大模型应用从开发、调试、发布到运维的完整流程产品化。

Dify 支持以下核心能力:

  1. LLM 应用编排

    可以通过可视化方式创建聊天助手、文本生成应用、Agent 应用和工作流应用。

  2. Prompt 管理

    支持 Prompt 模板、变量配置、上下文管理、调试预览等功能。

  3. RAG 知识库

    支持上传文档、切片、向量化、召回、重排序,实现企业知识库问答。

  4. 多模型接入

    支持 OpenAI、Azure OpenAI、Anthropic、Google Gemini、通义千问、智谱、DeepSeek、Ollama、本地模型服务等。

  5. API 发布

    应用创建完成后,可通过 API 方式对外提供服务,方便系统集成。

  6. 日志与监控

    支持调用日志、Token 消耗、用户反馈、调试记录等观测能力。

  7. 团队协作

    支持成员管理、应用管理和权限控制,适合企业团队协作开发。


二、为什么选择私有化部署?

对于个人开发者来说,使用云端版本可能更加方便。但对于企业来说,私有化部署通常是更稳妥的选择。

1. 数据安全

企业的文档、客户信息、合同、知识库、财务数据等通常具有较高敏感性。如果直接上传到第三方 SaaS 平台,可能存在合规与安全风险。

私有化部署后,所有数据均存储在企业自有服务器或内网环境中,能够更好地满足数据安全要求。

2. 模型可控

私有化部署可以同时接入公有云模型与本地模型。例如:

  • DeepSeek API;
  • 通义千问 API;
  • 智谱 GLM;
  • 百度文心一言;
  • Azure OpenAI;
  • Ollama 本地模型;
  • vLLM 部署的私有模型;
  • Xinference 部署的模型服务。

企业可以根据业务重要程度、成本预算、响应速度和隐私要求灵活选择模型。

3. 成本可控

如果企业有大量内部员工使用 AI 应用,长期调用 SaaS 服务可能产生较高费用。私有化部署后,可以结合本地模型、缓存策略、知识库优化等方式降低调用成本。

4. 易于二次开发

Dify 是开源项目,前端、后端、Worker 服务、插件能力均可二次开发。企业可以根据内部业务需求定制界面、登录方式、权限体系、审计策略、模型供应商、应用模板等。


三、整体部署架构

Dify 私有化部署通常包含以下组件:

用户浏览器
   │
   ▼
Nginx / 网关 / 负载均衡
   │
   ├── Dify Web 前端
   │
   ├── Dify API 后端
   │
   └── Dify Sandbox 代码执行服务
        │
        ▼
PostgreSQL 数据库
Redis 缓存
Vector Database 向量数据库
对象存储 / 本地文件存储
Worker 异步任务服务
模型服务 / 第三方 LLM API

核心组件说明

组件 作用
Web Dify 前端页面
API 后端接口服务
Worker 异步任务处理,例如文档索引、数据集处理
PostgreSQL 存储应用、用户、配置、日志等结构化数据
Redis 缓存、队列、任务状态
Vector Database 存储知识库向量数据
Sandbox 执行工作流中的代码节点
Nginx 反向代理、HTTPS、路由转发
Storage 存储上传文件、知识库原始文档等

Dify 默认 Docker Compose 部署中会包含大部分基础组件,适合中小规模场景快速落地。


四、服务器配置建议

不同规模的部署,对服务器资源要求不同。

1. 测试环境

适合个人体验、功能验证、少量内部测试。

配置项 推荐值
CPU 2 核及以上
内存 4GB 及以上
磁盘 50GB SSD
系统 Ubuntu 22.04 LTS
部署方式 Docker Compose

2. 小型生产环境

适合 20~100 人团队使用。

配置项 推荐值
CPU 4~8 核
内存 16GB
磁盘 200GB SSD
系统 Ubuntu 22.04 LTS / Debian 12
部署方式 Docker Compose + Nginx
数据库 可使用容器内 PostgreSQL,也可外置

3. 中大型生产环境

适合企业级使用,要求更高稳定性。

配置项 推荐值
CPU 8~16 核以上
内存 32GB~64GB
磁盘 500GB SSD 起
数据库 独立 PostgreSQL 集群
Redis 独立 Redis 或 Redis Cluster
向量库 Milvus / Weaviate / Qdrant
文件存储 MinIO / S3 兼容对象存储
部署方式 Kubernetes / Docker Swarm / 多节点部署

如果企业希望本地部署大模型,则还需要额外准备 GPU 服务器。例如部署 Qwen、Llama、DeepSeek Distill 等模型,一般需要 NVIDIA GPU,具体显存根据模型规模决定。


五、环境准备

下面以 Ubuntu 22.04 为例,介绍 Docker Compose 方式部署。

1. 更新系统

sudo apt update
sudo apt upgrade -y

2. 安装基础工具

sudo apt install -y \
  git \
  curl \
  wget \
  vim \
  unzip \
  ca-certificates \
  gnupg \
  lsb-release

3. 安装 Docker

curl -fsSL https://get.docker.com | bash

安装完成后查看版本:

docker -v

将当前用户加入 Docker 用户组:

sudo usermod -aG docker $USER

然后重新登录服务器,使权限生效。

4. 安装 Docker Compose

新版 Docker 通常已内置 Compose 插件,可以执行:

docker compose version

如果没有安装,可使用以下方式安装:

sudo apt install -y docker-compose-plugin

六、拉取 Dify 源码

Dify 官方源码托管在 GitHub,可以直接拉取:

git clone https://github.com/langgenius/dify.git
cd dify

建议在生产环境中固定版本,而不是直接使用最新主分支。

查看 Tag:

git tag

切换到稳定版本,例如:

git checkout 1.0.0

注意:实际版本号请以官方仓库发布为准。


七、Docker Compose 私有化部署

Dify 官方提供了 Docker 部署目录,进入 docker 目录:

cd docker

复制环境变量文件:

cp .env.example .env

编辑配置文件:

vim .env

1. 常用环境变量配置

以下是部分关键配置项示例:

# 控制台访问地址
CONSOLE_WEB_URL=https://dify.example.com

# API 服务地址
CONSOLE_API_URL=https://dify.example.com

# 应用访问地址
APP_WEB_URL=https://dify.example.com

# 服务端 API 地址
SERVICE_API_URL=https://dify.example.com

# 密钥,生产环境必须修改
SECRET_KEY=please-replace-with-a-strong-secret-key

# 数据库配置
DB_USERNAME=postgres
DB_PASSWORD=please-change-db-password
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify

# Redis 配置
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=please-change-redis-password

# 文件存储方式
STORAGE_TYPE=local

# 向量数据库类型
VECTOR_STORE=weaviate

生产环境中,强烈建议修改所有默认密码与密钥。

2. 启动服务

docker 目录下执行:

docker compose up -d

查看容器状态:

docker compose ps

查看日志:

docker compose logs -f

如果服务正常启动,默认可以通过服务器 IP 或配置的域名访问 Dify 控制台。


八、附:Docker Compose 部署源码示例

以下为一个简化版部署配置示例,仅用于理解整体结构。实际生产环境建议以 Dify 官方 docker-compose.yaml 为准,并结合企业环境调整。

version: "3.9"

services:
  api:
    image: langgenius/dify-api:latest
    container_name: dify-api
    restart: always
    env_file:
      - .env
    depends_on:
      - db
      - redis
      - weaviate
    networks:
      - dify

  worker:
    image: langgenius/dify-api:latest
    container_name: dify-worker
    restart: always
    command: celery -A app.celery worker -P gevent -c 1 --loglevel INFO
    env_file:
      - .env
    depends_on:
      - db
      - redis
      - weaviate
    networks:
      - dify

  web:
    image: langgenius/dify-web:latest
    container_name: dify-web
    restart: always
    env_file:
      - .env
    depends_on:
      - api
    networks:
      - dify

  db:
    image: postgres:15-alpine
    container_name: dify-db
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: please-change-db-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 please-change-redis-password
    volumes:
      - ./volumes/redis/data:/data
    networks:
      - dify

  weaviate:
    image: semitechnologies/weaviate:1.19.0
    container_name: dify-weaviate
    restart: always
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: "true"
      PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
      DEFAULT_VECTORIZER_MODULE: "none"
      CLUSTER_HOSTNAME: "node1"
    volumes:
      - ./volumes/weaviate:/var/lib/weaviate
    networks:
      - dify

  nginx:
    image: nginx:latest
    container_name: dify-nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/ssl:/etc/nginx/ssl
    depends_on:
      - web
      - api
    networks:
      - dify

networks:
  dify:
    driver: bridge

九、Nginx 反向代理配置

生产环境建议使用域名和 HTTPS 访问。例如域名为:

dify.example.com

Nginx 配置示例:

server {
    listen 80;
    server_name dify.example.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name dify.example.com;

    ssl_certificate /etc/nginx/ssl/dify.example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/dify.example.com.key;

    client_max_body_size 100M;

    location / {
        proxy_pass http://web:3000;
        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;
    }

    location /console/api {
        proxy_pass http://api:5001;
        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;
    }

    location /api {
        proxy_pass http://api:5001;
        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;
    }
}

如果使用官方 Docker Compose 中自带的 Nginx 配置,可以优先使用官方配置,并只修改域名、证书路径和上传大小限制。


十、初始化 Dify

服务启动后,通过浏览器访问:

https://dify.example.com

首次访问会进入初始化页面,需要创建管理员账号。

建议初始化完成后立即进行以下操作:

  1. 修改默认管理员密码;
  2. 配置模型供应商;
  3. 创建测试应用;
  4. 上传测试知识库;
  5. 验证 API 调用;
  6. 配置团队成员权限;
  7. 检查日志与任务执行状态。

十一、接入大模型

Dify 支持多种模型供应商。私有化部署后,通常有两类接入方式。

1. 接入云端模型 API

例如接入 DeepSeek、通义千问、智谱、OpenAI 等,只需要在 Dify 控制台中配置 API Key。

优点:

  • 接入简单;
  • 模型能力强;
  • 不需要自建 GPU 环境;
  • 适合快速上线。

缺点:

  • 数据可能需要出公网;
  • 调用成本与请求量相关;
  • 受供应商稳定性影响。

2. 接入本地模型

如果企业对数据安全要求较高,可以使用 Ollama、vLLM、Xinference 等工具部署本地模型,再通过 OpenAI Compatible API 接入 Dify。

例如使用 Ollama:

curl -fsSL https://ollama.com/install.sh | sh

拉取模型:

ollama pull qwen2.5:7b

启动服务后,Dify 中可配置 OpenAI 兼容接口:

Base URL: http://ollama-server:11434/v1
API Key: 任意字符串
Model Name: qwen2.5:7b

如果是生产环境,建议将模型服务部署在独立 GPU 服务器上,并通过内网地址供 Dify 调用。


十二、知识库与向量数据库配置

Dify 的 RAG 能力依赖知识库和向量数据库。常见向量数据库包括:

  • Weaviate;
  • Qdrant;
  • Milvus;
  • PGVector;
  • Elasticsearch;
  • OpenSearch。

中小型部署可以使用默认向量库,快速实现知识库问答。大型生产环境建议选择更易维护和扩展的独立向量数据库,例如 Milvus 或 Qdrant。

知识库优化建议

  1. 文档切片大小适中

    切片太小会丢失上下文,切片太大则影响召回准确率。一般可以从 500~1000 tokens 开始测试。

  2. 启用重排序模型

    对准确性要求较高的场景,可以接入 rerank 模型提升召回结果质量。

  3. 清洗原始文档

    上传知识库前建议清理页眉页脚、目录、重复文本和无关内容。

  4. 按业务分类建库

    不建议所有文档混在一个知识库中。可以按部门、业务线、产品类型拆分。

  5. 设置合理召回数量

    召回数量过少可能遗漏答案,过多会增加上下文成本,并可能引入噪音。


十三、API 调用示例源码

Dify 应用发布后,可以通过 API 被第三方系统调用。以下是 Python 调用示例。

import requests

API_KEY = "app-your-dify-api-key"
API_URL = "https://dify.example.com/v1/chat-messages"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

payload = {
    "inputs": {},
    "query": "请介绍一下公司的报销流程",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "user-001"
}

response = requests.post(API_URL, headers=headers, json=payload)

print(response.status_code)
print(response.json())

如果使用流式响应,可以将 response_mode 设置为 streaming

import requests

API_KEY = "app-your-dify-api-key"
API_URL = "https://dify.example.com/v1/chat-messages"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

payload = {
    "inputs": {},
    "query": "帮我生成一份项目周报",
    "response_mode": "streaming",
    "conversation_id": "",
    "user": "user-002"
}

with requests.post(API_URL, headers=headers, json=payload, stream=True) as r:
    for line in r.iter_lines():
        if line:
            print(line.decode("utf-8"))

十四、源码二次开发方案

如果企业希望对 Dify 进行深度定制,可以采用源码部署或源码构建镜像的方式。

Dify 源码主要包括:

dify
├── api        # 后端服务,主要为 Python
├── web        # 前端服务,主要为 Next.js
├── docker     # Docker Compose 部署配置
├── scripts    # 脚本文件
└── README.md

1. 后端开发

进入后端目录:

cd api

安装依赖通常可以使用 Poetry 或官方推荐方式。开发时建议使用虚拟环境:

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

启动后端服务前,需要准备 PostgreSQL、Redis、向量数据库等依赖。

2. 前端开发

进入前端目录:

cd web

安装依赖:

npm install

启动开发服务:

npm run dev

前端常见定制方向包括:

  • 修改企业 Logo;
  • 修改登录页样式;
  • 增加企业内部导航;
  • 对接统一认证入口;
  • 调整应用市场展示;
  • 隐藏部分不需要的模型供应商;
  • 增加自定义页面。

3. 构建自定义镜像

如果修改了源码,建议构建企业内部镜像,并推送到私有镜像仓库。

示例:

docker build -t registry.example.com/ai/dify-api:custom ./api
docker build -t registry.example.com/ai/dify-web:custom ./web

推送镜像:

docker push registry.example.com/ai/dify-api:custom
docker push registry.example.com/ai/dify-web:custom

然后在 docker-compose.yaml 中替换镜像地址:

services:
  api:
    image: registry.example.com/ai/dify-api:custom

  worker:
    image: registry.example.com/ai/dify-api:custom

  web:
    image: registry.example.com/ai/dify-web:custom

十五、数据备份方案

私有化部署后,备份非常重要。至少需要备份以下内容:

  1. PostgreSQL 数据库;
  2. Redis 数据;
  3. 向量数据库数据;
  4. 上传文件目录;
  5. .env 配置文件;
  6. Nginx 配置和 SSL 证书;
  7. 自定义源码和镜像版本。

PostgreSQL 备份脚本

#!/bin/bash

DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/data/backup/dify
CONTAINER_NAME=dify-db
DB_USER=postgres
DB_NAME=dify

mkdir -p ${BACKUP_DIR}

docker exec ${CONTAINER_NAME} pg_dump -U ${DB_USER} ${DB_NAME} > ${BACKUP_DIR}/dify_${DATE}.sql

find ${BACKUP_DIR} -name "*.sql" -mtime +14 -delete

保存为:

backup_dify_db.sh

添加执行权限:

chmod +x backup_dify_db.sh

配置定时任务:

crontab -e

添加:

0 2 * * * /data/scripts/backup_dify_db.sh

表示每天凌晨 2 点自动备份数据库。

文件目录备份

如果使用本地存储,需要备份 Docker volumes:

tar -zcvf dify_volumes_$(date +%Y%m%d).tar.gz ./volumes

生产环境建议将备份同步到异地存储或对象存储,避免单机故障导致数据丢失。


十六、安全加固建议

Dify 私有化部署不能只关注“能跑起来”,还需要考虑安全。

1. 使用 HTTPS

生产环境必须启用 HTTPS,避免 API Key、用户登录信息和敏感数据明文传输。

2. 修改默认密钥

.env 中的 SECRET_KEY、数据库密码、Redis 密码等必须修改为高强度随机字符串。

可以使用以下命令生成随机密钥:

openssl rand -base64 42

3. 限制后台访问

如果 Dify 只供内部使用,建议通过防火墙、VPN、零信任网关或内网 DNS 限制访问范围。

4. 控制 API Key 权限

Dify 应用 API Key 应按应用分别生成,不建议多个系统共用同一个 Key。废弃应用应及时删除 Key。

5. 定期升级

关注 Dify 官方版本更新,及时修复安全漏洞和兼容性问题。升级前应先在测试环境验证。

6. 审计日志

对企业重要业务场景,建议保留用户调用日志、应用变更记录和管理员操作记录,满足后续审计要求。


十七、升级方案

升级 Dify 前,务必先备份数据。

常规升级流程如下:

cd dify
git fetch --all
git checkout <目标版本>
cd docker
docker compose pull
docker compose down
docker compose up -d

升级后查看日志:

docker compose logs -f

如果涉及数据库迁移,需按照官方版本说明执行对应操作。生产环境建议遵循以下流程:

  1. 测试环境升级验证;
  2. 备份生产数据;
  3. 选择低峰期停机;
  4. 拉取新版本镜像;
  5. 启动服务并检查日志;
  6. 验证登录、应用调用、知识库检索、API 调用;
  7. 保留旧版本回滚方案。

十八、常见问题与解决方案

1. 页面打不开

检查容器是否正常:

docker compose ps

检查日志:

docker compose logs -f nginx
docker compose logs -f api
docker compose logs -f web

确认防火墙是否放行 80、443 端口。

2. API 报 500 错误

通常需要查看后端日志:

docker compose logs -f api

常见原因包括数据库连接失败、Redis 密码错误、环境变量配置错误、模型供应商配置异常等。

3. 知识库一直索引中

查看 Worker 日志:

docker compose logs -f worker

如果 Worker 没有正常运行,文档切片、向量化和索引任务会卡住。

4. 上传文件失败

检查 client_max_body_size 配置,确认 Nginx 允许上传足够大的文件:

client_max_body_size 100M;

同时检查存储目录权限和磁盘空间。

5. 模型调用失败

检查模型供应商 API Key、Base URL、模型名称是否正确。如果是本地模型,确认 Dify 容器能访问模型服务地址。

可以进入容器测试网络:

docker exec -it dify-api sh
curl http://ollama-server:11434

十九、推荐生产落地方案

对于企业内部生产使用,推荐如下方案:

入口层:Nginx / 企业网关 / HTTPS
应用层:Dify API、Web、Worker 多容器部署
数据层:独立 PostgreSQL + Redis
向量层:Qdrant / Milvus / Weaviate
存储层:MinIO 或 S3 兼容对象存储
模型层:云端大模型 + 本地模型混合接入
安全层:VPN / SSO / 防火墙 / 审计日志
运维层:Prometheus / Grafana / 日志采集 / 定时备份

如果只是小团队使用,可以先采用官方 Docker Compose 单机部署,后续随着用户量增长逐步拆分数据库、Redis、向量库和文件存储。


二十、总结

Dify 私有化部署是企业落地大模型应用的一条高效路径。它既保留了低代码 AI 应用开发的便利性,又具备较强的扩展能力和私有化可控性。

通过本文方案,可以完成以下目标:

  • 在企业服务器上部署 Dify;
  • 使用 Docker Compose 快速启动完整服务;
  • 通过 Nginx 和 HTTPS 提供安全访问;
  • 接入云端或本地大模型;
  • 构建企业知识库问答应用;
  • 通过 API 与内部系统集成;
  • 基于源码进行二次开发;
  • 建立备份、升级和安全加固机制。

如果是首次部署,建议先使用单机 Docker Compose 方案快速验证业务价值;当应用逐渐进入生产阶段后,再逐步演进为数据库外置、对象存储外置、向量数据库独立、模型服务独立的企业级架构。

Dify 的价值不只在于“部署一个 AI 平台”,更在于帮助企业形成可持续迭代的 AI 应用工程体系。通过私有化部署,企业可以在安全可控的基础上,把大模型能力真正嵌入到自己的业务流程中。

目录结构
全文