Self-hosting is available by direct arrangement with the sureops team. The Helm chart isn’t published to a public repository — contact hello@sureops.ai for image registry credentials, the chart archive, and a starter values file tailored to your cluster before starting this guide.
Prerequisites
Before installing the chart, verify you have:- Kubernetes 1.24 or later (the chart doesn’t enforce a minimum version at install time)
- Helm 3.10 or later
- An external PostgreSQL database — the chart doesn’t provide an in-cluster option
- Image pull credentials for the sureops container registry (
registry.sureops.ai) - The Helm chart archive and a starter values file, provided directly by your sureops contact
- A license key, if your arrangement with sureops requires one (see the optional
license-keysecret below)
Get the chart
The sureops chart isn’t published to a public Helm repository. Your sureops contact sends you the chart directly as a versioned archive (for example,sureops-0.1.0.tgz) along with a starter values.yaml for your environment.
Once you have the archive, you can inspect it before installing:
Image pull secret
sureops images are hosted in a private registry. Create an image pull secret in your target namespace before installing:sureops-registry by default (configurable via global.imagePullSecrets).
Create the sureops secret
The chart reads sensitive configuration from a Kubernetes Secret rather thanvalues.yaml. Create it with the required keys before installing:
langchain-api-key— enables LangSmith tracingoidc-client-secret— required only if you setapi.env.AUTH_MODE: oidc(see Authentication below)license-key— your sureops license key, if your arrangement requires one
This secret is named
sureops-secret only when your Helm release name contains “sureops” (as in the helm install sureops ... command used throughout this guide). For any other release name, the chart expects <release-name>-sureops-secret instead. The exact name is always echoed back in the helm install/helm upgrade output, so copy it from there if you’re unsure.secrets.externalManaged: true in your values file — otherwise the chart tries to manage the same Secret resource on install and the two collide. This is included in the minimal values file below. The same flag applies if you instead manage the secret through External Secrets Operator, Sealed Secrets, or Vault.
Minimal values file
Create avalues.yaml for your deployment. Start with the minimum required overrides:
Install the chart
sureops-0.1.0.tgz with the archive filename your sureops contact provided.
Verify all pods come up:
sureops-api-*, sureops-agent-worker-*, and — unless you set frontend.enabled: false — sureops-frontend-*.
Upgrade
helm upgrade at it. The chart version is set in the archive’s own Chart.yaml (current: 0.1.0) — there’s no separate --version flag to reach for, since the chart isn’t resolved from a repository.
Values reference
API server
Authentication
The chart ships withapi.env.AUTH_MODE: oidc as its packaged default, but most self-hosted installs find supabase simpler to start with — it’s the same default the sureops backend uses everywhere else — unless you already have an OIDC identity provider you want to integrate. The minimal values file above sets AUTH_MODE: supabase for that reason.
If you do use oidc, you additionally need to set:
api.env.OIDC_ISSUER— your identity provider’s issuer URLapi.env.OIDC_CLIENT_ID— the OIDC client ID registered with your provider- the
oidc-client-secretkey in the sureops secret — the corresponding client secret
Agent worker
PostgreSQL
The chart does not deploy or manage a PostgreSQL instance — you bring your own external database, and the chart connects to it using:
The database password is read from the
db-password key in the sureops secret, not from values.yaml.
values.yaml also ships a postgresql.enabled flag with an in-cluster-looking image/resources/persistence block underneath it. No template in the chart actually deploys PostgreSQL — that block is vestigial. Leave postgresql.enabled: false and configure postgresql.external.* as shown above; setting it to true will not create a database and will leave DATABASE_URL pointing at a host that doesn’t exist.Frontend
The frontend pod is deployed by default. Set
frontend.enabled: false if you serve the frontend from a CDN or external host instead.
Ingress
The default
cert-manager.io/cluster-issuer: letsencrypt-prod annotation assumes a ClusterIssuer named letsencrypt-prod already exists on your cluster. If it doesn’t, either create one or override ingress.annotations to match your own certificate setup.
Secrets
Production checklist
Before running in production:1
Size your external PostgreSQL for production
The chart does not provision or manage PostgreSQL — plan your own high availability and backup strategy for the external database it connects to.
2
Configure TLS
Set up TLS termination via your ingress controller and cert-manager, or a load balancer in front of the cluster. sureops must be served over HTTPS.
3
Tune resource limits
Adjust
api.resources and agentWorker.resources based on your expected incident volume. Agent workers are CPU and memory intensive during active incident resolution.4
Author your own PodDisruptionBudgets
The chart does not create PodDisruptionBudgets. For high-availability deployments, author your own PDB manifests for the api and agent-worker Deployments so at least one replica stays available during rolling updates.
5
Set up log aggregation
All sureops components log to stdout in JSON format. Route logs to your preferred aggregation stack (Loki, OpenSearch, or any log sink that accepts JSON over stdout).
6
Configure backups for PostgreSQL
Ensure your external PostgreSQL instance has point-in-time recovery or regular backups configured. sureops stores all incident data, agent checkpoints, and audit logs in the database.
Uninstall
Related
- Give feedback — report issues with the chart or request new configuration options