Installation
Deploy the ITOps platform (core API + UI + PostgreSQL) into a Kubernetes cluster. Self-hosted, single Helm chart, sensible defaults.
Prerequisites
- Kubernetes 1.23+ (tested on 1.28–1.32).
- Helm 3.12+.
- An ingress controller (nginx, Traefik, AWS ALB, etc.) if you want external access.
- cert-manager or manually managed TLS certificates.
Default install (bundled PostgreSQL)
helm repo add itops https://charts.mlops.hu
helm repo update
helm install itops itops/itops -n itops --create-namespace
Deploys everything in one namespace with defaults: admin login admin / Password123!, ClusterIP services, no external access yet. Works out of the box for internal use or port-forward testing.
External access
helm install itops itops/itops -n itops --create-namespace \
--set ingress.hosts[0].host=api.yourdomain.com \
--set ingress.tls[0].hosts[0]=api.yourdomain.com \
--set ingress.tls[0].secretName=itops-api-tls \
--set uiIngress.hosts[0].host=app.yourdomain.com \
--set uiIngress.tls[0].hosts[0]=app.yourdomain.com \
--set uiIngress.tls[0].secretName=itops-ui-tls \
--set ui.apiUrl=https://api.yourdomain.com \
--set ui.wsHost=api.yourdomain.com
Two Ingress objects: ingress for the API (GraphQL + REST + WebSocket), uiIngress for the SPA. The UI injects ui.apiUrl at runtime via an nginx entrypoint so the Docker image is environment-agnostic.
External PostgreSQL
For production, use a managed Postgres (RDS, Cloud SQL, self-managed cluster) instead of the bundled Bitnami instance:
--set postgresql.enabled=false \
--set env.ITOPS_DATABASE_HOST=my-postgres.internal \
--set env.ITOPS_DATABASE_PORT=5432 \
--set env.ITOPS_DATABASE_NAME=itops \
--set env.ITOPS_DATABASE_USER=itops \
--set secretEnv.ITOPS_DATABASE_PASSWORD=<password>
The chart creates the schema via auto-migration on first startup (14 migrations, all idempotent).
Secrets
secretEnv:
ITOPS_DATABASE_PASSWORD: "<db password>"
ITOPS_JWT_SECRET: "<32+ char random string>"
ITOPS_SECURITY_OPERATOR_API_KEY: "<32+ char random string>"
ITOPS_LICENSE_KEY: "<ed25519 JWT>" # Required for paid features
Generate a license with go run ./cmd/license-gen --customer "Name" --plugins "ticketing,sla" --max-users 999 --valid-days 365 from the core repo.
Upgrade
helm repo update itops
helm upgrade itops itops/itops -n itops
Migrations run automatically on first pod start after upgrade. Rollback with helm rollback itops <revision>.
Uninstall
helm uninstall itops -n itops
Leaves the PostgreSQL PVC intact so you can re-install without data loss. Delete the namespace to wipe everything: kubectl delete ns itops.
Full values reference
helm show values itops/itops
Every value documented inline. For agent installation see Agent Deploy.