Skip to main content

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 a context7-registry secret in the context7 namespace.

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.

Note

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#

ValueDefaultDescription
license""Context7 license key. Required.
imagePullSecrets[]Pull secrets for ghcr.io, for example context7-registry.
scaling.enabledfalsefalse runs a single-replica StatefulSet; true runs a multi-replica Deployment.
scaling.replicas3Replica 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.storage10GiVolume size for the single-replica default.
persistence.storageClass""StorageClass for the single-replica volume.
ingress.enabledfalseCreate an Ingress for the service.
resources1-4 CPU / 2-8GiPod resource requests and limits.
env[]Extra environment (LLM, embedding, and git credentials, or advanced overrides).
migration.enabledfalseRun 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.