Skip to main content
OpenHands Enterprise is distributed as a Helm chart through the Replicated registry. Your license credentials authenticate the chart download, and the chart embeds your license automatically at install time.
Helm-based installation requires an OpenHands Enterprise license. If you don’t have one yet, register for a free 30-day trial or contact our team to get set up.

Prerequisites

  • A Kubernetes cluster with a default storage class and an ingress controller (see Resource Limits for sizing guidance)
  • Helm v4 or later
  • kubectl access to the target cluster
  • Your license ID and the email address registered with your license (both provided by our team)
  • LLM credentials from your chosen provider, for example an Anthropic API key from the Anthropic Console
  • DNS records you control, following the app.<base-domain> layout used throughout this guide (with openhands.example.com as the base): app.openhands.example.com (application), auth.app.openhands.example.com (login), runtime-api.openhands.example.com, and a wildcard *.runtime.openhands.example.com for runtime sandboxes. These point at your cluster’s ingress; see the Quick Start’s DNS checks for the full hostname list.
  • TLS certificates covering all of the hostnames above, which you provide.
  • An authentication method for user login — GitLab, Bitbucket Data Center, and more are supported; this guide uses a GitHub App. See Creating a GitHub App.

Step 1: Log in to the registry

Authenticate Helm against the Replicated registry using your license:

Step 2: Create the namespace and secrets

The chart references several Kubernetes secrets that you create ahead of installation:
Then create the secret for user authentication. Other providers (GitLab, Bitbucket Data Center, and more) are supported, but this guide uses GitHub throughout. If you don’t have a GitHub App yet, run our script — its output provides every value below, and the private key file is written to its keys directory:
Generate strong random values (for example with openssl rand -hex 32) for each <random-string> placeholder, and store them in your secret manager. To use an existing PostgreSQL instance instead of the bundled one, see External PostgreSQL.

Step 3: Configure values

Create a values.yaml with your environment-specific configuration. The minimum for a working installation covers five areas: application ingress and TLS, user authentication, the runtime (sandbox) endpoints, conversation storage, and your LLM provider. PostgreSQL and Redis run embedded in the cluster; the bundled PostgreSQL needs a database name and database creation turned on, both shown below (to use your own database instead, see External PostgreSQL).
The embedded PostgreSQL is intended for proof-of-concept and evaluation use only, not production. For production deployments we recommend bringing your own managed PostgreSQL — see External PostgreSQL. There is no officially supported migration path from the embedded PostgreSQL instance to an external one, so plan to switch to an external database before you load production data.
The example below uses Traefik, the chart’s default ingress class; set ingress.class and the annotations to match your controller.

Step 4: Install

Watch the workloads come up:
The first install pulls all container images, which can take a while. Along with the application components you’ll see a replicated pod — the Replicated SDK, which handles license verification and powers the support tooling below.

Step 5: Validate the installation

The chart ships preflight checks that validate your cluster against the application’s requirements. Run them with the preflight CLI:
The preflight and support-bundle CLIs are both part of Troubleshoot. Install them with:
Then confirm the application is reachable at your configured hostname and log in.

Next Steps

The install above is a minimal working baseline. Features and tuning are values overrides on the same release — edit your values.yaml and apply with helm upgrade using the chart URL from Step 4:

Resource Limits

Size memory, CPU, and replicas for production workloads.

External PostgreSQL

Use your own PostgreSQL instead of the embedded instance.

Analytics

Enable conversation analytics with Laminar.

Plugin Marketplace

Offer curated plugins to your users.

Troubleshooting

Generate a support bundle

If something isn’t working, generate a support bundle with the support-bundle CLI. It discovers the diagnostic specs that ship with the chart and collects logs, resource states, and health checks from the installation:

Send it to us

Upload the resulting archive directly to our support team — the upload authenticates with the license embedded in the bundle:

Common issues