Deploy DevGuard with Helm
Deploy DevGuard to a Kubernetes cluster using the official Helm chart. This is the recommended method for production deployments.
Prerequisites
- Kubernetes cluster (1.24+)
- Helm 3.x installed
kubectlconfigured for your cluster
Create namespace
kubectl create namespace devguardCreate required secrets
DevGuard requires an EC private key for signing In-Toto attestations:
openssl ecparam -name prime256v1 -genkey -noout -out private.ec.key
kubectl create secret generic ec-private-key \
--from-file=privateKey=private.ec.key \
-n devguardCreate your values file
Create a values.yaml with your configuration:
api:
ingress:
enabled: true
hosts:
- host: api.devguard.example.com
paths:
- path: /
pathType: Prefix
web:
ingress:
enabled: true
hosts:
- host: devguard.example.com
paths:
- path: /
pathType: Prefix
# Authentication settings
password:
enabled: true
passkey:
enabled: true
# Mail configuration (required for account verification)
mail:
existingSMTPConnectionUriSecret: "smtp-secret"
fromAddress: "noreply@example.com"
fromName: "DevGuard"See the full values.yaml for all configuration options. To inspect the chart locally:
helm pull oci://ghcr.io/l3montree-dev/devguard-helm-chart/devguard --version <version>
tar -xzf devguard-<version>.tgz
cd devguardInstall the chart
helm install devguard oci://ghcr.io/l3montree-dev/devguard-helm-chart/devguard \
--version <version> \
--namespace devguard \
-f values.yamlVerify deployment
kubectl get pods -n devguardAll pods should reach Running status within a few minutes. You will find the postgres pod, kratos pod, API deployment, and web deployment.
Optional: CSAF Support
For CSAF advisory generation, create a PGP key pair:
gpg --full-generate-key
KEY_ID=$(gpg --list-secret-keys --keyid-format LONG | grep sec | head -1 | awk '{print $2}' | cut -d'/' -f2)
gpg --armor --export "$KEY_ID" > public.asc
gpg --armor --export-secret-keys "$KEY_ID" > private.asc
FINGERPRINT=$(gpg --fingerprint "$KEY_ID" | grep -A1 "pub " | tail -1 | tr -d ' ')
kubectl create secret generic csaf-key-pair \
--from-file=privateKey=private.asc \
--from-file=publicKey=public.asc \
--from-literal=passphrase="your-passphrase" \
--from-literal=fingerprint="$FINGERPRINT" \
-n devguardThen add the CSAF section to your values.yaml (under the existing api: block):
api:
csaf:
existingCsafSecretName: "csaf-key-pair"
aggregatorNamespace: "example.com"
aggregatorName: "Example GmbH"
aggregatorContactDetails: "csaf@example.com"Then upgrade the release:
helm upgrade devguard oci://ghcr.io/l3montree-dev/devguard-helm-chart/devguard \
--version {version} \
--namespace devguard \
-f values.yaml