Quick Start
Quick start for self-hosting LlamaCloud: prerequisites, hardware requirements, a minimal values.yaml for OpenAI or Azure OpenAI with OIDC or basic auth, and Helm install steps.
Self-Hosting Documentation Access
This section requires a password to access. Interested in self-hosting? Contact sales to learn more.
Before You Get Started
Section titled “Before You Get Started”Welcome to LlamaCloud! Before you get started, please make sure you have the following prerequisites:
- LlamaCloud License Key. To obtain a LlamaCloud License Key, please contact us at support@llamaindex.ai.
- Kubernetes cluster
>=1.28.0and a working installation ofkubectl. - Helm
v3.7.0+- To install Helm, please refer to the official Helm Documentation.
- OpenAI API Key or Azure OpenAI Credentials. Configuring OpenAI credentials is the easiest way to get started with your deployment.
- LlamaCloud tries to meet you at your organization’s needs and supports configuring more than OpenAI LLMs in including Anthropic, Bedrock, Vertex AI, and more.
- Please refer to the docs in the Configuration section of the sidebar to learn more about configuring other LLMs.
- File Storage: LlamaCloud stores files in object storage (S3, Azure Blob, GCS, or any S3-compatible store such as MinIO).
- Please follow the File Storage documentation to configure your deployment, and create the eight buckets it lists before installing the chart.
- Set bucket lifecycle rules as part of that setup. LlamaCloud does not delete parse or extract output itself, so without them a deployment retains every parsed document indefinitely. See Retention and Bucket Lifecycle.
- Authentication Settings:
- OIDC. OIDC is our recommended authentication mode for production deployments.
- Basic Auth (email/password): As of July 24th, 2025 (
v0.5.0), we support bothoidcandbasicauthentication methods. This is a simpler authentication mode more suitable for staging deployments. - For more information, please refer to the Authentication Modes documentation.
- Credentials to External Services (See below).
External Services
Section titled “External Services”LLamaCloud requires the following external services to be available: Postgres, MongoDB, Temporal, RabbitMQ and Redis.
Please follow the Database and Queues documentation to configure these services for your deployment.
Hardware Requirements
Section titled “Hardware Requirements”- Linux Instances running x86 CPUs
- We currently only linux/amd64 images. arm64 is not supported at this moment.
- Ubuntu >=22.04 on the worker nodes
- >=14 allocatable vCPUs
- >=80 GiB allocatable memory
These are cluster-wide allocatable minimums for an install with default values. The chart’s default resource requests sum to 12.5 vCPU / 47.5 GiB on their own, so a 12-vCPU cluster cannot schedule a default install at all. The figures above add headroom for system pods and scheduling slack. Two things push the requirement higher:
- S3Proxy (
config.storageBuckets.s3proxy.enabled: true) adds a 500m / 512Mi sidecar to every S3-consuming pod, roughly +3 vCPU across a default install. - Containerized dependencies. Running PostgreSQL, MongoDB, RabbitMQ, Redis, or Temporal on the same cluster adds their requests on top (see the next section).
Warning: LlamaParse, LlamaIndex’s proprietary document parser, can be a very resource-intensive deployment to run, especially if you want to maximize performance.
Configure and Install Your Deployment
Section titled “Configure and Install Your Deployment”This section will walk you through the steps to configure a minimal LlamaCloud deployment.
Minimal values.yaml configuration
Section titled “Minimal values.yaml configuration”To get a minimal LlamaCloud deployment up and running, you can create a values.yaml file with the following content:
license: key: <LLAMACLOUD-LICENSE-KEY>
postgresql: host: "postgresql" port: "5432" database: "llamacloud" username: <POSTGRES-USERNAME> password: <POSTGRES-PASSWORD>
mongodb: host: "mongodb" port: "27017" username: <MONGODB-USERNAME> password: <MONGODB-PASSWORD>
rabbitmq: scheme: "amqp" host: "rabbitmq" port: "5672" username: <RABBITMQ-USERNAME> password: <RABBITMQ-PASSWORD>
redis: scheme: "redis" host: "redis-master" port: "6379" db: 0
# Deploy Temporal as a subchart (host/port auto-configured) temporal: deploy: true
# Temporal subchart configuration (uses same PostgreSQL instance). # The Temporal store password is taken from your postgresql.password above — # the chart generates the temporal-postgresql-secret automatically. temporal-subchart: server: config: persistence: defaultStore: default visibilityStore: visibility datastores: default: sql: connectAddr: "postgresql:5432" databaseName: temporal user: <POSTGRES-USERNAME> visibility: sql: connectAddr: "postgresql:5432" databaseName: temporal_visibility user: <POSTGRES-USERNAME>
config: llms: openAi: apiKey: <OPENAI-APIKEY>
frontend: enabled: true parseOcr: # Each OCR pod requests `nvidia.com/gpu: 1` and schedules only on GPU # nodes. Running OCR on CPU (gpu: false) is deprecated and will be # removed in a future release. gpu: true
# Required. Without this the chart falls back to provider "aws" and the # literal default bucket names, which are almost certainly not yours. # See the File Storage guide for S3-compatible and non-AWS backends. storageBuckets: provider: "aws" parsedDocuments: <YOUR-BUCKET> parsedEtl: <YOUR-BUCKET> parsedExternalComponents: <YOUR-BUCKET> parsedFileParsing: <YOUR-BUCKET> parsedRawFile: <YOUR-BUCKET> parseOutput: <YOUR-BUCKET> parsedFileScreenshot: <YOUR-BUCKET> extractOutput: <YOUR-BUCKET> parseFileUpload: <YOUR-BUCKET> parseFileOutput: <YOUR-BUCKET>
authentication: oidc: enabled: true discoveryUrl: "https://login.microsoftonline.com/<TENANT-ID>/v2.0/.well-known/openid-configuration" clientId: <CLIENT-ID> clientSecret: <CLIENT-SECRET> license: key: <LLAMACLOUD-LICENSE-KEY>
postgresql: host: "postgresql" port: "5432" database: "llamacloud" username: <POSTGRES-USERNAME> password: <POSTGRES-PASSWORD>
mongodb: host: "mongodb" port: "27017" username: <MONGODB-USERNAME> password: <MONGODB-PASSWORD>
rabbitmq: scheme: "amqp" host: "rabbitmq" port: "5672" username: <RABBITMQ-USERNAME> password: <RABBITMQ-PASSWORD>
redis: scheme: "redis" host: "redis-master" port: "6379" db: 0
# Deploy Temporal as a subchart (host/port auto-configured) temporal: deploy: true
# Temporal subchart configuration (uses same PostgreSQL instance). # The Temporal store password is taken from your postgresql.password above — # the chart generates the temporal-postgresql-secret automatically. temporal-subchart: server: config: persistence: defaultStore: default visibilityStore: visibility datastores: default: sql: connectAddr: "postgresql:5432" databaseName: temporal user: <POSTGRES-USERNAME> visibility: sql: connectAddr: "postgresql:5432" databaseName: temporal_visibility user: <POSTGRES-USERNAME>
config: llms: azureOpenAi: # One entry per Azure deployment you want LlamaCloud to use. # baseUrl is your Azure resource endpoint, NOT the OpenAI API. deployments: [] # - model: "gpt-5.4" # deploymentName: "gpt-5.4" # apiKey: <AZURE-OPENAI-KEY> # baseUrl: "https://<your-resource>.openai.azure.com" # apiVersion: "2025-04-01-preview" # - model: "gpt-5.4-mini" # deploymentName: "gpt-5.4-mini" # apiKey: <AZURE-OPENAI-KEY> # baseUrl: "https://<your-resource>.openai.azure.com" # apiVersion: "2025-04-01-preview"
frontend: enabled: true parseOcr: # Each OCR pod requests `nvidia.com/gpu: 1` and schedules only on GPU # nodes. Running OCR on CPU (gpu: false) is deprecated and will be # removed in a future release. gpu: true
# Required. Without this the chart falls back to provider "aws" and the # literal default bucket names, which are almost certainly not yours. # See the File Storage guide for S3-compatible and non-AWS backends. storageBuckets: provider: "aws" parsedDocuments: <YOUR-BUCKET> parsedEtl: <YOUR-BUCKET> parsedExternalComponents: <YOUR-BUCKET> parsedFileParsing: <YOUR-BUCKET> parsedRawFile: <YOUR-BUCKET> parseOutput: <YOUR-BUCKET> parsedFileScreenshot: <YOUR-BUCKET> extractOutput: <YOUR-BUCKET> parseFileUpload: <YOUR-BUCKET> parseFileOutput: <YOUR-BUCKET>
authentication: oidc: enabled: true discoveryUrl: "https://login.microsoftonline.com/<TENANT-ID>/v2.0/.well-known/openid-configuration" clientId: <CLIENT-ID> clientSecret: <CLIENT-SECRET> license: key: <LLAMACLOUD-LICENSE-KEY>
postgresql: host: "postgresql" port: "5432" database: "llamacloud" username: <POSTGRES-USERNAME> password: <POSTGRES-PASSWORD>
mongodb: host: "mongodb" port: "27017" username: <MONGODB-USERNAME> password: <MONGODB-PASSWORD>
rabbitmq: scheme: "amqp" host: "rabbitmq" port: "5672" username: <RABBITMQ-USERNAME> password: <RABBITMQ-PASSWORD>
redis: scheme: "redis" host: "redis-master" port: "6379" db: 0
# Deploy Temporal as a subchart (host/port auto-configured) temporal: deploy: true
# Temporal subchart configuration (uses same PostgreSQL instance). # The Temporal store password is taken from your postgresql.password above — # the chart generates the temporal-postgresql-secret automatically. temporal-subchart: server: config: persistence: defaultStore: default visibilityStore: visibility datastores: default: sql: connectAddr: "postgresql:5432" databaseName: temporal user: <POSTGRES-USERNAME> visibility: sql: connectAddr: "postgresql:5432" databaseName: temporal_visibility user: <POSTGRES-USERNAME>
config: llms: openAi: apiKey: <OPENAI-APIKEY>
frontend: enabled: true parseOcr: # Each OCR pod requests `nvidia.com/gpu: 1` and schedules only on GPU # nodes. Running OCR on CPU (gpu: false) is deprecated and will be # removed in a future release. gpu: true
# Required. Without this the chart falls back to provider "aws" and the # literal default bucket names, which are almost certainly not yours. # See the File Storage guide for S3-compatible and non-AWS backends. storageBuckets: provider: "aws" parsedDocuments: <YOUR-BUCKET> parsedEtl: <YOUR-BUCKET> parsedExternalComponents: <YOUR-BUCKET> parsedFileParsing: <YOUR-BUCKET> parsedRawFile: <YOUR-BUCKET> parseOutput: <YOUR-BUCKET> parsedFileScreenshot: <YOUR-BUCKET> extractOutput: <YOUR-BUCKET> parseFileUpload: <YOUR-BUCKET> parseFileOutput: <YOUR-BUCKET>
authentication: basicAuth: enabled: true validEmailDomain: "llamaindex.ai" # required: only addresses at this domain may register # jwtSecret is optional. The chart generates one on first install # and preserves it across upgrades. Set it only to control the value. license: key: <LLAMACLOUD-LICENSE-KEY>
postgresql: host: "postgresql" port: "5432" database: "llamacloud" username: <POSTGRES-USERNAME> password: <POSTGRES-PASSWORD>
mongodb: host: "mongodb" port: "27017" username: <MONGODB-USERNAME> password: <MONGODB-PASSWORD>
rabbitmq: scheme: "amqp" host: "rabbitmq" port: "5672" username: <RABBITMQ-USERNAME> password: <RABBITMQ-PASSWORD>
redis: scheme: "redis" host: "redis-master" port: "6379" db: 0
# Deploy Temporal as a subchart (host/port auto-configured) temporal: deploy: true
# Temporal subchart configuration (uses same PostgreSQL instance). # The Temporal store password is taken from your postgresql.password above — # the chart generates the temporal-postgresql-secret automatically. temporal-subchart: server: config: persistence: defaultStore: default visibilityStore: visibility datastores: default: sql: connectAddr: "postgresql:5432" databaseName: temporal user: <POSTGRES-USERNAME> visibility: sql: connectAddr: "postgresql:5432" databaseName: temporal_visibility user: <POSTGRES-USERNAME>
config: llms: azureOpenAi: # One entry per Azure deployment you want LlamaCloud to use. # baseUrl is your Azure resource endpoint, NOT the OpenAI API. deployments: [] # - model: "gpt-5.4" # deploymentName: "gpt-5.4" # apiKey: <AZURE-OPENAI-KEY> # baseUrl: "https://<your-resource>.openai.azure.com" # apiVersion: "2025-04-01-preview" # - model: "gpt-5.4-mini" # deploymentName: "gpt-5.4-mini" # apiKey: <AZURE-OPENAI-KEY> # baseUrl: "https://<your-resource>.openai.azure.com" # apiVersion: "2025-04-01-preview"
frontend: enabled: true parseOcr: # Each OCR pod requests `nvidia.com/gpu: 1` and schedules only on GPU # nodes. Running OCR on CPU (gpu: false) is deprecated and will be # removed in a future release. gpu: true
# Required. Without this the chart falls back to provider "aws" and the # literal default bucket names, which are almost certainly not yours. # See the File Storage guide for S3-compatible and non-AWS backends. storageBuckets: provider: "aws" parsedDocuments: <YOUR-BUCKET> parsedEtl: <YOUR-BUCKET> parsedExternalComponents: <YOUR-BUCKET> parsedFileParsing: <YOUR-BUCKET> parsedRawFile: <YOUR-BUCKET> parseOutput: <YOUR-BUCKET> parsedFileScreenshot: <YOUR-BUCKET> extractOutput: <YOUR-BUCKET> parseFileUpload: <YOUR-BUCKET> parseFileOutput: <YOUR-BUCKET>
authentication: basicAuth: enabled: true validEmailDomain: "llamaindex.ai" # required: only addresses at this domain may register # jwtSecret is optional. The chart generates one on first install # and preserves it across upgrades. Set it only to control the value.Install the Helm chart
Section titled “Install the Helm chart”# Add the Helm repositoryhelm repo add llamaindex https://run-llama.github.io/helm-charts
# Update your local Helm chart cachehelm repo update
# Create the llamacloud namespacekubectl create ns llamacloud
# Install the Helm charthelm install llamacloud llamaindex/llamacloud -f values.yaml --namespace llamacloudIf you want to install a specific version of the Helm chart, you can specify the version:
helm install llamacloud llamaindex/llamacloud --version x.y.z -f values.yaml --namespace llamacloudValidate the installation
Section titled “Validate the installation”After installation, you will see the following output:
NAME: llamacloudLAST DEPLOYED: Tue Nov 18 10:12:03 2025NAMESPACE: llamacloudSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:Welcome to LlamaCloud!
View your deployment with the following:
kubectl get pods -n llamacloud
To view LlamaCloud UI in your browser: Run the following command:
kubectl --namespace llamacloud port-forward svc/llamacloud-web 3000:80If you list the pods with kubectl get pods -n llamacloud, you should see the following. This is
a temporal.deploy: true install, so the Temporal subchart pods appear alongside the LlamaCloud
services; your backing stores show up here too when they share the namespace.
NAME READY STATUS RESTARTS AGEllamacloud-76f6dd67b6-vqbzf 1/1 Running 0 10mllamacloud-layout-b4887c5d9-tj9xw 1/1 Running 0 10mllamacloud-ocr-8ffc8bf9b-prvth 1/1 Running 0 10mllamacloud-operator-7b67757d88-nxlkj 1/1 Running 0 10mllamacloud-parse-767846797-tdkqx 1/1 Running 0 10mllamacloud-telemetry-9d66956fd-5d95d 1/1 Running 0 10mllamacloud-web-6b98cd88b-6887v 1/1 Running 0 10mllamacloud-worker-66cb4867fc-mjhsn 1/1 Running 0 10mllamacloud-temporal-parse-c89c8d9c9-zvjvv 1/1 Running 0 10mtemporal-jobs-worker-76d6d58c77-2wlg2 1/1 Running 0 10mllamacloud-temporal-subchart-admintools-67cf5d57b-9cn5x 1/1 Running 0 10mllamacloud-temporal-subchart-frontend-78cbdc8ff7-pkxgl 1/1 Running 0 10mllamacloud-temporal-subchart-history-54cb58579f-ph42c 1/1 Running 0 10mllamacloud-temporal-subchart-matching-858d4dcd5b-brlp2 1/1 Running 0 10mllamacloud-temporal-subchart-web-7f6b8c9d84-5nv4k 1/1 Running 0 10mllamacloud-temporal-subchart-worker-59b794d59-54kvd 1/1 Running 0 10mllamacloud-temporal-subchart-schema-1-2-0-1-vrzp4 0/1 Completed 0 10mllamacloud-temporal-search-attributes-k2czv 0/1 Completed 0 10mThe two Completed pods are one-shot jobs. The Temporal schema job provisions the temporal
and temporal_visibility databases, and the search-attributes job registers the custom search
attributes. They are expected to stay Completed.
Port forward the frontend service to access the LlamaCloud UI:
kubectl --namespace llamacloud port-forward svc/llamacloud-web 3000:80Open your web browser and navigate to http://localhost:3000. You should see the LlamaCloud UI.
Next Steps
Section titled “Next Steps”Choose your deployment approach based on your needs:
🌩️ Cloud-Specific Deployment Guides
Section titled “🌩️ Cloud-Specific Deployment Guides”Recommended for most users - Complete, opinionated guides for major cloud providers:
📋 Choose Your Cloud Provider →
- Azure: AKS + Azure-native services with Microsoft Entra ID
- AWS: EKS + AWS-native services (coming soon)
- GCP: GKE + GCP-native services (coming soon)
These guides provide end-to-end instructions using cloud-native services and enterprise authentication.
⚙️ Custom Configuration Guides
Section titled “⚙️ Custom Configuration Guides”For advanced users with specific requirements or non-standard setups:
- Authentication Modes - Configure OIDC, basic auth, or custom authentication
- File Storage - Set up S3, Azure Blob, GCS, or other storage
- Database and Queues - Configure external databases and message queues
- LLM Integrations - Set up OpenAI, Azure OpenAI, Bedrock, or other LLMs
- Ingress Configuration - Load balancers, SSL, and networking
- Autoscaling Configuration - HPA and KEDA-based scaling for services
- Service Tuning - Performance and scaling configurations
Use these guides if you need custom integrations, have specific compliance requirements, or want to mix and match different services.
🚰 Index Storage Configuration
Section titled “🚰 Index Storage Configuration”Configure where LlamaCloud Index writes the vector embeddings of your documents. The
destination is set deployment-wide via config.defaultIndex.destination. See
Index Configuration for the
supported targets (MongoDB, Turbopuffer, PostgreSQL/pgvector, Azure AI Search) and their
requirements.
More Examples and Guides
Section titled “More Examples and Guides”- there are many more configuration options available for each component. to see the full values.yaml specification, please refer to the values.yaml file in the helm chart repository.
- To see how common scenarios are configured, please refer to the
values.yamlexamples directory in the Helm chart repository. - Similarly, we have other configuration docs available there too for more advanced configurations.