The Context7 Helm chart is the turnkey way to run Context7 On-Premise on Kubernetes. It renders a single-replica StatefulSet by default and switches to a multi-replica Deployment when you enable scaling, so the same chart covers both the standard install and horizontal scaling. The chart is published to oci://ghcr.io/context7/charts, so no repository setup is needed — helm install pulls it directly.
This guide assumes you have completed the On-Premise setup and have a valid license key.
Prerequisites#
- A Kubernetes cluster (v1.24+) and
helm(v3+). - A Context7 license key.
- An image pull secret for
ghcr.io. Create it with the steps in Registry Authentication, which produces acontext7-registrysecret in thecontext7namespace.
Single container (default)#
Runs one replica with the embedded database on a persistent volume. Nothing external is required.
Reach the UI to finish setup:
Then open http://localhost:3000.
Multiple replicas#
Provision an external PostgreSQL with the pgvector extension first (relational data and embeddings both live there, no object storage needed). See Scaling for the architecture and how to provision pgvector.
encryptionKey is the one shared secret every replica needs. It decrypts stored credentials and signs session tokens, so keep it identical across replicas and stable over time. If it changes, stored credentials can no longer be decrypted and all sessions are invalidated.
With scaling.enabled=true the chart runs a Deployment of stateless replicas whose readiness gates on /api/ready, so a pod only receives traffic once it has connected to Postgres.
Ingress#
Expose the service through an Ingress instead of port-forwarding:
Migrating an existing single-container install#
To move an existing single-container deployment onto Postgres, the chart runs a one-shot migration Job that copies your SQLite data (and the LanceDB index into pgvector) from the volume your container used.
Get your existing encryption key
Stored credentials are encrypted with the key of the single container, so the new deployment must use the same key. If you did not set ENCRYPTION_KEY yourself, the container created the key in its data volume:
For an install from this chart, the pod is context7-context7-enterprise-0. Use this value as scaling.encryptionKey below.
Point the Job at your existing data
Set migration.enabled=true and migration.dataPvcName to the PVC that holds your existing /data. Find it with kubectl get pvc -n context7: an install from the Kubernetes guide uses data-context7-0, and an install from this chart uses data-<release>-context7-enterprise-0 (for example data-context7-context7-enterprise-0).
If your existing install used this chart, upgrade the release:
If you installed with the Kubernetes guide, there is no Helm release yet. Delete the old StatefulSet first so the Job can mount its volume (the PVC stays), then install the chart:
Turn the Job off after it completes
Once the Job reports success, disable it so it does not run again on the next upgrade.
See Migrating an existing deployment for what the migration copies and how to verify it.
Values#
| Value | Default | Description |
|---|---|---|
license | "" | Context7 license key. Required. |
imagePullSecrets | [] | Pull secrets for ghcr.io, for example context7-registry. |
scaling.enabled | false | false runs a single-replica StatefulSet; true runs a multi-replica Deployment. |
scaling.replicas | 3 | Replica count when scaling is enabled. |
scaling.databaseUrl | "" | External Postgres (with pgvector). Required when scaling is enabled. |
scaling.encryptionKey | "" | Shared secret, identical across replicas. Required when scaling is enabled. |
persistence.storage | 10Gi | Volume size for the single-replica default. |
persistence.storageClass | "" | StorageClass for the single-replica volume. |
ingress.enabled | false | Create an Ingress for the service. |
resources | 1-4 CPU / 2-8Gi | Pod resource requests and limits. |
env | [] | Extra environment (LLM, embedding, and git credentials, or advanced overrides). |
migration.enabled | false | Run the one-shot SQLite to Postgres migration Job. |
migration.dataPvcName | "" | PVC holding the existing /data to migrate from. |
Any credential can also be configured in the UI after first boot, so env is only needed when you prefer to set credentials declaratively.