#!/bin/bash # Setup Local Environment Script # This script extracts configuration from terraform and sets up local development set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" TERRAFORM_DIR="$PROJECT_ROOT/deployment/terraform" echo "Setting up local development environment..." # Check if terraform directory exists if [ ! -d "$TERRAFORM_DIR" ]; then echo "Error: Terraform directory not found at $TERRAFORM_DIR" exit 1 fi # Change to terraform directory cd "$TERRAFORM_DIR" # Check if terraform state exists if [ ! -f "terraform.tfstate" ]; then echo "Error: Terraform state not found. Please run 'terraform apply' first." exit 1 fi echo "Extracting configuration from terraform..." # Get terraform outputs QDRANT_HOST=$(terraform output -raw vector_db_vm_external_ip 2>/dev/null || echo "") QDRANT_PORT="6333" FIRESTORE_PROJECT_ID=$(terraform output -raw firestore_database_id 2>/dev/null | cut -d'/' -f2 || echo "") GCS_BUCKET_NAME=$(terraform output -raw storage_bucket_name 2>/dev/null || echo "") if [ -z "$QDRANT_HOST" ]; then echo "Error: Could not extract Qdrant host from terraform outputs" exit 1 fi echo "Configuration extracted:" echo " Qdrant Host: $QDRANT_HOST" echo " Qdrant Port: $QDRANT_PORT" echo " Firestore Project: $FIRESTORE_PROJECT_ID" echo " GCS Bucket: $GCS_BUCKET_NAME" # Go back to project root cd "$PROJECT_ROOT" # Update start_dev.sh with extracted values echo "Updating start_dev.sh..." cat > start_dev.sh << EOF #!/bin/bash # Development startup script for Sereact API # This script sets the environment variables and starts the application # Auto-generated by deployment/scripts/setup_local_env.sh # Activate virtual environment source venv/Scripts/activate # Set environment variables from deployed infrastructure export QDRANT_HOST=$QDRANT_HOST export QDRANT_PORT=$QDRANT_PORT export FIRESTORE_PROJECT_ID=$FIRESTORE_PROJECT_ID export GCS_BUCKET_NAME=$GCS_BUCKET_NAME export ENVIRONMENT=development # Start the application echo "Starting Sereact API with deployed infrastructure..." echo "Qdrant endpoint: http://\$QDRANT_HOST:\$QDRANT_PORT" echo "Firestore project: \$FIRESTORE_PROJECT_ID" echo "GCS bucket: \$GCS_BUCKET_NAME" echo "API will be available at: http://localhost:8000" echo "API documentation: http://localhost:8000/docs" uvicorn main:app --host 0.0.0.0 --port 8000 --reload EOF chmod +x start_dev.sh # Update docker-compose.yml with extracted values echo "Updating docker-compose.yml..." cat > docker-compose.yml << EOF version: '3.8' services: api: build: . ports: - "8000:8000" volumes: - .:/app - \${GOOGLE_APPLICATION_CREDENTIALS:-./firestore-credentials.json}:/app/firestore-credentials.json:ro environment: - PYTHONUNBUFFERED=1 - ENVIRONMENT=development - FIRESTORE_CREDENTIALS_FILE=/app/firestore-credentials.json - GOOGLE_APPLICATION_CREDENTIALS=/app/firestore-credentials.json - FIRESTORE_PROJECT_ID=\${FIRESTORE_PROJECT_ID:-$FIRESTORE_PROJECT_ID} - QDRANT_HOST=$QDRANT_HOST - QDRANT_PORT=$QDRANT_PORT - GCS_BUCKET_NAME=$GCS_BUCKET_NAME command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload EOF # Update test script echo "Updating test_qdrant_connection.py..." cat > test_qdrant_connection.py << EOF #!/usr/bin/env python3 """ Simple test script to verify Qdrant connection Auto-generated by deployment/scripts/setup_local_env.sh """ import os import sys from src.services.vector_db import VectorDatabaseService def test_qdrant_connection(): """Test the connection to Qdrant""" # Set environment variables from deployed infrastructure os.environ['QDRANT_HOST'] = '$QDRANT_HOST' os.environ['QDRANT_PORT'] = '$QDRANT_PORT' try: print("Testing Qdrant connection...") print(f"Host: {os.environ['QDRANT_HOST']}") print(f"Port: {os.environ['QDRANT_PORT']}") # Initialize the service vector_db = VectorDatabaseService() # Test health check is_healthy = vector_db.health_check() print(f"Health check: {'✓ PASSED' if is_healthy else '✗ FAILED'}") # Get collection info collection_info = vector_db.get_collection_info() print(f"Collection info: {collection_info}") print("\n✓ Qdrant connection test PASSED!") return True except Exception as e: print(f"\n✗ Qdrant connection test FAILED: {e}") return False if __name__ == "__main__": success = test_qdrant_connection() sys.exit(0 if success else 1) EOF echo "" echo "✓ Local development environment setup complete!" echo "" echo "You can now:" echo " 1. Run './start_dev.sh' to start the API with deployed infrastructure" echo " 2. Run 'docker-compose up' to use Docker with deployed Qdrant" echo " 3. Run 'python test_qdrant_connection.py' to test Qdrant connection" echo "" echo "All configuration has been automatically extracted from your terraform deployment."