A Helm chart is provided for deploying Strøm on Kubernetes with proper secret management, RBAC, and optional container runners.
- Kubernetes 1.26+
- Helm 3.8+
- PostgreSQL database (external)
helm install stroem oci://ghcr.io/fremvaerk/charts/stroem
# Install specific version
helm install stroem oci://ghcr.io/fremvaerk/charts/stroem --version 1.0.0
# Install with values file
helm install stroem oci://ghcr.io/fremvaerk/charts/stroem -f values.yaml
helm upgrade stroem oci://ghcr.io/fremvaerk/charts/stroem --version 1.1.0
The chart uses a config pass-through pattern:
server.config and worker.config contain the full YAML config passed as-is to ConfigMaps
- Secrets are injected via
extraSecretEnv as STROEM__ environment variables that override config values at runtime
- No init containers or sed templating — clean and debuggable
| Env Var | Overrides YAML key |
|---|
STROEM__DB__URL | db.url |
STROEM__WORKER_TOKEN | worker_token |
STROEM__AUTH__JWT_SECRET | auth.jwt_secret |
STROEM__LISTEN | listen |
| Key | Description | Default |
|---|
server.image.repository | Server image repository | stroem-server |
server.image.tag | Server image tag | latest |
server.replicas | Number of server replicas | 1 |
server.service.type | Kubernetes service type | ClusterIP |
server.service.port | Service port | 8080 |
server.config | Full server-config.yaml content | See values.yaml |
server.extraSecretEnv | Secret env vars for overrides | {} |
server.extraEnv | Plain env vars | {} |
server.resources | CPU/memory resource limits | {} |
| Key | Description | Default |
|---|
worker.image.repository | Worker image repository | stroem-worker |
worker.image.tag | Worker image tag | latest |
worker.replicas | Number of worker replicas | 2 |
worker.config | Full worker-config.yaml content | See values.yaml |
worker.extraSecretEnv | Secret env vars for overrides | {} |
worker.extraEnv | Plain env vars | {} |
worker.dind.enabled | Enable Docker-in-Docker sidecar | false |
worker.dind.image | DinD image | docker:27-dind |
worker.resources | CPU/memory resource limits | {} |
server_url and worker_name are automatically injected — server_url is derived from the Helm release name, and worker_name is set to the pod name.
| Key | Description | Default |
|---|
rbac.create | Create RBAC resources | true |
serviceAccount.create | Create service account | true |
serviceAccount.name | Service account name override | "" |
| Key | Description | Default |
|---|
ingress.enabled | Enable ingress | false |
ingress.className | Ingress class name | "" |
ingress.annotations | Ingress annotations | {} |
ingress.hosts | Ingress host rules | See values.yaml |
ingress.tls | TLS configuration | [] |
url: "postgres://stroem:stroem@postgres:5432/stroem"
local_dir: /var/stroem/logs
worker_token: "dev-token"
local_dir: /var/stroem/logs
worker_token: "placeholder"
STROEM__DB__URL: "postgres://real-user:real-pass@rds:5432/stroem"
STROEM__WORKER_TOKEN: "production-secret-token"
STROEM__WORKER_TOKEN: "production-secret-token"
jwt_secret: "placeholder"
refresh_secret: "placeholder"
STROEM__AUTH__JWT_SECRET: "real-jwt-secret"
STROEM__AUTH__REFRESH_SECRET: "real-refresh-secret"
STROEM__AUTH__INITIAL_USER__PASSWORD: "real-admin-password"
- host: stroem.example.com
helm install stroem ./helm/stroem \
--set database.url="postgres://stroem:pw@postgres:5432/stroem" \
--set workerToken="my-secure-token"
helm install stroem ./helm/stroem \
--set worker.kubernetes.enabled=true \
--set worker.kubernetes.namespace=stroem-jobs
helm install stroem ./helm/stroem \
--set worker.dind.enabled=true