Skip to content

Weaviate

Weaviate 1.38 vector database — semantic and hybrid search over objects, with vectors you bring from your own embedding model. Runs as a single node, or as a multi-node cluster when you add replicas. Secured with an API key and reachable only over your private network by default.

Configuration

yaml
services:
  vectors:
    package: weaviate

That's a complete single-node setup — the API key is auto-generated on the first managed apply and reused forever after. To pin your own key (for example from an environment variable):

yaml
services:
  vectors:
    package: weaviate
    config:
      api_key: "${WEAVIATE_API_KEY}"

To run a cluster, add replicas:

yaml
services:
  vectors:
    package: weaviate
    replicas: 2   # 3 nodes total: the first node + 2 joining nodes

Parameters

ParameterRequiredDefaultDescription
api_keyYesauto-generatedThe key clients send as a Bearer token; it maps to the built-in admin user
replicasNo0Additional cluster nodes beyond the first
versionNo1.38.6Weaviate release to install. The default installs checksum-verified; other versions download unverified
bind_publicNofalseListen on all interfaces instead of the private/overlay IP. A footgun — only enable if you know the ports are firewalled
keep_daily_backupsNo5Number of daily backups to retain
keep_weekly_backupsNo1Number of weekly backups to retain
keep_monthly_backupsNo1Number of monthly backups to retain

Bring your own vectors

The package runs Weaviate with no built-in vectorizer (vectorizer: none): your application computes embeddings (OpenAI, Cohere, a local model, …) and sends them with each object, which is the standard self-hosted setup. Weaviate's API-based generative/vectorizer modules remain available if a collection opts into them; nothing runs models on the server itself.

Connection

Weaviate serves REST and GraphQL on 8080 and gRPC on 50051, bound to the private/overlay address so only your other servers can reach it. Every request carries the API key as a Bearer token:

bash
curl -H "Authorization: Bearer $WEAVIATE_API_KEY" http://<private-ip>:8080/v1/schema

The official client libraries take the same key:

python
import weaviate
client = weaviate.connect_to_custom(
    http_host="<private-ip>", http_port=8080, http_secure=False,
    grpc_host="<private-ip>", grpc_port=50051, grpc_secure=False,
    auth_credentials=weaviate.auth.AuthApiKey("..."),
)

The auto-generated key is stored with your project's state and shown (masked) in the dashboard's Configuration panel for the service.

Clustering

Set replicas and managed apply grows the service into a multi-node cluster:

  • The first node (cluster name node1) is the founding member. Its configuration never changes when nodes join, so scale-ups don't restart it.
  • Each new node installs Weaviate, then joins the cluster by gossiping with the first node over the private/overlay network. Every node keeps a stable, unique cluster identity (its managed server name) — Weaviate recognizes its own data by that name.
  • All nodes serve the full API on 8080/50051 with the same API key.

Spreading data across nodes

Where your data lives is decided per collection, when you create it. A collection created with defaults keeps its data on one node. To replicate:

bash
curl -X POST -H "Authorization: Bearer $WEAVIATE_API_KEY" -H "Content-Type: application/json" \
  -d '{"class": "Documents", "vectorizer": "none", "replicationConfig": {"factor": 2}}' \
  http://<any-node>:8080/v1/schema

factor: 2 keeps two copies of every shard, so the collection stays readable and writable (with tunable consistency — ONE, QUORUM, ALL per request) when a node is down. Weaviate also shards large collections across nodes automatically via its sharding config.

Checking the cluster

bash
managed service vectors check-cluster

Shows every member, its health and version, and how many nodes the cluster has versus how many it should have. The dashboard also charts a Healthy cluster nodes gauge.

Cluster limitations

  • Schema changes go through the first node. The cluster uses single-voter consensus for metadata: creating or changing collections requires node1 to be up. Reading and writing data keeps working on the other nodes (subject to your collections' replication factor and the consistency level you request).
  • Backups are single-node only. In cluster mode the daily backup skips (one node's files are not a complete backup) and restore refuses to run. Use replicationConfig factor 2+ for redundancy.
  • A cluster needs the private/overlay network — nodes must be able to reach each other. managed apply sets this up automatically when the servers support it.

Backups

On a single node, a full backup runs every 24 hours: Weaviate is paused for a moment while its data directory is streamed to object storage as a compressed archive — a byte-exact, consistent copy — then started again. Retention follows the daily/weekly/monthly scheme (see the parameters above).

bash
managed service vectors backup            # take a backup now (brief pause)
managed service vectors backup-list       # list what's in storage
managed service vectors restore --arg confirm=yes

Restore replaces everything in Weaviate with the backup contents — it previews what it will do and requires the confirm=yes argument. If the download fails mid-restore, the original data is put back untouched.

Commands

CommandDescription
managed service <name> statusServer status, version, and collection list
managed service <name> check-clusterCluster membership and node health
managed service <name> backupBack up now (single-node only; brief pause)
managed service <name> backup-listList available backups in storage
managed service <name> restoreRestore from the latest (or specified) backup

Ports

PortProtocolOpen toPurpose
8080tcpprivate networksREST + GraphQL API
50051tcpprivate networksgRPC API
7946tcp + udpthis service's nodes onlyCluster membership (gossip)
7947tcpthis service's nodes onlyData replication between nodes
8300, 8301tcpthis service's nodes onlySchema consensus (raft)

How it works

The service installs the official Weaviate binary from GitHub releases — checksum-verified against the upstream's published digests for the default version — and runs it under systemd as the unprivileged weaviate user. All configuration is environment variables in a root-only file, which also carries the API key — never on a command line or in a world-readable config. Anonymous access is disabled, authentication and the admin authorization list are on, and telemetry is off.

Where the data lives

Weaviate keeps everything in /var/lib/weaviate on the server. managed installs onto whatever disk layout the server already has — on OVH bare metal, set up Storage & RAID before the first apply.