AI开发跃迁指南(第三章:第四维度2——weaviate cloud、weaviate docker安装配置及使用连接示例)
Weaviate
简单简介和对比我们已经在上一篇《AI开发跃迁指南(第三章:第四维度1——Milvus、weaviate、redis等向量数据库介绍及对比选型)》中已经介绍过了。本篇主要介绍。
Weaviate
的云上试用,本地docker安装及初步配置使用等。
1.Weaviate云上试用
1.1.注册账号并登录
weaviate提供了云上的免费试用功能Weaviate Cloud,进入网页后注册账号即可免费试用weaviate Cloud
。
登录成功后:
1.2.创建Cluster
- 单击Create cluster。
- 给集群起个名字。
- 设置首选的云区域。
- 点击“创建”。
创建页面:
创建成功页面:
- REST Endpoint:REST方式连接Weaviate的endpoint.
- API Kyes:分为管理员API秘钥和只读功能的一个API秘钥
通过REST 端点 URL和API 密钥即可连接到此Weaviate实例。
1.3.连接示例
依赖包的pom依赖[:
<dependency><groupId>io.weaviate</groupId><artifactId>client</artifactId><version>4.7.0</version> <!-- Check latest version -->
</dependency>
示例代码:
// Set these environment variables
// WEAVIATE_HOSTNAME Your Weaviate instance hostname
// WEAVIATE_API_KEY Your Weaviate instance API keypackage your.application;import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;
import io.weaviate.client.WeaviateAuthClient;public class App
{public static void main( String[] args ) throws Exception{String scheme = "https";String host = System.getenv("WEAVIATE_HOSTNAME");String apiKey = System.getenv("WEAVIATE_API_KEY");Config config = new Config(scheme, host);WeaviateClient client = WeaviateAuthClient.apiKey(config, apiKey);}
}
更多接口请查看API文档。
2.docker本地安装
docker本地安装可以通过docker命令或者docker-compose来安装,本次我们使用docker-compose来安装。
2.1.基础安装
-
安装docker和docker-componse(安装过程不在说明)可参考十分钟学会docker安装 。
-
创建docker-compose文件
--- services:weaviate:command:- --host- 0.0.0.0- --port- '8080'- --scheme- httpimage: cr.weaviate.io/semitechnologies/weaviate:1.30.2 # 使用最新稳定版本ports:- 8080:8080- 50051:50051volumes:- weaviate_data:/var/lib/weaviate # 数据持久化到本地目录restart: on-failure:0environment:QUERY_DEFAULTS_LIMIT: 25AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' # 允许匿名访问PERSISTENCE_DATA_PATH: '/var/lib/weaviate'ENABLE_API_BASED_MODULES: 'true'CLUSTER_HOSTNAME: 'node1' volumes:weaviate_data: ...
官网也提供了Weaviate的docker-compose.yml文件生成器,可以根据可视化界面选择功能,生成可用的docker-compose文件。
-
启动Weaviate容器
在 docker-compose.yml 所在目录执行:docker-compose up -d
验证容器是否运行:
docker ps | grep weaviate
应看到 weaviate 容器状态为 Up。
-
检测Weaviate服务
通过 API 检查服务状态:curl http://localhost:8080/v1/meta
返回类似以下 JSON 即表示成功:
{"hostname":"http://[::]:8080","modules":{"text2vec-openai":{"version":"...","documentationHref":"..."}}}
2.2.配置说明
2.2.1.基础配置
-
镜像版本
services:weaviate:image: semitechnologies/weaviate:1.23.7 # 指定版本
- 说明:建议使用官方镜像,选择稳定版(如 1.23.7)或 latest(最新开发版)。
- 注意:生产环境避免使用 latest,以防版本不兼容。
-
端口映射
ports:- "8080:8080" # 主机端口:容器端口
- 说明:默认暴露 8080 端口用于 HTTP API 和 GraphQL。
- 自定义端口:例如 “8090:8080” 避免冲突。
-
容器重启策略
restart: unless-stopped # 或 always
- 说明:配置容器自动重启策略,提升服务可用性。
2.2.2.环境变量配置
-
认证与安全
environment:AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' # 允许匿名访问(默认关闭)AUTHENTICATION_APIKEY_ENABLED: 'true' # 启用 API 密钥认证AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'your-api-key' # 指定有效 API 密钥
场景:
-
开发环境可开启匿名访问(‘true’)。
-
生产环境建议启用 API 密钥或 OIDC 认证。
-
-
模块配置
ENABLED_MODULES: 'text2vec-openai,img2vec-neural' # 启用多个模块 DEFAULT_VECTORIZER_MODULE: 'text2vec-openai' # 默认向量模型
模块类型:
-
text2vec-openai
: 使用 OpenAI 模型生成文本向量。 -
text2vec-huggingface
: 本地或远程 Hugging Face 模型。 -
img2vec-neural
: 图像向量化(需配置模型服务)。
依赖配置(示例):
OPENAI_APIKEY: 'sk-xxx' # OpenAI API 密钥 HUGGINGFACE_APIKEY: 'hf-xxx' # Hugging Face 密钥
-
-
数据持久化
environment:PERSISTENCE_DATA_PATH: '/var/lib/weaviate' # 容器内数据路径 volumes:- ./weaviate_data:/var/lib/weaviate # 挂载到本地目录
- 说明: 默认数据存储在容器内,重启后丢失。通过 volumes 挂载本地目录实现持久化。
-
集群配置(多节点部署)
environment:CLUSTER_HOSTNAME: 'node1' # 节点唯一名称CLUSTER_GOSSIP_BIND_PORT: '7100' # 节点间通信端口CLUSTER_JOIN: 'node1:7100,node2:7100' # 加入集群的其他节点
- 多节点场景: 需为每个节点配置独立的 CLUSTER_HOSTNAME 和端口,并相互声明。
-
性能调优
environment:MAX_IMPORT_GOROUTINES: 4 # 数据导入并发数DEFAULT_VECTORIZER_TIMEOUT: 60 # 向量化超时(秒)GARBAGE_COLLECTION_INTERVAL: 600 # 内存回收间隔(秒)
- 优化建议: 根据硬件资源调整并发数,避免超时或内存溢出。
2.2.3.资源限制
- cup/内存限制
deploy:resources:limits:cpus: '2.0'memory: 8G
- 说明: 防止容器占用过多资源,影响主机其他服务。
- GPU支持
runtime: nvidia # 需安装 NVIDIA Container Toolkit environment:CUDA_VISIBLE_DEVICES: '0' # 指定使用的 GPU 索引
- 场景: 加速向量化模块(如 text2vec-transformers)。
2.2.4.网络配置
-
网络配置
networks:weaviate_net:driver: bridge # 自定义网络隔离 services:weaviate:networks:- weaviate_net
- 用途: 创建独立网络,便于与其他服务(如 Elasticsearch、Redis)通信。
2.2.5.日志与监控
-
日志级别
environment:LOG_LEVEL: 'debug' # 可选: error, warning, info, debug
- 调试: 开发时可设为 debug,生产环境建议 info 或 warning。
-
Prometheus 监控
environment:METRICS_ENABLED: 'true' # 启用监控端点METRICS_PORT: '9090' # 监控数据暴露端口
- 访问: 通过 http://localhost:9090/metrics 获取指标数据。
2.2.6.健康检测
- 检测
healthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080/v1/.well-known/ready"]interval: 30stimeout: 10sretries: 3
- 作用: Docker 自动检测容器健康状态,失败时重启。
2.2.7.高级配置
- TLS/SSL 加密
environment:TLS_CERT: '/path/to/cert.pem'TLS_KEY: '/path/to/key.pem' volumes:- ./certs:/certs # 挂载证书目录
- 说明: 配置 HTTPS 加密通信,需挂载证书文件。
- 扩展 API 端点
environment:EXTENSIONS_STORAGE_MODE: 's3' # 存储扩展(如 S3)AWS_ACCESS_KEY_ID: 'xxx'AWS_SECRET_ACCESS_KEY: 'xxx'
- 用途: 集成外部存储服务或自定义模块。
2.3.完整示例配置
version: '3.4'
services:weaviate:image: semitechnologies/weaviate:1.23.7ports:- "8080:8080"environment:AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'PERSISTENCE_DATA_PATH: '/var/lib/weaviate'ENABLED_MODULES: 'text2vec-openai'DEFAULT_VECTORIZER_MODULE: 'text2vec-openai'OPENAI_APIKEY: 'sk-xxx'METRICS_ENABLED: 'true'LOG_LEVEL: 'info'volumes:- ./data:/var/lib/weaviatenetworks:- weaviate_netdeploy:resources:limits:memory: 8Ghealthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080/v1/.well-known/ready"]networks:weaviate_net:driver: bridge
2.3.连接示例
依赖包的pom依赖[:
<dependency><groupId>io.weaviate</groupId><artifactId>client</artifactId><version>4.7.0</version> <!-- Check latest version -->
</dependency>
示例代码:
package your.application;import io.weaviate.client.Config;
import io.weaviate.client.WeaviateClient;public class App {public static void main( String[] args ) throws Exception {String scheme = "http";String host = "localhost:8080";// The Java client doesn't use the gRPC portConfig config = new Config(scheme, host);WeaviateClient client = new WeaviateClient(config);}
}
更多接口请查看API文档。