Linux上私有化部署Weaviate教程

一、Weaviate介绍

Weaviate是一款开源的向量数据库和搜索引擎,具备以下核心特点:

  • 高性能向量搜索:采用先进技术如HNSW索引,实现快速高效的相似性搜索。
  • 多媒体支持:处理文本、图像等多种数据类型,适用于构建多模态应用。
  • 易用API:提供直观的RESTful API和多种语言SDK,便于集成和开发。
  • 灵活扩展:支持水平扩展和模块化架构,可集成自定义机器学习模型。
  • 语义搜索:基于向量空间中的语义理解,实现精准的语义搜索功能。
  • 实时索引与查询:确保在大规模数据集上的实时数据处理能力。
  • 云原生设计:适合云环境部署,支持高可用性和弹性。

在RAG等大模型应用上,Weaviate是外部知识库向量化的一个常用组件。

weaviate是C/S结构,weaviate服务端需要自己部署,或访问weaviate第三方服务。

本文就讲一下Linux上自己部署weaviate的过程。

二、部署流程

1、硬件要求

  • ​CPU​​:4核以上(推荐Intel/AMD x64架构);
  • ​内存​​:8GB(建议16GB以支持更高并发);
  • ​存储​​:最好预留50GB SSD(用于向量索引及元数据存储);

下文以ubuntu为例讲述。

2、安装Docker

见本作者文章:Docker在Linux上的部署安装教程-CSDN博客

这里还需要安装​Docker Compose

  • 定义​​:docker-compose是Docker 生态系统中的多容器编排工具,通过 docker-compose.yml 文件定义服务。
  • ​特点​​:
    • 用于管理多个容器的启动、网络、数据卷及依赖关系(如 Web 服务 + 数据库)。
    • 依赖 Docker 引擎运行,属于 Docker 的扩展工具,简化复杂应用的部署流程。
    • 支持环境变量配置、跨平台镜像构建(结合 docker-buildx-plugin)等高级功能

注意:手动安装保证安装的docker-compose是最新版本,不要用apt安装。手动安装步骤如下:

解释

# 从 Docker 官方 GitHub 下载最新二进制文件版本
(适配当前系统架构)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version  # 应输出类似 Docker Compose version v2.27.0

3、建造weaviate项目并拉取其镜像

如上docker-compose介绍,我们会创建个文件夹作为编排管理weaviate容器及关联容器(暂无)的项目目录,当然首先要拉取weaviate的镜像。

  • 从仓库拉取最新weaviate镜像

解释

docker pull semitechnologies/weaviate:latest
  • 创建docker的weaviate项目目录并配置​

在你选定的位置创建项目目录,如:

解释

​mkdir ~/projectss/docker-weaviate

在此目录里,

A、创建.env文件,设置认证、数据持久化等参数

解释

AUTHENTICATION_APIKEY_ENABLED=true 
AUTHENTICATION_APIKEY_ALLOWED_KEYS="3042xxxx,test-secret-key"
AUTHENTICATION_APIKEY_USERS="corlosliu2008@126.com,test@163.com"
PERSISTENCE_DATA_PATH=/var/lib/weaviate
MODULES="text2vec-openai"  # 可选模块配置,如 text2vec-openai
WEAVIATE_HOSTNAME=0.0.0.0

AUTHENTICATION_APIKEY_ENABLED=true :开启api key安全验证的方式,在客户端访问服务端时,需携带正确的api key方可。默认无api key安全验证。

AUTHENTICATION_APIKEY_ALLOWED_KEYS="3042xxxx,test-secret-key" :设置的api key,可以多个,也可以写base64暗文。

AUTHENTICATION_APIKEY_USERS="corlosliu2008@126.com,test@163.com" :设置的允许访问的用户列表,可以多个,与上面的AUTHENTICATION_APIKEY_ALLOWED_KEYS一一对应。客户端访问时可以不写user,服务端根据api key去批评匹配对应的user,根据不同user权限,赋予其访问范围等权限。

PERSISTENCE_DATA_PATH=/var/lib/weaviate:定义Weaviate容器内数据持久化存储的路径。默认情况下,Docker容器的数据是临时的,容器重启后数据会丢失。通过此变量指定路径后,需将宿主机的目录挂载到该路径(见下面docker-compose.yml​​配置),以实现数据持久化。

MODULES="text2vec-openai":启用Weaviate的扩展模块,用于定义向量生成模型。这里text2vec-openai是使用OpenAI的文本向量化模型,需配合OPENAI_APIKEY环境变量提供API密钥。

