Multitenant RAG API with OpenAI embeddings and Qdrant vector search.
Implements metadata-based tenant isolation and is designed for both local Kubernetes and AWS EKS deployments with Terraform-managed infrastructure.
- Kotlin
- Spring Boot 4
- Spring AI
- Qdrant (vector database)
- Redis (caching)
- Postgres (API keys)
- OpenAI (embeddings)
- Docker
- Kubernetes (local + EKS)
- Terraform
- EKS (Kubernetes cluster)
- ECR (container registry)
- Secrets Manager
- IAM (IRSA for External Secrets)
- Helm
- External Secrets Operator
- Gradle (Kotlin DSL)
- with docker-compose
docker-compose up -d
export OPENAI_API_KEY=<your_key>
./gradlew bootRun
- with helm and kubernetes
export OPENAI_API_KEY=<your_key>
./deploy-local.sh
To make it work you need to add the following line to /etc/hosts
127.0.0.1 smartsearch.local
To cleanup run
./cleanup-local.sh
- Bootstrap personal deployment, build image and push to ECR
./bootstrap-personal.sh
- Login to AWS console and add your key to secrets manager
- Resync secrets manager and EKS secrets
./refresh-secrets-personal.sh
- Get public LB url
kubectl get svc smartsearch -n default
To cleanup run
./cleanup-personal.sh
API docs are available at http://localhost:8080/swagger-ui/index.html