02-Dify平台部署与环境配置

第二章:Dify 平台部署与环境配置

2.1 部署概述

2.1.1 部署方式选择

Dify 提供了多种部署方式以适应不同的使用场景和需求:

部署方式 适用场景 优势 劣势
Dify 云服务 快速体验、小规模使用 零运维、即开即用 数据在云端、功能受限
Docker Compose 开发测试、中小规模生产 部署简单、资源可控 需要 Docker 基础
本地源码 二次开发、深度定制 完全可控、便于调试 环境配置复杂
云服务商部署 企业级生产环境 高可用、易扩展 成本较高
宝塔面板 国内服务器管理 可视化管理 功能受限

2.1.2 系统要求

无论选择哪种部署方式,都需要满足以下基本系统要求:

最低配置(开发/测试)

  • CPU:2 核心
  • 内存:4 GB
  • 存储:20 GB SSD
  • 操作系统:Linux(推荐 Ubuntu 22.04)、macOS、Windows(WSL2)

推荐配置(生产环境)

  • CPU:4 核心以上
  • 内存:8 GB 以上
  • 存储:50 GB SSD 以上
  • 操作系统:Ubuntu 22.04 LTS

网络要求

  • 能够访问 Docker Hub(或配置镜像加速)
  • 能够访问模型 API(如 OpenAI、Anthropic 等)
  • 开放必要的端口(默认 80/443)

2.2 Docker Compose 部署(推荐)

2.2.1 前置准备

Docker Compose 是最推荐的部署方式,它将所有服务打包在一起,一键启动。

安装 Docker

对于 Ubuntu 系统:

# 更新包索引
sudo apt-get update

# 安装必要的包
sudo apt-get install ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
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

# 安装 Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装
docker --version
docker compose version

对于 macOS:

# 使用 Homebrew 安装
brew install --cask docker

# 启动 Docker Desktop 应用
# 验证安装
docker --version

对于 Windows:

  1. 安装 WSL2(Windows Subsystem for Linux)
  2. 下载并安装 Docker Desktop
  3. 在设置中启用 WSL2 后端

2.2.2 克隆项目

# 克隆 Dify 仓库
git clone https://github.com/langgenius/dify.git

# 进入 docker 目录
cd dify/docker

如果网络访问 GitHub 较慢,可以使用镜像:

git clone https://gitee.com/mirrors/dify.git
cd dify/docker

2.2.3 配置环境变量

# 复制环境变量示例文件
cp .env.example .env

# 编辑环境变量(可选,使用默认值也可启动)
nano .env

重要的环境变量说明:

# 应用密钥(生产环境必须修改,请生成随机字符串替换)
SECRET_KEY=your-secret-key-replace-with-random-string

# 数据库配置
DB_USERNAME=postgres
DB_PASSWORD=difyai123456
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify

# Redis 配置
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=difyai123456

# 向量数据库(默认使用 Weaviate)
VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080

# 存储配置
STORAGE_TYPE=local
STORAGE_LOCAL_PATH=storage

# 日志级别
LOG_LEVEL=INFO

2.2.4 启动服务

# 启动所有服务(后台运行)
docker compose up -d

# 查看服务状态
docker compose ps

# 查看日志
docker compose logs -f

首次启动时,Docker 会拉取所需的镜像,可能需要几分钟时间。

2.2.5 访问 Dify

服务启动成功后:

  1. 打开浏览器访问 http://localhost(或服务器 IP)
  2. 首次访问会进入初始化设置页面
  3. 设置管理员邮箱和密码
  4. 完成初始化后即可开始使用

2.2.6 常用运维命令

# 停止服务
docker compose stop

# 重启服务
docker compose restart

# 停止并删除容器
docker compose down

# 停止并删除容器和数据卷(谨慎使用)
docker compose down -v

# 更新到最新版本
git pull origin main
docker compose down
docker compose pull
docker compose up -d

# 查看资源使用情况
docker stats

2.3 本地源码部署

2.3.1 适用场景

