Helm Deployment

February 10, 2026 ยท View on GitHub

Deploy Hemmelig on Kubernetes using Helm.

Prerequisites

  • Kubernetes 1.19+
  • Helm 3.0+
  • PV provisioner support (for persistence)

Quick Start

# Add the chart from local directory
cd Hemmelig.app

# Install with default values
helm install hemmelig ./helm/hemmelig \
  --set config.betterAuthSecret="$(openssl rand -base64 32)" \
  --set config.betterAuthUrl="https://hemmelig.example.com"

Installation

From Local Chart

# Clone the repository
git clone https://github.com/HemmeligOrg/Hemmelig.app.git
cd Hemmelig.app

# Install the chart
helm install hemmelig ./helm/hemmelig -f my-values.yaml

Example values.yaml

# my-values.yaml
config:
    betterAuthSecret: 'your-secret-key-min-32-chars'
    betterAuthUrl: 'https://hemmelig.example.com'

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

persistence:
    data:
        enabled: true
        size: 1Gi
    uploads:
        enabled: true
        size: 10Gi

resources:
    limits:
        cpu: 500m
        memory: 512Mi
    requests:
        cpu: 100m
        memory: 128Mi

Configuration

Required Values

ParameterDescription
config.betterAuthSecretAuthentication secret (min 32 characters). Generate with openssl rand -base64 32
config.betterAuthUrlPublic URL of your instance (required for OAuth and cookie handling)

Common Values

ParameterDescriptionDefault
replicaCountNumber of replicas1
image.repositoryImage repositoryhemmelig/hemmelig
image.tagImage tagv7
service.typeKubernetes service typeClusterIP
service.portService port3000
ingress.enabledEnable ingressfalse
persistence.data.enabledEnable persistence for databasetrue
persistence.data.sizeDatabase PVC size1Gi
persistence.uploads.enabledEnable persistence for uploadstrue
persistence.uploads.sizeUploads PVC size5Gi

Using Existing Secrets

Instead of setting config.betterAuthSecret directly, use an existing Kubernetes secret:

existingSecret: my-hemmelig-secret

Create the secret:

kubectl create secret generic my-hemmelig-secret \
  --from-literal=BETTER_AUTH_SECRET="$(openssl rand -base64 32)"

Additional Environment Variables

env:
    - name: HEMMELIG_ANALYTICS_ENABLED
      value: 'true'

OAuth Configuration

The Hemmelig Helm Chart supports comprehensive OAuth provider configuration. For detailed setup instructions and examples, see:

OAuth Configuration with Helm

This guide covers:

  • All supported OAuth providers (GitHub, Google, Microsoft, Discord, GitLab, Apple, Twitter/X)
  • Generic OAuth providers (Authentik, Authelia, Keycloak, etc.)
  • Default secret vs existing secret management
  • Required configuration for OAuth callbacks

Ingress Examples

Nginx Ingress

ingress:
    enabled: true
    className: nginx
    annotations:
        nginx.ingress.kubernetes.io/proxy-body-size: '50m'
    hosts:
        - host: hemmelig.example.com
          paths:
              - path: /
                pathType: Prefix

Traefik Ingress

ingress:
    enabled: true
    className: traefik
    annotations:
        traefik.ingress.kubernetes.io/router.tls: 'true'
    hosts:
        - host: hemmelig.example.com
          paths:
              - path: /
                pathType: Prefix

Upgrading

helm upgrade hemmelig ./helm/hemmelig -f my-values.yaml

Uninstalling

helm uninstall hemmelig

Note: PersistentVolumeClaims are not deleted automatically. To remove all data:

kubectl delete pvc -l app.kubernetes.io/name=hemmelig

Troubleshooting

Check Pod Status

kubectl get pods -l app.kubernetes.io/name=hemmelig
kubectl logs -l app.kubernetes.io/name=hemmelig

Check PVC Status

kubectl get pvc -l app.kubernetes.io/name=hemmelig

Port Forward for Testing

kubectl port-forward svc/hemmelig 3000:3000
# Visit http://localhost:3000