Packages
A modern Elixir client for Weaviate vector database with support for collections, objects, batch operations, GraphQL queries, and vector search. Includes health checks and friendly error messages for missing configuration.
Current section
Files
Jump to
Current section
Files
weaviate_ex
INSTALL.md
INSTALL.md
# Weaviate Installation Guide
This guide provides step-by-step instructions for setting up Weaviate vector database for development with the WeaviateEx Elixir library.
## Table of Contents
- [Prerequisites](#prerequisites)
- [Quick Start](#quick-start)
- [Manual Installation](#manual-installation)
- [Configuration](#configuration)
- [Verification](#verification)
- [Managing Weaviate](#managing-weaviate)
- [Troubleshooting](#troubleshooting)
## Prerequisites
- **Operating System**: Ubuntu 24.04 or compatible Linux distribution
- **Docker**: Version 20.10 or higher
- **Docker Compose**: Version 2.0 or higher
- **curl**: For testing HTTP endpoints
- **sudo access**: Required for Docker installation
## Quick Start
The easiest way to set up Weaviate is using the provided installation script:
```bash
./install.sh
```
This script will:
1. Check if Docker is installed (and install it if missing)
2. Create a `.env` file with default configuration
3. Pull the Weaviate Docker image
4. Start Weaviate with docker-compose
5. Wait for Weaviate to be healthy
6. Verify the connection
After successful installation, Weaviate will be running at:
- **HTTP API**: http://localhost:8080
- **gRPC API**: localhost:50051
## Manual Installation
If you prefer to install manually, follow these steps:
### Step 1: Install Docker
```bash
# Update package index
sudo apt-get update
# Install prerequisites
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
# Add Docker's official GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Set up the Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Add your user to the docker group
sudo usermod -aG docker $USER
# Start Docker service
sudo systemctl start docker
sudo systemctl enable docker
```
**Note**: After adding yourself to the docker group, you may need to log out and back in for the changes to take effect.
### Step 2: Verify Docker Installation
```bash
# Check Docker version
docker --version
# Check Docker Compose version
docker compose version
# Verify Docker is running
sudo systemctl status docker
```
### Step 3: Create Environment Configuration
Create a `.env` file in the project root:
```bash
cat > .env << 'EOF'
# Weaviate Configuration
WEAVIATE_HOST=localhost
WEAVIATE_PORT=8080
WEAVIATE_GRPC_PORT=50051
WEAVIATE_SCHEME=http
# Weaviate URL (used by Elixir client)
WEAVIATE_URL=http://localhost:8080
# Optional: Authentication (set to 'true' to enable)
WEAVIATE_AUTH_ENABLED=false
WEAVIATE_API_KEY=
# Optional: Vectorizer settings
# DEFAULT_VECTORIZER_MODULE=text2vec-openai
# OPENAI_API_KEY=your_key_here
EOF
```
### Step 4: Start Weaviate
```bash
# Pull the Weaviate image
docker compose pull
# Start Weaviate in detached mode
docker compose up -d
# Wait for Weaviate to be healthy (takes 30-60 seconds)
# You can check the status with:
docker compose ps
```
### Step 5: Verify Installation
```bash
# Test the HTTP endpoint
curl http://localhost:8080/v1/meta
# You should see JSON output with Weaviate version and configuration
```
## Configuration
### Environment Variables
The WeaviateEx library requires the following environment variables:
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `WEAVIATE_URL` | Yes | - | Full URL to Weaviate instance (e.g., `http://localhost:8080`) |
| `WEAVIATE_HOST` | No | localhost | Weaviate host |
| `WEAVIATE_PORT` | No | 8080 | Weaviate HTTP port |
| `WEAVIATE_GRPC_PORT` | No | 50051 | Weaviate gRPC port |
| `WEAVIATE_SCHEME` | No | http | HTTP scheme (http or https) |
| `WEAVIATE_API_KEY` | No | - | API key for authentication (if enabled) |
| `WEAVIATE_AUTH_ENABLED` | No | false | Enable authentication |
### Elixir Configuration
Add to your `config/config.exs`:
```elixir
config :weaviate_ex,
url: System.get_env("WEAVIATE_URL") || "http://localhost:8080",
api_key: System.get_env("WEAVIATE_API_KEY"),
# Optional: gRPC configuration
grpc_host: System.get_env("WEAVIATE_HOST") || "localhost",
grpc_port: System.get_env("WEAVIATE_GRPC_PORT") || "50051"
```
## Verification
### Check Weaviate Health
```bash
# Using curl
curl http://localhost:8080/v1/.well-known/ready
# Using docker
docker compose ps
# Check logs
docker compose logs -f weaviate
```
### Test with Elixir
```elixir
# Start your Elixir application
iex -S mix
# The WeaviateEx library will automatically check connection on startup
# If configuration is missing, you'll see friendly error messages
```
## Managing Weaviate
### Start Weaviate
```bash
docker compose up -d
```
### Stop Weaviate
```bash
docker compose down
```
### Restart Weaviate
```bash
docker compose restart
```
### View Logs
```bash
# Follow logs
docker compose logs -f weaviate
# View last 100 lines
docker compose logs --tail=100 weaviate
```
### Check Status
```bash
docker compose ps
```
### Remove All Data (Fresh Start)
```bash
# Stop and remove containers, networks, and volumes
docker compose down -v
# Start fresh
docker compose up -d
```
## Troubleshooting
### Docker Permission Denied
If you get permission denied errors:
```bash
# Add your user to docker group
sudo usermod -aG docker $USER
# Log out and back in, or run:
newgrp docker
```
### Port Already in Use
If port 8080 or 50051 is already in use:
1. Edit `docker-compose.yml` and change the port mappings:
```yaml
ports:
- "8081:8080" # Changed from 8080:8080
- "50052:50051" # Changed from 50051:50051
```
2. Update your `.env` file:
```bash
WEAVIATE_PORT=8081
WEAVIATE_GRPC_PORT=50052
WEAVIATE_URL=http://localhost:8081
```
### Weaviate Not Starting
Check the logs for errors:
```bash
docker compose logs weaviate
```
Common issues:
- Insufficient memory (Weaviate needs at least 1GB RAM)
- Disk space full
- Corrupted data volume (try `docker compose down -v` to reset)
### Connection Refused from Elixir
1. Verify Weaviate is running:
```bash
docker compose ps
curl http://localhost:8080/v1/meta
```
2. Check your `.env` file has the correct URL
3. Ensure the `WEAVIATE_URL` environment variable is loaded in your Elixir app
### Weaviate Container Exits Immediately
Check logs for the specific error:
```bash
docker compose logs weaviate
```
Try removing old volumes and restarting:
```bash
docker compose down -v
docker compose up -d
```
## Additional Resources
- [Weaviate Documentation](https://docs.weaviate.io/)
- [Weaviate Docker Installation Guide](https://docs.weaviate.io/deploy/installation-guides/docker-installation)
- [WeaviateEx GitHub Repository](#) (coming soon)
## Support
If you encounter issues:
1. Check the [Troubleshooting](#troubleshooting) section
2. Review Weaviate logs: `docker compose logs weaviate`
3. Verify environment variables are set correctly
4. Ensure Docker and Docker Compose are up to date