问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Dify向量数据库迁移至Milvus实战指南

创作时间:
作者:
@小白创作中心

Dify向量数据库迁移至Milvus实战指南

引用
CSDN
1.
https://blog.csdn.net/u013743338/article/details/141806378

本文记录了Dify(版本0.7.2)向量数据库从Weaviate迁移到Milvus的过程,详细描述了环境配置、命令执行以及遇到的问题和解决方案。对于使用Dify并计划进行数据库迁移的用户具有重要参考价值。

一、备份

在进行任何迁移操作之前,首先需要备份当前的数据库内容。使用以下命令对挂载目录进行备份:

tar -cvf volumes-$(date +%s).tgz volumes

二、修改环境变量

找到dify/docker/.env文件,修改其中的VETOR_STORE值为milvus(默认为weaviate)。同时,建议同步修改compose-config.yml中的Milvus版本,并添加Milvus可视化管理工具Attu。完整的配置如下:

milvus-standalone:
  container_name: milvus-standalone
  image: milvusdb/milvus:v2.3.1
  profiles:
- milvus
  command: [ "milvus", "run", "standalone" ]
  environment:
    ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379}
    MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000}
    common.security.authorizationEnabled: ${MILVUS_AUTHORIZATION_ENABLED:-true}
  volumes:
- ./volumes/milvus/milvus:/var/lib/milvus
  healthcheck:
    test: [ "CMD", "curl", "-f", "http://localhost:9091/healthz" ]
    interval: 30s
    start_period: 90s
    timeout: 20s
    retries: 3
  ports:
- "19530:19530"  # Milvus gRPC port
- "9091:9091"    # Milvus HTTP port
  depends_on:
- "etcd"
- "minio"
  networks:
- milvus

三、重启服务

执行以下命令重启Dify服务:

docker-compose down
docker-compose up -d

重启后,检查Milvus相关容器是否正常启动:

四、执行迁移命令

尝试执行数据库迁移命令:

docker exec -it docker-api-1 flask vdb-migrate

如果遇到连接失败的错误,可能是由于端口未开放。需要在compose-config.yml中确保Milvus的端口已正确映出:

ports:
- "19530:19530"  # Milvus gRPC port
- "9091:9091"    # Milvus HTTP port

五、最终解决方案

经过多次尝试,发现需要在API服务的环境变量中添加Milvus的连接信息:

api:
  image: langgenius/dify-api:0.7.2
  restart: always
  environment:
    # Use the shared environment variables.
    <<: *shared-api-worker-env
    # Startup mode, 'api' starts the API server.
    MODE: api
    MILVUS_HOST: milvus-standalone  # Milvus服务的容器名称
    MILVUS_PORT: 19530              # Milvus服务的端口
  depends_on:
- db
- redis
  volumes:
    # Mount the storage directory to the container, for storing user files.
- ./volumes/app/storage:/app/api/storage
  networks:
- ssrf_proxy_network
- default

同时,也需要在Worker和Web服务中添加相同的环境变量:

worker:
  image: langgenius/dify-api:0.7.2
  restart: always
  environment:
    # Use the shared environment variables.
    <<: *shared-api-worker-env
    # Startup mode, 'worker' starts the Celery worker for processing the queue.
    MODE: worker
    MILVUS_HOST: milvus-standalone  # Milvus服务的容器名称
    MILVUS_PORT: 19530              # Milvus服务的端口
  depends_on:
- db
- redis
  volumes:
    # Mount the storage directory to the container, for storing user files.
- ./volumes/app/storage:/app/api/storage
  networks:
- ssrf_proxy_network
- default

web:
  image: langgenius/dify-web:0.7.2
  restart: always
  environment:
    CONSOLE_API_URL: ${CONSOLE_API_URL:-}
    APP_API_URL: ${APP_API_URL:-}
    SENTRY_DSN: ${WEB_SENTRY_DSN:-}
    NEXT_TELEMETRY_DISABLED: ${NEXT_TELEMETRY_DISABLED:-0}
    MILVUS_HOST: milvus-standalone  # Milvus服务的容器名称
    MILVUS_PORT: 19530              # Milvus服务的端口

六、Attu配置

如果需要使用Attu进行可视化管理,可以在compose-config.yml中添加以下配置:

attu:
  container_name: attu
  profiles:
- milvus
  image: zilliz/attu:v2.4.7
  environment:
    MILVUS_URL: milvus-standalone:19530
  ports:
- "18000:3000"
  depends_on:
- "milvus-standalone"
  networks:
- milvus

参考资料

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号