WEAVIATE_HOSTNAME=0.0.0.0:设置Weaviate服务监听的网络接口地址。0.0.0.0表示绑定所有可用网络接口(包括IPv4和IPv6),允许外部主机通过宿主机IP或域名访问服务。无此项设置,用curl通过localhost或127.0.0.1不能测试访问weaviate服务端。

​​B、编写docker-compose.yml​​,定义服务端口、卷挂载等配置

解释

services:
  weaviate:
    image: semitechnologies/weaviate:latest
    ports:
      - "8080:8080"  # HTTP API 端口
      - "50051:50051"  # gRPC 端口
    environment:
      CONFIG_FILE: /weaviate/config.yaml
      AUTHENTICATION_APIKEY_ENABLED: ${AUTHENTICATION_APIKEY_ENABLED}
      AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${AUTHENTICATION_APIKEY_ALLOWED_KEYS}
      AUTHENTICATION_APIKEY_USERS: ${AUTHENTICATION_APIKEY_USERS}
      PERSISTENCE_DATA_PATH: ${PERSISTENCE_DATA_PATH}
      MODULES: ${MODULES}
      WEAVIATE_HOSTNAME: 0.0.0.0
    volumes:
      - ./data/weaviate_data:/var/lib/weaviate  # 数据持久化目录
    restart: on-failure

这是docker-compse编排管理多个容器镜像的配置文件,这里我们只配置了一个weaviate容器。

image:指定镜像。这个镜像文件不一定可以在项目目录下,就是前面“docker pull semitechnologies/weaviate:latest”拉取的镜像,不设定会放在系统默认的位置。拉取过就行。

environment:同.env文件作用,设置环境变量。

volumes:将本地目录挂载到前面设定的PERSISTENCE_DATA_PATH容器内数据持久化存储的路径。

restart: on-failure:定义容器退出时的重启行为:

  • no: 默认策略,容器不会自动重启。
  • on-failure: 当容器因错误而退出(即退出状态码非0)时,Docker 会重启该容器。但是,如果容器是正常退出(退出状态码为0),则不会尝试重启。
  • always: 容器总是会被重启,不管退出状态是什么;即使在Docker守护进程启动后也会尝试重启之前已存在的容器。
  • unless-stopped: 类似于 always,但如果容器被手动停止,则不会自动重启。

至此,已经部署完成,下面用进行测试。

三、测试

1、启动weaviate服务

在项目目录下:

解释

sudo docker-compose up -d

-d为后台运行,不输出启动日志,日志在/var/lib/docker/containers/<container-id>/ 目录下,文件名为 <container-id>-json.log,可根据文件建立时间对应。 注意:日志文件需要切换到根用户有权查看。

若不带“-d”,则日志会输出到控制台。

上面命令正常启动后,可见如下:

红框为容器名称。

也查看查看可以通过下面命令查看容器镜像启动状况:

解释

sudo docker ps | grep "weaviate"

正常输出如下:

2、curl测试

因为配置了api key访问,所以curl中要附带上api key:

解释

curl -X GET "http://localhost:8080/v1/meta"      -H "Authorization: Bearer test-secret-key"

输出:

3、weaviate客户端python代码测试

注意:

A、pip安装weaviate-client库而不是weaviate库。

B、weaviate client分为3.版本和4.版本,语法接口是不一样的,这里使用的库为4.版本。

C、不要pip安装时不指定版本,可能安装成4.14.1, 要“pip install weaviate-client==4.14.4”,否则可能出现找不到函数的错误,在我的电脑上出现过,坑!

D、下面的获取weaviate服务端版本,要使用client.get_meta()而不要使用网上有的给出的“get_server_version()”或“client.misc.get_meta()”(可能已过时)。

解释

import weaviate

# 连接到本地运行的 Weaviate 实例
client = weaviate.connect_to_local(
    port=8080,
    grpc_port=50051,
    auth_credentials=weaviate.auth.AuthApiKey("test-secret-key")
)
try:
    # 检查是否连接成功
    if client.is_ready():
        print("✅ Weaviate is ready and running!")
        # 获取 Weaviate 版本

        meta = client.get_meta()
        print(f"Weaviate version: {meta['version']}")
        # print(f"Weaviate version: {client.get_server_version()}")
    else:
        print("❌ Weaviate is not ready.")
except Exception as e:
    print(f"❌ Weaviate happen Exception that is: {e}")
finally:
    # 关闭连接
    client.close()

运行后输出:

至此linux(ubuntu)上部署weaviate已经完成。


我是@AI增效,专注于研究AI应用和增效,持续分享AI探索和实践,期待和大家一起交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值