Dify 平台部署教程

前言

在大模型应用开发领域,Dify 作为一款强大的 LLM 应用开发平台,正受到越来越多开发者的青睐。本文将详细介绍如何使用 Docker Compose 快速部署 Dify 平台,让你能够轻松构建自己的 AI 应用。

Dify 是什么?

Dify 是一个开源的大型语言模型(LLM)应用开发平台,支持构建各种基于大语言模型的应用,如聊天机器人、知识库问答、创意写作助手等。通过 Dify,你可以:

  • 快速构建基于大模型的应用
  • 管理和优化提示词
  • 创建和训练自己的知识库
  • 使用插件扩展功能
  • 监控应用性能和使用情况

部署环境要求

在开始部署前,请确保你的环境满足以下要求:

  • Docker >= 20.10.0
  • Docker Compose >= v2.0.0
  • 至少 4GB 内存
  • 至少 20GB 磁盘空间

快速部署步骤

1. 获取部署项目

首先,克隆部署 dify-deployment 仓库到本地:

git clone https://github.com/jiaxudonggit/dify-deployment.git
cd dify-deployment

2. 创建配置文件

复制示例配置文件并按需修改:

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

# 编辑配置文件
vim .env

在配置文件中,至少需要设置以下几个关键参数:

  • CONSOLE_API_URL: 控制台 API 地址
  • CONSOLE_WEB_URL: 控制台 Web 地址
  • SERVICE_API_URL: 服务 API 地址
  • APP_API_URL: 应用 API 地址
  • APP_WEB_URL: 应用 Web 地址
  • SECRET_KEY: 应用密钥,建议使用随机生成的强密钥
  • INIT_PASSWORD: 初始管理员密码
  • VECTOR_STORE: 向量数据库类型,这里我们使用 pgvector

3. 创建必要目录

mkdir -p storage/logs nginx/logs pgvector/data

4. 启动服务

使用 Docker Compose 启动所有服务:

docker-compose up -d

此命令会一次性启动 Dify 所需的所有容器,包括 API 服务、Worker 服务、Web 前端、数据库、缓存、pgvector 向量数据库等。

5. 检查服务状态

查看所有容器是否正常运行:

docker-compose ps

确保所有容器的状态都是 "Up"。

6. 访问服务

浏览器访问 http://localhost 即可看到 Dify 的登录页面。可以通过浏览器访问 http://localhost/install 来访问 Dify 仪表板并开始初始化过程。

服务架构解析

Dify 部署包含以下核心服务:

1. API 服务

api:
  container_name: ${CONTAINER_NAME}-api
  image: langgenius/dify-api:1.3.1
  restart: always
  environment:
    MODE: api
  volumes:
    - ${DIFY_ROOT_PATH}/storage:/app/api/storage

API 服务是 Dify 的核心,提供所有后端功能接口。

2. Worker 服务

worker:
  container_name: ${CONTAINER_NAME}-worker
  image: langgenius/dify-api:1.3.1
  restart: always
  environment:
    MODE: worker
  volumes:
    - ${DIFY_ROOT_PATH}/storage:/app/api/storage

Worker 服务用于处理异步任务和队列,确保大规模任务能够高效处理。

3. Web 前端

web:
  container_name: ${CONTAINER_NAME}-web
  image: langgenius/dify-web:1.3.1
  restart: always

Web 前端提供用户界面,是用户与 Dify 交互的主要入口。

4. pgvector 向量数据库

pgvector:
  container_name: ${CONTAINER_NAME}-pgvector
  image: pgvector/pgvector:pg16
  restart: always
  environment:
    POSTGRES_USER: ${PGVECTOR_USER:-postgres}
    POSTGRES_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456}
    POSTGRES_DB: ${PGVECTOR_DATABASE:-dify}
  volumes:
    - ${DIFY_ROOT_PATH}/pgvector/data:/var/lib/postgresql/data

pgvector 是一个基于 PostgreSQL 的向量数据库扩展,用于存储和检索向量嵌入,支持高效的相似度搜索功能。pgvector 是一个完全开源的向量搜索解决方案,具有以下优势:

  1. 与 PostgreSQL 无缝集成,可以利用 PostgreSQL 成熟的事务、备份和扩展生态
  2. 支持多种距离计算方法(欧几里得距离、余弦相似度和内积)
  3. 支持 HNSW 索引,查询性能优异
  4. 简单易用,不需要额外的服务管理

5. Nginx 反向代理

nginx:
  container_name: ${CONTAINER_NAME}-nginx
  image: nginx:latest
  restart: always
  ports:
    - "${NGINX_PORT:-80}:80"
    - "${NGINX_SSL_PORT:-443}:443"
  depends_on:
    - api
    - web
    - plugin_daemon

Nginx 服务作为反向代理,将请求路由到正确的服务。

关键配置详解

