Railway

Deploy Weaviate | (Just Updated) Vectors Survive Redeploys, Locked Behind A Key

Vector DB with a volume, a generated API key, and no anonymous access

Deploy Weaviate | (Just Updated) Vectors Survive Redeploys, Locked Behind A Key

Just deployed

/var/lib/weaviate

Deploy and Host Weaviate on Railway

Weaviate is an open-source vector database for semantic search, hybrid (vector + keyword) search, and retrieval-augmented generation. It stores your objects together with their embeddings and answers nearest-neighbour queries over HTTP and GraphQL. This template deploys a single, lean Weaviate node — no sidecars, no inference container — locked behind a generated API key, with its index on a persistent volume.

About Hosting Weaviate

The two things that decide whether a self-hosted vector database is usable are where the index lives and who can reach it, and both are set correctly here. Weaviate's PERSISTENCE_DATA_PATH points at a Railway volume mounted on /var/lib/weaviate, so your collections, objects and vectors survive every redeploy — verified by writing an object, redeploying, and reading it back. Anonymous access is disabled and API-key authentication is on, with the admin key generated per deployment rather than shipped as a shared literal, and RBAC enabled with that key's user as root. Weaviate refuses to start at all if the key is empty, so there is no window in which the database is public. The image is pinned by digest, the healthcheck points at /v1 so Railway does not route traffic before the API is answering, and DEFAULT_VECTORIZER_MODULE is none — you bring your own embeddings, so no deployment can quietly spend an embedding API key. Idle memory measured at roughly 45 MB, so this fits every Railway plan including Free.

Why Deploy Weaviate on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Weaviate on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.

  • Your embeddings survive redeploys — the index is on a volume, not on ephemeral disk. Re-embedding a corpus is the expensive part; you never pay it twice.
  • Not open to the internet — anonymous access off, a unique API key generated at deploy, RBAC on. No shared default key to forget to change.
  • Pinned by digest — the exact image that was tested is the exact image you get, with no surprise upgrade of a database that holds your data.
  • Lean by design — one Go binary, ~45 MB idle. No transformer sidecar you did not ask for and do not want to pay for.

Common Use Cases

  • RAG for a chatbot or agent — store document chunks with their embeddings and retrieve the nearest ones as context at query time.
  • Semantic and hybrid search — search a product catalogue, docs site, or knowledge base by meaning, blended with keyword (BM25) scoring in one query.
  • Recommendations and deduplication — find near-duplicate records or similar items by vector distance instead of brittle string matching.

Dependencies for Weaviate Hosting

  • A volume mounted at /var/lib/weaviate (included in this template) — without it every embedding is lost on redeploy.
  • An embedding model of your choice, running anywhere. This template stores vectors; it does not generate them.

Deployment Dependencies

Implementation Details

The generated admin key is in the service's AUTHENTICATION_APIKEY_ALLOWED_KEYS variable. Send it as a bearer token:

# create a collection that takes vectors you supply
curl -X POST https:///v1/schema \
  -H "Authorization: Bearer $WEAVIATE_API_KEY" -H "Content-Type: application/json" \
  -d '{"class": "Doc", "vectorizer": "none"}'

# insert an object with its embedding
curl -X POST https:///v1/objects \
  -H "Authorization: Bearer $WEAVIATE_API_KEY" -H "Content-Type: application/json" \
  -d '{"class": "Doc", "properties": {"text": "hello"}, "vector": [0.1, 0.2, 0.3]}'

# nearest-neighbour search over GraphQL
curl -X POST https:///v1/graphql \
  -H "Authorization: Bearer $WEAVIATE_API_KEY" -H "Content-Type: application/json" \
  -d '{"query": "{ Get { Doc(nearVector: {vector: [0.1,0.2,0.3]}, limit: 3) { text } } }"}'

To use a vectorizer module instead of supplying your own vectors, set ENABLE_MODULES (for example text2vec-openai) and DEFAULT_VECTORIZER_MODULE, and add that provider's API key as a variable. /v1/.well-known/ready is the unauthenticated readiness endpoint if you want to poll it from your own code.


Template Content

More templates in this category

View Template
Garage S3 Storage
Ultra-light S3 server: fast, open-source, plug-and-play.

PROJETOS
8
View Template
Redis
Self Host Latest Redis with Railway

2
View Template
EasyImg
Simple self-hostable Nuxt.js personal image hosting system.

Muhammad Bilal
0