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 是一个完全开源的向量搜索解决方案,具有以下优势:
- 与 PostgreSQL 无缝集成,可以利用 PostgreSQL 成熟的事务、备份和扩展生态
- 支持多种距离计算方法(欧几里得距离、余弦相似度和内积)
- 支持 HNSW 索引,查询性能优异
- 简单易用,不需要额外的服务管理
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
- 准备好 SSL 证书和密钥,放在
conf/nginx/ssl
目录 - 修改 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 版本
- 首先备份数据:
cp -r storage storage_backup
cp -r pgvector pgvector_backup
- 更新镜像版本并重启服务:
# 修改 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 应用开发的道路上取得成功!
评论