基础环境变量

变量名 说明 默认值 示例
CONSOLE_API_URL 控制台 API URL http://localhost/console/api
CONSOLE_WEB_URL 控制台 Web URL http://localhost
SERVICE_API_URL 服务 API URL http://localhost/api
APP_API_URL 应用 API URL http://localhost/v1
APP_WEB_URL 应用 Web URL http://localhost
CONTAINER_NAME 容器名称前缀 dify myproject
NGINX_PORT Nginx HTTP 端口 80 8080
DIFY_ROOT_PATH 数据存储根路径 ./storage /data/dify

向量数据库配置

本项目使用 pgvector 作为默认的向量数据库:

变量名 说明 默认值 示例
VECTOR_STORE 向量数据库类型 pgvector pgvector
PGVECTOR_HOST PGVector 主机 pgvector pgvector
PGVECTOR_PORT PGVector 端口 5432 5432
PGVECTOR_USER PGVector 用户名 postgres postgres
PGVECTOR_PASSWORD PGVector 密码 difyai123456 your-password
PGVECTOR_DATABASE PGVector 数据库名 dify dify_vector
PGVECTOR_PORT_EXPOSED PGVector 暴露的端口 5433 5433

高级配置指南

1. 自定义端口配置

如需修改默认端口,可在.env 文件中设置:

NGINX_PORT=8080
WEB_PORT=3001
API_PORT=5002
PGVECTOR_PORT_EXPOSED=5432

2. 配置 HTTPS

  1. 准备好 SSL 证书和密钥,放在 conf/nginx/ssl 目录
  2. 修改 nginx 配置文件,添加 HTTPS 配置:
server {
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    
    # 其他配置与HTTP配置相同
    # ...
}

3. 自定义域名

修改 conf/nginx/conf.d/default.conf 文件,将 server_name localhost; 改为 server_name yourdomain.com;,然后重启 Nginx:

docker-compose restart dify-nginx

4. 向量数据库优化

pgvector 支持多种索引类型以优化向量搜索性能:

  • HNSW 索引:适用于大规模向量集合,提供高查询性能
  • IVFFlat 索引:适用于中等规模的向量集合

使用时需要考虑数据量和查询性能需求来选择合适的索引类型。

常见问题及解决方案

1. 数据存储位置

所有数据都存储在相应的目录下:

  • API 数据:storage 目录
  • 向量数据:pgvector/data 目录
  • 日志:nginx/logs 目录

你可以通过.env 中的 DIFY_ROOT_PATH 变量修改存储根路径。

2. 如何升级 Dify 版本

  1. 首先备份数据:
cp -r storage storage_backup
cp -r pgvector pgvector_backup
  1. 更新镜像版本并重启服务:
# 修改 docker-compose.yml 中的镜像版本
# 例如:langgenius/dify-api:1.3.1 -> langgenius/dify-api:1.4.0

# 重新拉取镜像并重启服务
docker-compose pull
docker-compose up -d

3. 如何查看日志

# 查看所有服务日志
docker-compose logs

# 查看特定服务日志
docker-compose logs dify-api

# 查看 pgvector 日志
docker-compose logs dify-pgvector

# 实时查看日志
docker-compose logs -f dify-api

4. pgvector 连接问题

如果遇到向量数据库连接问题,可以通过以下命令检查:

# 检查 pgvector 容器状态
docker-compose ps dify-pgvector

# 检查 pgvector 日志
docker-compose logs dify-pgvector

# 直接连接 pgvector 进行测试
docker exec -it dify-pgvector psql -U postgres -d dify

优化建议

1. 资源分配

对于生产环境,建议至少分配:

  • 4 核 CPU
  • 8GB 内存
  • 50GB 磁盘空间

2. 性能优化

  • 使用 SSD 存储提高数据读写速度,特别是对 pgvector
  • 为 pgvector 配置足够的内存,推荐至少 4GB
  • 对于大型知识库,考虑使用更高性能的向量数据库索引
  • 使用 CDN 加速静态资源访问
  • 配置合适的 worker 数量处理并发请求

3. 安全建议

  • 更改所有默认密码,尤其是 pgvector 数据库密码
  • 配置强密钥
  • 启用 HTTPS
  • 限制 API 访问权限
  • 定期备份数据
  • 限制 pgvector 对外暴露的端口访问

结语

通过本教程,你应该已经成功部署了基于 pgvector 向量数据库的 Dify 平台,并了解了基本的配置和优化方法。pgvector 作为一个开源的向量数据库解决方案,为 Dify 提供了高效、可靠的向量存储和检索能力,是构建 AI 应用的理想选择。

随着不断探索 Dify 的功能,你可以尝试更多高级特性,如自定义模型、跨平台集成、多语言支持等。希望本教程对你有所帮助,祝你在 AI 应用开发的道路上取得成功!

参考资料