本地源码部署适合以下场景:

  • 需要对 Dify 进行二次开发
  • 需要调试和分析源码
  • 需要更细粒度的配置控制
  • 开发环境搭建

2.3.2 环境准备

后端环境

  • Python 3.10+
  • Poetry(Python 包管理器)
  • PostgreSQL 15+
  • Redis 6+

前端环境

  • Node.js 18+
  • pnpm 包管理器

2.3.3 后端部署

安装 Python 依赖

# 克隆仓库
git clone https://github.com/langgenius/dify.git
cd dify

# 进入 api 目录
cd api

# 安装 Poetry
pip install poetry

# 安装依赖
poetry install

# 如果安装过程中遇到问题,可以尝试:
poetry install --no-root

配置数据库

# 创建 PostgreSQL 数据库
sudo -u postgres psql

CREATE DATABASE dify;
CREATE USER dify WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE dify TO dify;
\q

配置环境变量

# 复制配置文件
cp .env.example .env

# 编辑配置
nano .env

关键配置项:

# Flask 配置
FLASK_DEBUG=true
FLASK_ENV=development

# 数据库
DB_USERNAME=dify
DB_PASSWORD=your_password
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=dify

# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

# 密钥
SECRET_KEY=your_secret_key

初始化数据库

# 运行数据库迁移
poetry run flask db upgrade

启动后端服务

# 启动 API 服务
poetry run flask run --host=0.0.0.0 --port=5001

# 在另一个终端启动 Worker
poetry run celery -A app.celery worker -l INFO

2.3.4 前端部署

# 进入 web 目录
cd ../web

# 安装 pnpm(如果未安装)
npm install -g pnpm

# 安装依赖
pnpm install

# 配置环境变量
cp .env.example .env.local
nano .env.local

前端环境变量:

# API 地址
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api

启动前端开发服务器:

pnpm dev

访问 http://localhost:3000 即可看到 Dify 界面。

2.4 云服务部署选项

2.4.1 Zeabur 部署

Zeabur 是一个现代化的云平台,支持一键部署 Dify。

部署步骤

  1. 注册 Zeabur 账号:https://zeabur.com
  2. 点击 Dify 模板进行部署
  3. 等待部署完成
  4. 获取访问地址

优势

  • 一键部署,无需配置
  • 自动扩缩容
  • 支持自定义域名
  • 提供免费额度

2.4.2 阿里云部署

使用阿里云容器服务

  1. 创建 Kubernetes 集群
  2. 配置 kubectl 连接
  3. 部署 Dify Helm Chart:
# 添加 Helm 仓库
helm repo add dify https://langgenius.github.io/dify-helm

# 安装 Dify
helm install dify dify/dify \
  --set ingress.enabled=true \
  --set ingress.hostname=your-domain.com

2.4.3 AWS 部署

使用 AWS ECS

  1. 创建 ECS 集群
  2. 配置任务定义
  3. 设置服务和负载均衡
  4. 配置 RDS(PostgreSQL)和 ElastiCache(Redis)

使用 AWS EKS

  1. 创建 EKS 集群
  2. 配置 kubectl
  3. 使用 Helm 部署

2.5 环境变量详解

2.5.1 应用配置

# 基础配置
SECRET_KEY=your-secret-key  # 加密密钥,必须修改
CONSOLE_WEB_URL=http://localhost  # 控制台地址
SERVICE_API_URL=http://localhost  # API 服务地址

# 调试模式
DEBUG=false  # 生产环境设为 false
LOG_LEVEL=INFO  # 日志级别:DEBUG, INFO, WARNING, ERROR

2.5.2 数据库配置

# PostgreSQL
DB_USERNAME=postgres
DB_PASSWORD=difyai123456
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify

# 连接池配置
SQLALCHEMY_POOL_SIZE=30
SQLALCHEMY_POOL_RECYCLE=3600
SQLALCHEMY_ECHO=false

2.5.3 Redis 配置

# Redis 连接
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=difyai123456
REDIS_DB=0

