Helm 3 chart for self-hosting the openconcho web UI on Kubernetes.
The chart deploys a single nginx-unprivileged container (port 8080, UID 101) that serves the React SPA and reverse-proxies Honcho API calls under /api to avoid browser CORS issues.
- Kubernetes 1.25+
- Helm 3.10+
- A running Honcho instance reachable from within the cluster (or via a configured ingress)
Add the chart repository:
helm registry login ghcr.io --username <github-username> --password <github-token>Install the chart:
helm install openconcho oci://ghcr.io/offendingcommit/charts/openconcho \
--version 0.14.0 \
--set honcho.defaultUrl=https://honcho.example.comOr with a values file (recommended):
helm install openconcho oci://ghcr.io/offendingcommit/charts/openconcho \
--version 0.14.0 \
-f my-values.yamlhelm upgrade openconcho oci://ghcr.io/offendingcommit/charts/openconcho \
--version <new-version> \
-f my-values.yamlhelm uninstall openconchoAll values with their defaults are documented in values.yaml. Key options:
| Value | Default | Description |
|---|---|---|
replicaCount |
1 |
Number of pod replicas |
image.repository |
ghcr.io/offendingcommit/openconcho-web |
Container image |
image.tag |
"" |
Tag; defaults to chart appVersion |
image.pullPolicy |
IfNotPresent |
Image pull policy |
honcho.defaultUrl |
"" |
Honcho URL pre-seeded in the UI |
honcho.upstreamAllowlist |
"" |
SSRF guard (comma-separated host globs) |
service.type |
ClusterIP |
ClusterIP / NodePort / LoadBalancer |
service.port |
80 |
Service port |
ingress.enabled |
false |
Enable Ingress resource |
ingress.className |
"" |
IngressClass name |
autoscaling.enabled |
false |
Enable HorizontalPodAutoscaler |
podDisruptionBudget.enabled |
false |
Enable PodDisruptionBudget |
networkPolicy.enabled |
false |
Enable NetworkPolicy (same-namespace only) |
resources.requests.memory |
32Mi |
Memory request |
resources.limits.memory |
128Mi |
Memory limit |
honcho:
defaultUrl: http://honcho.honcho.svc.cluster.local:8000honcho:
defaultUrl: https://honcho.example.com
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: openconcho.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: openconcho-tls
hosts:
- openconcho.example.comreplicaCount: 2
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 70
podDisruptionBudget:
enabled: true
minAvailable: 1Note: When
networkPolicy.enabled=trueandingress.enabled=true, you must add a policy that allows traffic from the ingress-controller namespace. Runhelm status <release>for the exactkubectl editcommand after install.
networkPolicy:
enabled: true
ingress:
enabled: true
className: nginx
hosts:
- host: openconcho.example.com
paths:
- path: /
pathType: Prefiximage:
repository: registry.example.com/myorg/openconcho-web
tag: "0.14.0"
pullPolicy: Always
imagePullSecrets:
- name: registry-credentialsapiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: openconcho
namespace: argocd
spec:
project: default
source:
repoURL: ghcr.io/offendingcommit/charts
chart: openconcho
targetRevision: 0.14.0
helm:
valuesObject:
honcho:
defaultUrl: https://honcho.example.com
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: openconcho.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: openconcho-tls
hosts:
- openconcho.example.com
destination:
server: https://kubernetes.default.svc
namespace: openconcho
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=trueOCI chart sources require ArgoCD 2.10+ (OCI Helm support GA).
After install, run the bundled tests to verify the deployment is healthy:
helm test openconchoTwo test pods run and exit 0 on success:
| Test | What it checks |
|---|---|
test-healthz |
GET /healthz body equals ok |
test-spa-root |
GET / returns HTTP 200 |
Pass --logs to see output from failing pods:
helm test openconcho --logs| Control | Value |
|---|---|
| Run as UID/GID | 101 (nginx-unprivileged) |
runAsNonRoot |
true |
readOnlyRootFilesystem |
true |
| Linux capabilities | all dropped |
seccompProfile |
RuntimeDefault |
allowPrivilegeEscalation |
false |
automountServiceAccountToken |
false |
| Writable paths | /var/cache/nginx, /var/run, /tmp (tmpfs) |