Follow this guide to setup, install, and begin using Qodo Aware in On Prem environments.
Prerequisites
Infrastructure Requirements
PostgreSQL Instance (Recommended Size):
You may opt for smaller instances if working with a relatively small codebase.
PostgreSQL Version : 17
Required Configuration:
pg_vector
extension installed
Note: This is pre-installed in managed cloud deployments.
TCP port 5432
must be accessible from the Kubernetes cluster where Qodo Aware will be deployed
Two PostgreSQL users with full access to their respective databases
Supported Git Providers:
GitHub (Cloud or Enterprise)
GitHub App Installation
Important Note:
These steps must be completed by a GitHub organization administrator.
Navigate to Your Organizations via the top-right menu on GitHub.
Select your organization and go to Settings > Developer settings > GitHub Apps .
Click New GitHub App and fill in:
App name : Qodo RAG Indexer
Homepage URL : https://qodo.ai
Webhook : Disabled
Webhooks will be supported in future releases for continuous updates.
Under Repository permissions , grant:
Choose “Any account” for installation scope.
Save the generated App ID .
Generate a private key and store it securely.
Click Install App , choose your organization, and select specific repositories (do not choose “All repositories”).
Save the Installation ID from the resulting URL (e.g., https://github.com/organizations/YOUR_ORG/settings/installations/2 ).
Qodo Aware Installation Overview
Qodo Aware consists of three components. Install them in the following order :
We recommend deploying all components in the same Kubernetes namespace .
Each component requires its own values.yaml
file with configuration like the following.
Example metadata-values.yaml
:
Copy image:
repository: artif-reg-self-hosted.codium.ai/proxy/codium-stack/us-central1-docker.pkg.dev/codium-production/codium-repo-self-hosted/qodo-engine-metadata
tag: "insert version here"
externalSecrets:
enabled: true
clusterSecretStore: true
secretStoreName: "cluster-secret-store" # Must exist prior to deployment
secrets:
- targetSecretName: secrets-file
remoteSecretName: qodo-engine-secrets # Must exist prior to deployment
data:
- secretKey: .secrets.toml
deployments:
enabled: true
resources:
requests:
cpu: "500m"
memory: "2Gi"
ports:
- containerPort: 8000
name: http
probes:
liveness:
httpGet:
path: /api/v1/health
port: http
initialDelaySeconds: 15
failureThreshold: 5
periodSeconds: 30
successThreshold: 1
service:
enabled: true
type: NodePort
port: 8000
ports:
http:
targetPort: http
volumes:
secrets-file:
secret:
secretName: secrets-file
useShortName: true
volumeMounts:
secrets-file:
mountPath: /workspace/app/config_prod
Install with Helm:
Copy helm upgrade --install metadata-service oci://artifacts-self-hosted.qodo.ai/codium-stack/stable/module -f ./metadata-values.yaml
2. rag-indexer
Copy
image:
repository: artif-reg-self-hosted.codium.ai/proxy/codium-stack/us-central1-docker.pkg.dev/codium-production/codium-repo-self-hosted/qodo-engine-indexer
tag: "insert version here"
externalSecrets:
enabled: true
clusterSecretStore: true
secretStoreName: "cluster-secret-store" # Must exist prior to deployment
secrets:
- targetSecretName: secrets-file
remoteSecretName: qodo-engine-secrets # Must exist prior to deployment
data:
- secretKey: .secrets.toml
deployments:
enabled: true
resources:
requests:
cpu: "500m"
memory: "2Gi"
ports:
- containerPort: 3000
name: http
probes:
liveness:
httpGet:
path: /api/v1/indexer/health
port: http
initialDelaySeconds: 15
failureThreshold: 5
periodSeconds: 30
successThreshold: 1
service:
enabled: true
type: NodePort
port: 3000
ports:
http:
targetPort: http
volumes:
secrets-file:
secret:
secretName: secrets-file
useShortName: true
volumeMounts:
secrets-file:
mountPath: /workspace/qodo_engine/shared_settings/secrets
cronJobs:
reindex:
schedule: "0 3 * * *" # Adjust schedule as needed - once a day is recommended
concurrencyPolicy: "Allow"
suspend: false
image:
repository: curlimages/curl
tag: 8.11.1
pullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "curl -X POST -H 'Content-Type: application/json' -d '{}' <http://$>(CONFIG.APP_NAME):3000/api/v1/indexer/reindex"
Install with Helm:
Copy helm upgrade --install indexer oci://artifacts-self-hosted.qodo.ai/codium-stack/stable/module -f ./indexer-values.yaml
3. context-retriever
Copy image:
repository: artif-reg-self-hosted.codium.ai/proxy/codium-stack/us-central1-docker.pkg.dev/codium-production/codium-repo-self-hosted/qodo-engine-context-retriever
tag: "insert version here"
externalSecrets:
enabled: true
clusterSecretStore: true
secretStoreName: "cluster-secret-store" # Must exist prior to deployment
secrets:
- targetSecretName: secrets-file
remoteSecretName: qodo-engine-secrets # Must exist prior to deployment
data:
- secretKey: .secrets.toml
deployments:
enabled: true
resources:
requests:
cpu: "500m"
memory: "2Gi"
ports:
- containerPort: 8001
name: http
probes:
liveness:
httpGet:
path: /v1/context/health
port: http
initialDelaySeconds: 15
failureThreshold: 5
periodSeconds: 30
successThreshold: 1
service:
enabled: true
type: NodePort
port: 8001
ports:
http:
targetPort: http
volumes:
secrets-file:
secret:
secretName: secrets-file
useShortName: true
volumeMounts:
secrets-file:
mountPath: /app/qodo_engine/shared_settings/secrets
Install with Helm:
Copy helm upgrade --install context-retriever oci://artifacts-self-hosted.qodo.ai/codium-stack/stable/module -f ./context-retriever-values.yaml
Trigger initial indexing (if you prefer to not wait until the cronjob is triggered): kubectl create job indexer-reindex-manual --from=cronjob/indexer-reindex
Verify indexer
pod (that is part of the deployment, not the job) logs, to confirm indexing has completed (can take anywhere from minutes to up to a day, depends on how many repositories are configured and how big they are)
Configuration
Shared Configuration
Copy [qodo_logger]
logging_format = "JSON"
log_level = "INFO"
[openai_api]
key = ""
org = ""
# RAG-indexer database
[postgresql]
host = ""
port = ""
username = ""
password = ""
[vectordb]
db_name = ''
#metadata-service database
[kubernetes]
DATABASE_USER = ""
DATABASE_PASSWORD = ""
DATABASE_NAME = ""
DATABASE_HOST = ""
DATABASE_PORT = ""
Github Configuration
Copy [github_app]
private_key="""\\
... private key goes here...
PRIVATE_KEY
"""
app_id = "1019460"
installation_id = "55739937"
api_base_url = "<https://api.github.com>"
Bitbucket DC Configuration
Enabling qodo-engine functionality in Qodo Merge
Qodo Merge
Important : Qodo Merge doesn’t support context-retriever
yet, therefore it requires a direct connection to rag-indexer database.
Update qodo-merge
secret, append the following
Copy [rag_arguments]
enable_rag=true
[postgresql]
host = ""
port = "5432"
username = ""
password = ""
[vectordb]
db_name = ""
table_name = "repos_embeddings"
Restart pods to pick up the new secret.
STS Customer instructions
Please make sure to provide the customer the IP to whitelist.