# 使用 Sentinel(高可用)
REDIS_USE_SENTINEL=false
REDIS_SENTINEL_MASTER_NAME=mymaster
REDIS_SENTINEL_NODES=sentinel1:26379,sentinel2:26379

2.5.4 向量数据库配置

Dify 支持多种向量数据库,通过 VECTOR_STORE 变量选择:

Weaviate(默认)

VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih

Qdrant

VECTOR_STORE=qdrant
QDRANT_URL=http://qdrant:6333
QDRANT_API_KEY=your-api-key

Milvus

VECTOR_STORE=milvus
MILVUS_HOST=milvus
MILVUS_PORT=19530
MILVUS_USER=root
MILVUS_PASSWORD=Milvus

Chroma

VECTOR_STORE=chroma
CHROMA_HOST=chroma
CHROMA_PORT=8000

2.5.5 存储配置

本地存储

STORAGE_TYPE=local
STORAGE_LOCAL_PATH=storage

Amazon S3

STORAGE_TYPE=s3
S3_ENDPOINT=https://s3.amazonaws.com
S3_BUCKET_NAME=dify-storage
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_REGION=us-east-1

阿里云 OSS

STORAGE_TYPE=aliyun-oss
ALIYUN_OSS_BUCKET_NAME=dify-storage
ALIYUN_OSS_ACCESS_KEY=your-access-key
ALIYUN_OSS_SECRET_KEY=your-secret-key
ALIYUN_OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com

2.5.6 邮件配置

MAIL_TYPE=smtp
MAIL_DEFAULT_SEND_FROM=noreply@your-domain.com
SMTP_SERVER=smtp.your-domain.com
SMTP_PORT=587
SMTP_USERNAME=your-username
SMTP_PASSWORD=your-password
SMTP_USE_TLS=true

2.6 高可用部署

2.6.1 架构设计

生产环境的高可用架构通常包括:

                    ┌─────────────┐
                    │   负载均衡   │
                    │  (Nginx/ALB) │
                    └──────┬──────┘
                           │
          ┌────────────────┼────────────────┐
          │                │                │
    ┌─────▼─────┐    ┌─────▼─────┐    ┌─────▼─────┐
    │  Web 1    │    │  Web 2    │    │  Web 3    │
    └─────┬─────┘    └─────┬─────┘    └─────┬─────┘
          │                │                │
          └────────────────┼────────────────┘
                           │
          ┌────────────────┼────────────────┐
          │                │                │
    ┌─────▼─────┐    ┌─────▼─────┐    ┌─────▼─────┐
    │  API 1    │    │  API 2    │    │  API 3    │
    └─────┬─────┘    └─────┬─────┘    └─────┬─────┘
          │                │                │
          └────────────────┼────────────────┘
                           │
    ┌──────────────────────┼──────────────────────┐
    │                      │                      │
┌───▼───┐            ┌─────▼─────┐          ┌─────▼─────┐
│ Redis │            │PostgreSQL │          │ 向量数据库 │
│ Cluster│           │  主从复制  │          │   集群    │
└───────┘            └───────────┘          └───────────┘

2.6.2 负载均衡配置

使用 Nginx 作为反向代理和负载均衡:

upstream dify_web {
    least_conn;
    server web1:3000 weight=1;
    server web2:3000 weight=1;
    server web3:3000 weight=1;
}

upstream dify_api {
    least_conn;
    server api1:5001 weight=1;
    server api2:5001 weight=1;
    server api3:5001 weight=1;
}

