Skip to content

Commit df76275

Browse files
authored
Merge pull request #378 from maykinmedia/feature/openvtb-helmchart
Open VTB helm chart
2 parents 1dc5348 + c0f6385 commit df76275

21 files changed

Lines changed: 1518 additions & 0 deletions

charts/openvtb/.helmignore

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
.DS_Store
2+
# Common VCS dirs
3+
.git/
4+
.gitignore
5+
.bzr/
6+
.bzrignore
7+
.hg/
8+
.hgignore
9+
.svn/
10+
# Common backup files
11+
*.swp
12+
*.bak
13+
*.tmp
14+
*.orig
15+
*~
16+
# Various IDEs
17+
.project
18+
.idea/
19+
*.tmproj
20+
.vscode/

charts/openvtb/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Changelog
2+
3+
## 0.1.0 (2026-03-27)
4+
5+
- First chart release! 🎉

charts/openvtb/Chart.lock

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
dependencies:
2+
- name: redis
3+
repository: https://charts.bitnami.com/bitnami
4+
version: 22.0.1
5+
- name: common
6+
repository: https://charts.bitnami.com/bitnami
7+
version: 2.31.4
8+
digest: sha256:f6d1db0bc3e6c719c2cf81b0905885f3b3588880b1a5109027f2f40593f9f05e
9+
generated: "2026-03-27T11:02:08.844017305+01:00"

charts/openvtb/Chart.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: v2
2+
appVersion: 0.1.0
3+
description: Register en API's voor Verzoeken, Taken en Berichten.
4+
name: openvtb
5+
type: application
6+
version: 0.1.0
7+
8+
dependencies:
9+
- name: redis
10+
version: 22.0.1
11+
repository: https://charts.bitnami.com/bitnami
12+
tags:
13+
- redis
14+
- name: common
15+
version: 2.31.4
16+
repository: https://charts.bitnami.com/bitnami
17+
tags:
18+
- bitnami-common

