install_lightrag.sh 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #!/bin/bash
  2. NAMESPACE=rag
  3. SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
  4. if [ -z "$OPENAI_API_KEY" ]; then
  5. echo "OPENAI_API_KEY environment variable is not set"
  6. read -s -p "Enter your OpenAI API key: " OPENAI_API_KEY
  7. if [ -z "$OPENAI_API_KEY" ]; then
  8. echo "Error: OPENAI_API_KEY must be provided"
  9. exit 1
  10. fi
  11. export OPENAI_API_KEY=$OPENAI_API_KEY
  12. fi
  13. if [ -z "$OPENAI_API_BASE" ]; then
  14. echo "OPENAI_API_BASE environment variable is not set, will use default value"
  15. read -p "Enter OpenAI API base URL (press Enter to skip if not needed): " OPENAI_API_BASE
  16. export OPENAI_API_BASE=$OPENAI_API_BASE
  17. fi
  18. # Install KubeBlocks (if not already installed)
  19. bash "$SCRIPT_DIR/databases/01-prepare.sh"
  20. # Install database clusters
  21. bash "$SCRIPT_DIR/databases/02-install-database.sh"
  22. # Create vector extension in PostgreSQL if enabled
  23. print "Waiting for PostgreSQL pods to be ready..."
  24. if kubectl wait --for=condition=ready pods -l kubeblocks.io/role=primary,app.kubernetes.io/instance=pg-cluster -n $NAMESPACE --timeout=300s; then
  25. print "Creating vector extension in PostgreSQL..."
  26. kubectl exec -it $(kubectl get pods -l kubeblocks.io/role=primary,app.kubernetes.io/instance=pg-cluster -n $NAMESPACE -o name) -n $NAMESPACE -- psql -c "CREATE EXTENSION vector;"
  27. print_success "Vector extension created successfully."
  28. else
  29. print "Warning: PostgreSQL pods not ready within timeout. Vector extension not created."
  30. fi
  31. # Get database passwords from Kubernetes secrets
  32. echo "Retrieving database credentials from Kubernetes secrets..."
  33. POSTGRES_PASSWORD=$(kubectl get secrets -n rag pg-cluster-postgresql-account-postgres -o jsonpath='{.data.password}' | base64 -d)
  34. if [ -z "$POSTGRES_PASSWORD" ]; then
  35. echo "Error: Could not retrieve PostgreSQL password. Make sure PostgreSQL is deployed and the secret exists."
  36. exit 1
  37. fi
  38. export POSTGRES_PASSWORD=$POSTGRES_PASSWORD
  39. NEO4J_PASSWORD=$(kubectl get secrets -n rag neo4j-cluster-neo4j-account-neo4j -o jsonpath='{.data.password}' | base64 -d)
  40. if [ -z "$NEO4J_PASSWORD" ]; then
  41. echo "Error: Could not retrieve Neo4J password. Make sure Neo4J is deployed and the secret exists."
  42. exit 1
  43. fi
  44. export NEO4J_PASSWORD=$NEO4J_PASSWORD
  45. #REDIS_PASSWORD=$(kubectl get secrets -n rag redis-cluster-redis-account-default -o jsonpath='{.data.password}' | base64 -d)
  46. #if [ -z "$REDIS_PASSWORD" ]; then
  47. # echo "Error: Could not retrieve Redis password. Make sure Redis is deployed and the secret exists."
  48. # exit 1
  49. #fi
  50. #export REDIS_PASSWORD=$REDIS_PASSWORD
  51. echo "Deploying production LightRAG (using external databases)..."
  52. if ! kubectl get namespace rag &> /dev/null; then
  53. echo "creating namespace 'rag'..."
  54. kubectl create namespace rag
  55. fi
  56. helm upgrade --install lightrag $SCRIPT_DIR/lightrag \
  57. --namespace $NAMESPACE \
  58. --set-string env.POSTGRES_PASSWORD=$POSTGRES_PASSWORD \
  59. --set-string env.NEO4J_PASSWORD=$NEO4J_PASSWORD \
  60. --set-string env.LLM_BINDING=openai \
  61. --set-string env.LLM_MODEL=gpt-4o-mini \
  62. --set-string env.LLM_BINDING_HOST=$OPENAI_API_BASE \
  63. --set-string env.LLM_BINDING_API_KEY=$OPENAI_API_KEY \
  64. --set-string env.EMBEDDING_BINDING=openai \
  65. --set-string env.EMBEDDING_MODEL=text-embedding-ada-002 \
  66. --set-string env.EMBEDDING_DIM=1536 \
  67. --set-string env.EMBEDDING_BINDING_API_KEY=$OPENAI_API_KEY
  68. # --set-string env.REDIS_URI="redis://default:${REDIS_PASSWORD}@redis-cluster-redis-redis:6379"
  69. # Wait for LightRAG pod to be ready
  70. echo ""
  71. echo "Waiting for lightrag pod to be ready..."
  72. kubectl wait --for=condition=ready pod -l app.kubernetes.io/instance=lightrag --timeout=300s -n rag
  73. echo "lightrag pod is ready"
  74. echo ""
  75. echo "Running Port-Forward:"
  76. echo " kubectl --namespace rag port-forward svc/lightrag 9621:9621"
  77. echo "==========================================="
  78. echo ""
  79. echo "✅ You can visit LightRAG at: http://localhost:9621"
  80. echo ""
  81. kubectl --namespace rag port-forward svc/lightrag 9621:9621