# 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