charts/openvtb/README.md

Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
# Open VTB Chart
2+
3+
Register en API's voor Verzoeken, Taken en Berichten.
4+
5+
![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.1.0](https://img.shields.io/badge/AppVersion-0.1.0-informational?style=flat-square)
6+
7+
## Introduction
8+
9+
This chart can be used to deploy Open VTB on a Kubernetes cluster using the Helm package manager.
10+
11+
* [Source code](https://github.com/maykinmedia/open-vtb/)
12+
* [Docker image](https://hub.docker.com/r/maykinmedia/open-vtb)
13+
14+
## Quickstart
15+
16+
```bash
17+
helm repo add maykinmedia https://maykinmedia.github.io/charts/
18+
helm install openvtb maykinmedia/openvtb
19+
```
20+
21+
## Requirements
22+
23+
| Repository | Name | Version |
24+
|------------|------|---------|
25+
| https://charts.bitnami.com/bitnami | common | 2.31.4 |
26+
| https://charts.bitnami.com/bitnami | redis | 22.0.1 |
27+
28+
## Configuration and installation details
29+
30+
### Django specific configuration
31+
32+
**Secret key**
33+
34+
Django makes use of a secret key to provide cryptographic signing.
35+
This key should be set to a unique, unpredictable value.
36+
Without the `SECRET_KEY` environment variable, the application will not start.
37+
38+
The key can be configured with the value `settings.secretKey`. You can use a [web tool](https://djecrety.ir/) to generate it.
39+
40+
**Warning**: Running with a known secret key defeats many of Django’s security protections and can lead to privilege escalation and remote code execution vulnerabilities.
41+
42+
### Automatic configuration
43+
44+
The application can be automatically configured with `django-setup-configuration`.
45+
To enable the automatic configuration, the following values should be set:
46+
47+
```yaml
48+
global:
49+
configuration:
50+
enabled: true
51+
52+
configuration:
53+
enabled: true
54+
job:
55+
enabled: true
56+
```
57+
58+
The yaml data needed to configure the application should be provided in the value `configuration.data`.
59+
In the `values.yaml` file you can find an example of what the configuration should look like.
60+
The configuration can include sensitive data. To avoid having sensitive values in the `values.yaml` file, it is possible to reference
61+
environment variables. This can be done with the following syntax:
62+
63+
```yaml
64+
configuration:
65+
data:
66+
someSensitiveVariable:
67+
from_value:
68+
env: SOME_SENSITIVE_VARIABLE
69+
```
70+
These environment variables should be provided in a secret, whose name must then be referenced
71+
with the value `existingConfigurationSecret` so that it is added to the environment of the Job pod.
72+
73+
### Open Telemetry
74+
75+
Open VTB supports the Open Telemetry Protocol.
76+
77+
We recommend deploying one or more Open Telemetry Collector instances in your cluster to receive
78+
telemetry. Alternatively, you can use any vendor that speaks the OTLP protocol.
79+
80+
The environment variables that the Open Telemetry SDK supports can be found [here](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/#general-sdk-configuration).
81+
82+
## Values
83+
84+
| Key | Type | Default | Description |
85+
|-----|------|---------|-------------|
86+
| affinity | object | `{}` | |
87+
| autoscaling.behaviour | object | `{}` | |
88+
| autoscaling.enabled | bool | `false` | |
89+
| autoscaling.maxReplicas | int | `100` | |
90+
| autoscaling.minReplicas | int | `1` | |
91+
| autoscaling.targetCPUUtilizationPercentage | int | `80` | |
92+
| autoscaling.targetMemoryUtilizationPercentage | int | `80` | |
93+
| azureVaultSecret.contentType | string | `""` | |
94+
| azureVaultSecret.objectName | string | `""` | |
95+
| azureVaultSecret.secretName | string | `"{{ .Values.existingSecret }}"` | |
96+
| azureVaultSecret.vaultName | string | `nil` | |
97+
| configuration.enabled | bool | `false` | |
98+
| configuration.job.backoffLimit | int | `6` | |
99+
| configuration.job.enabled | bool | `false` | Run the setup configuration command as a job |
100+
| configuration.job.resources | object | `{}` | |
101+
| configuration.job.restartPolicy | string | `"OnFailure"` | |
102+
| configuration.job.ttlSecondsAfterFinished | int | `0` | 0 Will clean the job after it is finished |
103+
| configuration.overwrite | bool | `true` | |
104+
| configuration.secrets | object | `{}` | |
105+
| configuration.superuser.email | string | `""` | |
106+
| configuration.superuser.password | string | `""` | |
107+
| configuration.superuser.username | string | `""` | |
108+
| configurationSecretsName | string | `""` | |
109+
| existingConfigurationSecret | string | `nil` | |
110+
| existingSecret | string | `nil` | |
111+
| extraEnvVars | list | `[]` | Array with extra environment variables to add |
112+
| extraIngress | list | `[]` | Specify extra ingresses, for example if you have multiple ingress classes |
113+
| extraVolumeMounts | list | `[]` | Optionally specify extra list of additional volumeMounts |
114+
| extraVolumes | list | `[]` | Optionally specify extra list of additional volumes |
115+
| fullnameOverride | string | `""` | |
116+
| global.configuration.enabled | bool | `false` | |
117+
| global.configuration.overwrite | bool | `true` | |
118+
| global.configuration.secrets | object | `{}` | |
119+
| global.settings.databaseHost | string | `""` | Global databasehost, overrides setting.database.host |
120+
| image.pullPolicy | string | `"IfNotPresent"` | |
121+
| image.repository | string | `"maykinmedia/open-vtb"` | |
122+
| image.tag | string | `""` | |
123+
| imagePullSecrets | list | `[]` | |
124+
| ingress.annotations | object | `{}` | |
125+
| ingress.className | string | `""` | |
126+
| ingress.enabled | bool | `false` | |
127+
| ingress.hosts | list | `[]` | ingress hosts |
128+
| ingress.tls | list | `[]` | |
129+
| livenessProbe.failureThreshold | int | `6` | |
130+
| livenessProbe.initialDelaySeconds | int | `60` | |
131+
| livenessProbe.periodSeconds | int | `10` | |
132+
| livenessProbe.successThreshold | int | `1` | |
133+
| livenessProbe.timeoutSeconds | int | `5` | |
134+
| nameOverride | string | `""` | |
135+
| nodeSelector | object | `{}` | |
136+
| pdb.create | bool | `false` | |
137+
| pdb.maxUnavailable | string | `""` | |
138+
| pdb.minAvailable | int | `1` | |
139+
| persistence.enabled | bool | `true` | |
140+
| persistence.existingClaim | string | `nil` | |
141+
| persistence.mediaMountSubpath | string | `"openvtb/media"` | |
142+
| persistence.size | string | `"1Gi"` | |
143+
| persistence.storageClassName | string | `""` | |
144+
| podAnnotations | object | `{}` | |
145+
| podLabels | object | `{}` | |
146+
| podSecurityContext.fsGroup | int | `1000` | |
147+
| readinessProbe.failureThreshold | int | `6` | |
148+
| readinessProbe.initialDelaySeconds | int | `30` | |
149+
| readinessProbe.periodSeconds | int | `10` | |
150+
| readinessProbe.successThreshold | int | `1` | |
151+
| readinessProbe.timeoutSeconds | int | `5` | |
152+
| redis.architecture | string | `"standalone"` | |
153+
| redis.auth.enabled | bool | `false` | |
154+
| redis.image.registry | string | `"docker.io"` | |
155+
| redis.image.repository | string | `"redis"` | |
156+
| redis.image.tag | string | `"8.0"` | |
157+
| redis.master.persistence.enabled | bool | `true` | |
158+
| redis.master.persistence.size | string | `"8Gi"` | |
159+
| redis.master.persistence.storageClass | string | `""` | |
160+
| redis.master.resources.requests.cpu | string | `"250m"` | |
161+
| redis.master.resources.requests.memory | string | `"256Mi"` | |
162+
| replicaCount | int | `2` | |
163+
| resources | object | `{}` | |
164+
| securityContext.capabilities.drop[0] | string | `"ALL"` | |
165+
| securityContext.readOnlyRootFilesystem | bool | `false` | |
166+
| securityContext.runAsNonRoot | bool | `true` | |
167+
| securityContext.runAsUser | int | `1000` | |
168+
| service.port | int | `80` | |
169+
| service.type | string | `"ClusterIP"` | |
170+
| serviceAccount.annotations | object | `{}` | |
171+
| serviceAccount.automountServiceAccountToken | bool | `true` | |
172+
| serviceAccount.create | bool | `true` | |
173+
| serviceAccount.name | string | `""` | |
174+
| settings.allowedHosts | string | `""` | |
175+
| settings.cache.axes | string | `""` | |
176+
| settings.cache.default | string | `""` | |
177+
| settings.database.dbPool.dbPoolMaxIdle | int | `600` | |
178+
| settings.database.dbPool.dbPoolMaxLifetime | int | `3600` | |
179+
| settings.database.dbPool.dbPoolMaxSize | int | `4` | |
180+
| settings.database.dbPool.dbPoolMaxWaiting | int | `0` | |
181+
| settings.database.dbPool.dbPoolMinSize | int | `4` | |
182+
| settings.database.dbPool.dbPoolNumWorkers | int | `3` | |
183+
| settings.database.dbPool.dbPoolReconnectTimeout | int | `300` | |
184+
| settings.database.dbPool.dbPoolTimeout | int | `30` | |
185+
| settings.database.dbPool.enabled | bool | `false` | |
186+
| settings.database.host | string | `""` | |
187+
| settings.database.name | string | `""` | |
188+
| settings.database.password | string | `""` | |
189+
| settings.database.port | int | `5432` | |
190+
| settings.database.sslmode | string | `"prefer"` | |
191+
| settings.database.username | string | `""` | |
192+
| settings.debug | bool | `false` | |
193+
| settings.disable2fa | bool | `false` | Disable two factor authentication |
194+
| settings.djangoSettingsModule | string | `"openvtb.conf.docker"` | |
195+
| settings.elasticapm.serviceName | string | `""` | |
196+
| settings.elasticapm.token | string | `""` | |
197+
| settings.elasticapm.url | string | `""` | |
198+
| settings.email.defaultFrom | string | `""` | |
199+
| settings.email.host | string | `"localhost"` | |
200+
| settings.email.password | string | `""` | |
201+
| settings.email.port | int | `25` | |
202+
| settings.email.useTLS | bool | `false` | |
203+
| settings.email.username | string | `""` | |
204+
| settings.environment | string | `""` | sets the 'ENVIRONMENT' variable |
205+
| settings.isHttps | bool | `true` | |
206+
| settings.otel.disabled | bool | `true` | |
207+
| settings.otel.exporterOtlpEndpoint | string | `""` | Network address where to send the metrics to. Examples are: https://otel.example.com:4318 or http://otel-collector.namespace.cluster.svc:4317. |
208+
| settings.otel.exporterOtlpHeaders | list | `[]` | Any additional HTTP headers, for example if you need Basic auth. This is used in the secret.yaml, as it can contain credentials. |
209+
| settings.otel.exporterOtlpMetricsInsecure | bool | `false` | Is true if the endoint is not protected with TLS. |
210+
| settings.otel.exporterOtlpProtocol | string | `"grpc"` | Controls the wire protocol for the OTLP data. Available options: grpc and http/protobuf. |
211+
| settings.otel.metricExportInterval | int | `60000` | Controls how often (in milliseconds) the metrics are exported. The exports run in a background thread and should not affect the performance of the application. |
212+
| settings.otel.metricExportTimeout | int | `10000` | Controls the timeout of the requests to the collector (in milliseconds) |
213+
| settings.otel.resourceAttributes | list | `[]` | Resources Attributes can be used to specify additional information about the instance. |
214+
| settings.secretKey | string | `""` | Generate secret key at https://djecrety.ir/ |
215+
| settings.sentry.dsn | string | `""` | |
216+
| settings.useXForwardedHost | bool | `false` | |
217+
| settings.uwsgi.harakiri | string | `""` | |
218+
| settings.uwsgi.master | string | `""` | |
219+
| settings.uwsgi.maxRequests | string | `""` | |
220+
| settings.uwsgi.processes | string | `""` | |
221+
| settings.uwsgi.threads | string | `""` | |
222+
| startupProbe.failureThreshold | int | `30` | |
223+
| startupProbe.initialDelaySeconds | int | `15` | Total time: 15s initial delay + (30 failures × 10s period) = 315s (5 minutes 15 seconds) |
224+
| startupProbe.periodSeconds | int | `10` | |
225+
| startupProbe.successThreshold | int | `1` | |
226+
| startupProbe.timeoutSeconds | int | `5` | |
227+
| tags.redis | bool | `true` | |
228+
| tolerations | list | `[]` | |

charts/openvtb/README.md.gotmpl

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Open VTB Chart
2+
3+
{{ template "chart.description" . }}
4+
5+
{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }}
6+
7+
## Introduction
8+
9+
This chart can be used to deploy Open VTB on a Kubernetes cluster using the Helm package manager.
10+
11+
* [Source code](https://github.com/maykinmedia/open-vtb/)
12+
* [Docker image](https://hub.docker.com/r/maykinmedia/open-vtb)
13+
14+
## Quickstart
15+
16+
```bash
17+
helm repo add maykinmedia https://maykinmedia.github.io/charts/
18+
helm install {{ template "chart.name" . }} maykinmedia/{{ template "chart.name" . }}
19+
```
20+
21+
{{ template "chart.requirementsSection" . }}
22+
23+
## Configuration and installation details
24+
25+
### Django specific configuration
26+
27+
**Secret key**
28+
29+
Django makes use of a secret key to provide cryptographic signing.
30+
This key should be set to a unique, unpredictable value.
31+
Without the `SECRET_KEY` environment variable, the application will not start.
32+
33+
The key can be configured with the value `settings.secretKey`. You can use a [web tool](https://djecrety.ir/) to generate it.
34+
35+
**Warning**: Running with a known secret key defeats many of Django’s security protections and can lead to privilege escalation and remote code execution vulnerabilities.
36+
37+
### Automatic configuration
38+
39+
The application can be automatically configured with `django-setup-configuration`.
40+
To enable the automatic configuration, the following values should be set:
41+
42+
```yaml
43+
global:
44+
configuration:
45+
enabled: true
46+
47+
configuration:
48+
enabled: true
49+
job:
50+
enabled: true
51+
```
52+
53+
The yaml data needed to configure the application should be provided in the value `configuration.data`.
54+
In the `values.yaml` file you can find an example of what the configuration should look like.
55+
The configuration can include sensitive data. To avoid having sensitive values in the `values.yaml` file, it is possible to reference
56+
environment variables. This can be done with the following syntax:
57+
58+
```yaml
59+
configuration:
60+
data:
61+
someSensitiveVariable:
62+
from_value:
63+
env: SOME_SENSITIVE_VARIABLE
64+
```
65+
These environment variables should be provided in a secret, whose name must then be referenced
66+
with the value `existingConfigurationSecret` so that it is added to the environment of the Job pod.
67+
68+
### Open Telemetry
69+
70+
Open VTB supports the Open Telemetry Protocol.
71+
72+
We recommend deploying one or more Open Telemetry Collector instances in your cluster to receive
73+
telemetry. Alternatively, you can use any vendor that speaks the OTLP protocol.
74+
75+
The environment variables that the Open Telemetry SDK supports can be found [here](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/#general-sdk-configuration).
76+
77+
78+
{{ template "chart.valuesSection" . }}

0 commit comments

Comments
 (0)