server {
    listen 80;
    server_name your-domain.com;
    
    location / {
        proxy_pass http://dify_web;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    
    location /api {
        proxy_pass http://dify_api;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

2.6.3 数据库高可用

PostgreSQL 主从复制配置

主节点(postgresql.conf):

wal_level = replica
max_wal_senders = 10
wal_keep_size = 64MB

从节点恢复配置(recovery.conf):

standby_mode = 'on'
primary_conninfo = 'host=master_ip port=5432 user=replication password=xxx'

2.6.4 Redis 集群配置

# 使用 Redis Sentinel
REDIS_USE_SENTINEL=true
REDIS_SENTINEL_MASTER_NAME=mymaster
REDIS_SENTINEL_NODES=sentinel1:26379,sentinel2:26379,sentinel3:26379
REDIS_SENTINEL_PASSWORD=your-password

2.7 常见问题排查

2.7.1 服务启动失败

问题:Docker 容器无法启动

排查步骤

# 查看容器状态
docker compose ps

# 查看容器日志
docker compose logs <service_name>

# 常见原因:
# 1. 端口冲突 - 检查端口占用
lsof -i :80

# 2. 内存不足 - 检查系统资源
free -h

# 3. 配置错误 - 检查 .env 文件

2.7.2 数据库连接问题

问题:无法连接到数据库

解决方案

# 检查数据库服务状态
docker compose logs db

# 测试数据库连接
docker compose exec db psql -U postgres -d dify

# 检查连接配置
# 确认 .env 中的数据库配置正确

2.7.3 向量数据库问题

问题:知识库功能异常

排查步骤

# 检查向量数据库服务
docker compose logs weaviate

# 测试向量数据库连接
curl http://localhost:8080/v1/.well-known/ready

# 如果使用外部向量数据库,检查网络连通性

2.7.4 模型调用失败

问题:调用模型 API 失败

常见原因

  1. API Key 无效或过期
  2. 网络无法访问模型服务
  3. 超出速率限制或配额

解决方案

# 检查网络连通性
curl https://api.openai.com/v1/models -H "Authorization: Bearer YOUR_API_KEY"

# 如果在中国大陆,可能需要配置代理
HTTP_PROXY=http://proxy:port
HTTPS_PROXY=http://proxy:port

2.7.5 性能问题

问题:系统响应缓慢

优化建议

# 1. 增加 Worker 数量
CELERY_WORKER_CONCURRENCY=8

# 2. 优化数据库连接池
SQLALCHEMY_POOL_SIZE=50

# 3. 配置 Redis 缓存
# 确保 Redis 性能正常

# 4. 检查资源使用
docker stats

2.8 安全配置

2.8.1 基础安全

# 1. 修改默认密钥
SECRET_KEY=your-strong-secret-key

# 2. 禁用调试模式
DEBUG=false

# 3. 配置 HTTPS
# 使用 Nginx 配置 SSL 证书

2.8.2 网络安全

# 1. 限制数据库访问
# 只允许应用服务器连接

# 2. 配置防火墙规则
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

# 3. 使用内网通信
# 将数据库和 Redis 放在内网

2.8.3 数据安全

# 1. 定期备份数据库
docker compose exec db pg_dump -U postgres dify > backup.sql

# 2. 加密敏感配置
# 使用环境变量或密钥管理服务

# 3. 日志脱敏
# 确保日志中不包含敏感信息

2.9 本章小结

通过本章的学习,你应该掌握:

  1. 部署方式选择:根据场景选择合适的部署方式
  2. Docker Compose 部署:最简单的部署方式,适合大多数场景
  3. 源码部署:适合二次开发和深度定制
  4. 环境变量配置:理解各类配置项的作用
  5. 高可用架构:生产环境的架构设计
  6. 问题排查:常见问题的解决方法

2.10 思考与练习

  1. 实践练习

    • 使用 Docker Compose 部署一个完整的 Dify 实例
    • 修改环境变量,配置你自己的密钥
    • 尝试连接不同的向量数据库
  2. 思考题

    • 在生产环境中,如何设计 Dify 的高可用架构?
    • 如何监控 Dify 服务的运行状态?
  3. 扩展学习

    • 了解 Kubernetes 部署方案
    • 学习 Docker 网络和存储配置

下一章预告:第三章将介绍应用构建基础,包括各种应用类型的创建和配置方法。

posted @ 2025-11-29 13:06  我才是银古  阅读(0)  评论(0)    收藏  举报