Deploy with Kubernetes (Helm)

Deploy InfraWatch to any Kubernetes cluster using the official Helm chart. Supports in-cluster or external PostgreSQL and Valkey.

Prerequisites

Step 1 — Add the Helm repo

Terminal
helm repo add infrawatch https://infrawatch.mguptahub.com/helm
helm repo update

Step 2 — Configure values

Create a values.yaml file with your configuration:

values.yaml
# AWS credentials (server-side only)
aws:
  powerAccessKeyId: "AKIA..."
  powerSecretAccessKey: "..."
  region: us-east-1
  baseRoleArn: "arn:aws:iam::123456789012:role/PowerUserRole"

# Application
app:
  adminEmail: admin@company.com
  cookieSecure: true
  corsOrigins: https://infrawatch.example.com

# SMTP
smtp:
  host: smtp.company.com
  port: 587
  user: "..."
  password: "..."
  from: noreply@company.com

# Services (in-cluster)
services:
  postgresql:
    enabled: true
    auth:
      password: "strong-password"
  valkey:
    enabled: true
    password: "strong-password"

# Ingress
ingress:
  enabled: true
  className: nginx
  hosts:
    - host: infrawatch.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: infrawatch-tls
      hosts:
        - infrawatch.example.com

See the full values reference for all available options.

Step 3 — Install

Using the values file:

Terminal
helm install infrawatch infrawatch/infrawatch -f values.yaml

Or use --set flags directly:

Terminal
helm install infrawatch infrawatch/infrawatch \
  --set aws.powerAccessKeyId=AKIA... \
  --set aws.powerSecretAccessKey=... \
  --set aws.baseRoleArn=arn:aws:iam::123456789012:role/PowerUserRole \
  --set app.adminEmail=admin@company.com \
  --set smtp.host=smtp.company.com \
  --set smtp.from=noreply@company.com \
  --set services.postgresql.auth.password=secret \
  --set services.valkey.password=secret

Using an External Database

To use an existing PostgreSQL instance (e.g., Amazon RDS) instead of the in-cluster deployment:

values.yaml (external PostgreSQL)
services:
  postgresql:
    enabled: false

externalServices:
  postgresql:
    host: my-rds.example.com
    port: 5432
    database: awsdashboard
    username: awsdashboard
    password: "secret"
Existing Secrets
Instead of plain-text passwords, you can reference a pre-existing Kubernetes secret:
externalServices.postgresql.existingSecret: "my-pg-secret"
externalServices.postgresql.existingSecretKey: "password"

Using External Valkey / Redis

To use a managed Redis-compatible service instead of in-cluster Valkey:

values.yaml (external Valkey)
services:
  valkey:
    enabled: false

externalServices:
  valkey:
    url: "redis://:password@my-redis.example.com:6379"

Ingress Configuration

The Helm chart includes an optional Ingress resource that routes /api to the backend and everything else to the frontend.

values.yaml (ingress)
ingress:
  enabled: true
  className: nginx
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
  hosts:
    - host: infrawatch.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: infrawatch-tls
      hosts:
        - infrawatch.example.com

Upgrading

Terminal
helm repo update
helm upgrade infrawatch infrawatch/infrawatch -f values.yaml

To roll back:

Terminal
helm rollback infrawatch