Compare commits

...

19 Commits

Author SHA1 Message Date
kolaente cbfd927f64
chore: release preparation
continuous-integration/drone/push Build is passing Details
2024-02-09 19:17:03 +01:00
xeruf 8300c7599f docs: re-add removed documentation (#19)
continuous-integration/drone/push Build is passing Details
Co-authored-by: xeruf <27jf@pm.me>
Reviewed-on: #19
Co-authored-by: xeruf <git@jfischer.org>
Co-committed-by: xeruf <git@jfischer.org>
2024-02-09 18:14:49 +00:00
kolaente 104e0d86b8
chore: add artifacthub repo config
continuous-integration/drone/push Build is passing Details
2023-11-21 16:29:24 +01:00
perfectra1n a008616143 chore: add ArtifactHub verification file (#18)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #18
Co-authored-by: perfectra1n <perf3ctsec@gmail.com>
Co-committed-by: perfectra1n <perf3ctsec@gmail.com>
2023-11-21 12:34:07 +00:00
kolaente 51e227443e
fix: chart version in defintion
continuous-integration/drone/push Build is passing Details
2023-11-20 12:14:15 +01:00
perfectra1n cbeaa395db feat: update mountPath and update readme for using secrets as config file (#17)
continuous-integration/drone/push Build is passing Details
This is in the spirit of #16 (thanks for all the help @hugosxm), but I wanted to make sure that it was complete, so that users would be able to deploy the Vikunja Helm Chart easily.

This PR resolves the following:
- Increased documentation around utilizing environment variables from Kubernetes secrets.
- Increased documentation for utilizing a Kubernetes secret as the `config.yml` file instead of a ConfigMap
- Fix the incorrect `mountPath` for the `api` pod.

Co-authored-by: perf3ct <jonfuller2012@gmail.com>
Reviewed-on: #17
Reviewed-by: konrad <k@knt.li>
Co-authored-by: perfectra1n <perf3ctsec@gmail.com>
Co-committed-by: perfectra1n <perf3ctsec@gmail.com>
2023-11-20 11:12:35 +00:00
perfectra1n 62112e8df0 Utilize bjw-s's `common` Helm library. (#13)
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #13
Reviewed-by: konrad <k@knt.li>
Co-authored-by: perfectra1n <perf3ctsec@gmail.com>
Co-committed-by: perfectra1n <perf3ctsec@gmail.com>
2023-11-07 14:47:23 +00:00
xeruf 173698726d chore: simplify defaults and link more external documentation (#12)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #12
Co-authored-by: xeruf <git@jfischer.org>
Co-committed-by: xeruf <git@jfischer.org>
2023-09-29 17:17:07 +00:00
kolaente b74bbc6029
chore: update version
continuous-integration/drone/push Build is passing Details
2023-09-15 15:28:40 +02:00
kolaente 33551427d8
chore: update docs
continuous-integration/drone/push Build is passing Details
2023-09-15 15:25:08 +02:00
Yurii Vlasov 5d4142c5bd Added an option to reuse existing PVC
continuous-integration/drone/push Build is passing Details
2023-09-15 15:14:37 +03:00
Vince Grassia 419c58c6f1 fix: 'raw' template (#7)
continuous-integration/drone/push Build is passing Details
Co-authored-by: Vince Grassia <vincenzo.grassia@zionark.com>
Co-authored-by: kolaente <k@knt.li>
Reviewed-on: #7
Reviewed-by: Yurii Vlasov <yuriy@vlasov.pro>
Co-authored-by: Vince Grassia <scouts4914@zionark.com>
Co-committed-by: Vince Grassia <scouts4914@zionark.com>
2023-09-15 09:41:44 +00:00
kolaente b361d79bb2
chore: increase chart version
continuous-integration/drone/push Build is passing Details
2023-07-07 17:42:57 +02:00
kolaente c00cf65dcf
chore: update appVersion for last release
continuous-integration/drone/push Build is passing Details
2023-07-07 17:41:38 +02:00
kolaente 3d7e2a3574
fix(ci): use correct path to packaged helm repo
continuous-integration/drone/push Build is passing Details
2023-07-03 20:55:28 +02:00
r1cebank f9b22567c9 Update security context to allow frontend pod to start (#6)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #6
Reviewed-by: Yurii Vlasov <yuriy@vlasov.pro>
Co-authored-by: r1cebank <siyuangao@pm.me>
Co-committed-by: r1cebank <siyuangao@pm.me>
2023-05-04 21:39:43 +00:00
Yurii Vlasov 1e81af0512 Updated appVersion to 0.20.4 (#4)
continuous-integration/drone/push Build is passing Details
Co-authored-by: Yurii Vlasov <yv@itsvit.org>
Reviewed-on: #4
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Yurii Vlasov <yuriy@vlasov.pro>
Co-committed-by: Yurii Vlasov <yuriy@vlasov.pro>
2023-04-12 19:19:30 +00:00
konrad ab61974ad5 feat: add ci config (#3)
continuous-integration/drone/push Build is passing Details
Resolves #2

Co-authored-by: kolaente <k@knt.li>
Reviewed-on: #3
2023-03-10 21:30:02 +00:00
Yurii Vlasov d84628f6b4 Updated README.md 2023-03-10 23:22:59 +02:00
27 changed files with 500 additions and 982 deletions

51
.drone.yml Normal file
View File

@ -0,0 +1,51 @@
---
kind: pipeline
type: docker
name: build
trigger:
branch:
include:
- main
event:
include:
- push
- pull_request
steps:
- name: build
image: alpine/helm
pull: always
commands:
- helm dependency update
- helm package .
---
kind: pipeline
type: docker
name: release
depends_on:
- build
trigger:
event:
- tag
steps:
- name: build
image: alpine/helm
pull: always
environment:
HELM_PASSWORD:
from_secret: helm_password
commands:
- helm dependency update
- helm package .
- echo $${HELM_PASSWORD} | helm registry login -u frederick --password-stdin kolaente.dev/vikunja
- helm push vikunja-*.tgz oci://kolaente.dev/vikunja
---
kind: signature
hmac: 0f07e164aa169160b10e2813884d8de17a207ac10d4b3f03026e0a9a175acb83
...

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
charts/*.tgz
*.tgz
output.yaml

View File

@ -1,9 +1,12 @@
dependencies:
- name: redis
repository: https://charts.bitnami.com/bitnami
version: 17.5.1
version: 17.11.6
- name: postgresql
repository: https://charts.bitnami.com/bitnami
version: 12.1.9
digest: sha256:32d64f09a27c0f9ae04893871166a0eaed21f1575219aa1d5f8cf0cdd076492b
generated: "2023-01-27T08:31:13.211732638+02:00"
- name: common
repository: https://bjw-s.github.io/helm-charts
version: 1.5.1
digest: sha256:efadd6fed4908e6062d0d227177d5d650e5fe5b9c94f1cc99feb33ce3a1d0916
generated: "2023-10-05T14:21:22.588364801-07:00"

View File

@ -10,24 +10,29 @@ description: |-
the high alpine areas of the Andes and a relative of the llama.
annotations:
category: TaskTracker
version: 0.1.2
appVersion: unstable
version: 0.4.3
appVersion: 0.21.0
kubeVersion: ">= 1.19"
dependencies:
- name: redis
version: 17.5.1
repository: https://charts.bitnami.com/bitnami
condition: redisEnabled
version: 17.11.6
condition: redis.enabled
- name: postgresql
version: 12.1.9
repository: https://charts.bitnami.com/bitnami
condition: postgresqlEnabled
condition: postgresql.enabled
- name: common
repository: https://bjw-s.github.io/helm-charts
version: 1.5.1
keywords:
- vikunja
- todo
- to-do
- task
- tack-tracker
- project-management
- self-hosted
maintainers:
- name: Vikunja
url: https://vikunja.io

262
README.md
View File

@ -1,132 +1,184 @@
Vikunja Helm Chart
===
Deployes both frontend and backend. Also, you can deploy bitnami's PostgreSQL and Redis as subcharts if you want.
This Helm Chart deploys both the Vikunja [frontend](https://hub.docker.com/r/vikunja/frontend) and Vikunja [api](https://hub.docker.com/r/vikunja/api) containers, in addition to other Kubernetes resources so that you'll have a fully functioning Vikunja deployment quickly. Also, you can deploy Bitnami's [PostgreSQL](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) and [Redis](https://github.com/bitnami/charts/tree/main/bitnami/redis) as subcharts if you want, as Vikunja can utilize them as its database and caching mechanism (respectively).
## Requirements
Kubernetes >= 1.19
Helm >= 3
See https://artifacthub.io/packages/helm/vikunja/vikunja for version information and installation instructions.
## Quickstart
Default settings should work for you and if you define ingress settings according to your controller (for both API and Frontend), you will be able to access the frontend. Anyway, it won't have any default credentials. In order to create a user, you **have to enable registration** and register a new user.
Define ingress settings according to your controller (for both API and Frontend) to access the application.
You can set all Vikunja API options as yaml under `api.configMaps.config.data.config.yml`: https://vikunja.io/docs/config-options
For example, you can disable registration (if you do not with to allow others to register on your Vikunja), by providing the following values in your `values.yaml`:
```yaml
api:
config:
service:
enableregistration: true
configMaps:
config:
enabled: true
data:
config.yml:
service:
enableregistration: false
```
Once you have registered, you can disable registration back if you do not need it.
You can still create new users by executing the following command in the `api` container:
## Advanced features
```bash
./vikunja user create --email <user@email.com> --user <user1> --password <password123>
```
### Raw resources
## Advanced Features
Often happens, that you have to deploy some cloud-specific resources that are not a part of the application chart itself. You have to either create an extra chart for that, or manage them with other tools (kustomize, plain manifests etc.). That is painful. We have a solution. If you want to create anything that is not present in the chart, *just add it in raw*!
### Replicas
Let's say, you are hosted in [GKE](https://cloud.google.com/kubernetes-engine) and want to use Google-managed TLS certificates. In order to do that, you have to create a ManagedCertificate resource. It can be done this way.
To effectively run multiple replicas of the API,
make sure to set up the redis cache as well
by setting `api.configMaps.config.data.config.yml.keyvalue.type` to `redis`,
configuring the redis subchart (see [values.yaml](./values.yaml#L119))
and the connection [in Vikunja](https://vikunja.io/docs/config-options/#redis)
### Use an existing file volume claim
In the `values.yaml` file, you can either define your own existing Persistent Volume Claim (PVC)
or have the chart create one on your behalf.
To have the chart use your pre-existing PVC:
```yaml
api:
persistence:
data:
enabled: true
existingClaim: <your-claim>
```
To have the chart create one on your behalf:
```yaml
# You can find the default values
api:
enabled: true
persistence:
data:
enabled: true
accessMode: ReadWriteOnce
size: 10Gi
mountPath: /app/vikunja/files
storageClass: storage-class
```
### Utilizing environment variables from Kubernetes secrets
Each environment variable that is "injected" into a pod can be sourced from a Kubernetes secret.
This is useful when you wish to add values that you would rather keep as secrets in your GitOps repo
as environment variables in the pods.
Assuming that you had a Kubernetes secret named `vikunja-env`,
this is how you would add the value stored at key `VIKUNJA_DATABASE_PASSWORD` as the environment variable named `VIKUNJA_DATABASE_PASSWORD`:
```yaml
api:
env:
VIKUNJA_DATABASE_PASSWORD:
valueFrom:
secretKeyRef:
name: vikunja-env
key: VIKUNJA_DATABASE_PASSWORD
VIKUNJA_DATABASE_USERNAME: "db-user"
```
If the keys within the secret are the names of environment variables,
you can simplify passing multiple values to this:
```yaml
api:
envFrom:
- secretRef:
name: vikunja-secret-env
env:
VIKUNJA_DATABASE_USERNAME: "db-user"
```
This will add all keys within the Kubernetes secret named `vikunja-secret-env` as environment variables to the `api` pod. Additionally, if you did not have the key `VIKUNJA_DATABASE_USERNAME` in the `vikunja-secret-env` secret, you could still define it as an environment variable seen above.
How the `envFrom` key works can be seen [here](https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml#L155).
### Utilizing a Kubernetes secret as the `config.yml` file instead of a ConfigMap
If you did not wish to use the ConfigMap provided by the chart, and instead wished to mount your own Kubernetes secret as the `config.yml` file in the `api` pod, you could provide values such as the following (assuming `asdf-my-custom-secret1` was the name of the secret that had the `config.yml` file):
```yaml
api:
persistence:
config:
type: secret
name: asdf-my-custom-secret1
```
Then your secret should look something like the following so that it will mount properly:
```yaml
apiVersion: v1
kind: Secret
metadata:
name: asdf-my-custom-secret1
namespace: vikunja
type: Opaque
stringData:
config.yml: |
key1: value1
key2: value2
key3: value3
```
### Modifying Deployed Resources
Oftentimes, modifications need to be made to a Helm chart to allow it to operate in your Kubernetes cluster.
Anything you see [in bjw-s' `common` library](https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml),
including the top-level keys, can be added and subtracted from this chart's `values.yaml`,
underneath the `api`, `frontend`, and (optionally) `typesense` key.
For example, if you wished to create a `serviceAccount` as can be seen [here](https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml#L85-L87) for the `api` pod:
```yaml
api:
serviceAccount:
create: true
```
Then, (for some reason), if you wished to deploy the `frontend` as a `DaemonSet` ([as can be seen here](https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml#L12-L17)), you could do the following:
```yaml
frontend:
enabled: true
annotations:
kubernetes.io/ingress.class: gce
networking.gke.io/managed-certificates: gmc-example-com
hosts:
- host: example.com
paths:
- path: /
pathType: Prefix
controller:
type: daemonset
```
raw:
- apiVersion: networking.gke.io/v1
kind: ManagedCertificate
metadata:
name: gmc-example-com
spec:
domains:
- example.com
```
## Publishing
Or, let's say, you have decided to use Google SQL database instead of self-hosted, and placed credentials in Google Secret Manager. You plan to use [ExternalSecrets](https://external-secrets.io/v0.7.2/) to get that credentials. These can be easily integrated as well.
The following steps are automatically performed when a git tag for a new version is pushed to the repository.
They are only listed here for reference.
```yaml
# Disable embedded database
postgresqlEnabled: false
1. Pull all dependencies before packaging.
api:
config:
database:
# Use PostgreSQL database anyway
type: postgresql
envFrom:
# Bind env variables from the secret
- name: VIKUNJA_DATABASE_USER
valueFrom:
secretKeyRef:
name: postgresql-credentials
key: username
- name: VIKUNJA_DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: postgresql-credentials
key: password
- name: VIKUNJA_DATABASE_HOST
valueFrom:
secretKeyRef:
name: postgresql-credentials
key: hostname
- name: VIKUNJA_DATABASE_DATABASE
valueFrom:
secretKeyRef:
name: postgresql-credentials
key: database
```shell
helm dependency update
```
raw:
- apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: gcpsm
spec:
refreshInterval: 300
provider:
gcpsm:
projectID: my-google-project-id
2. In order to publish the chart, you have to either use curl or helm cm-push.
- apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: postgresql-credentials
spec:
secretStoreRef:
kind: SecretStore
name: gcpsm
target:
deletionPolicy: Delete
refreshInterval: 5m
dataFrom:
- extract:
key: cloud-sql-credentials
```
```shell
helm package .
curl --user '<username>:<password>' -X POST --upload-file './<archive>.tgz' https://kolaente.dev/api/packages/vikunja/helm/api/charts
```
Enjoy!
```shell
helm package .
helm repo add --username '<username>' --password '<password>' vikunja https://kolaente.dev/api/packages/vikunja/helm
helm cm-push './<archive>.tgz' vikunja
```
## Contributing
In order to publish the chart, you have to either use curl or helm cm-push.
```shell
helm package .
curl --user '<username>:<password>' -X POST --upload-file './<archive>.tgz' https://kolaente.dev/api/packages/vikunja/helm/api/charts
```
```shell
helm package .
helm repo add --username '<username>' --password '<password>' vikunja https://kolaente.dev/api/packages/vikunja/helm
helm cm-push './<archive>.tgz' vikunja
```
As you can see, you do not have to specify the name of the repository, just the name of the organization.
As you can see, you do not have to specify the name of the repository, just the name of the organization.

9
artifacthub-repo.yml Normal file
View File

@ -0,0 +1,9 @@
# Artifact Hub repository metadata file
# https://artifacthub.io/docs/topics/repositories/helm-charts/#oci-support
# publish via:
# oras push kolaente.dev/vikunja/vikunja:artifacthub.io --config artifacthub.config.json:application/vnd.cncf.artifacthub.config.v1+yaml artifacthub-repo.yml:application/vnd.cncf.artifacthub.repository-metadata.layer.v1.yaml
repositoryID: 14bd8402-9829-4f9b-b71e-e496fc1307f5
owners: # (optional, used to claim repository ownership)
- name: kolaente
email: artifacthub@kolaente.de

1
artifacthub.config.json Normal file
View File

@ -0,0 +1 @@
{}

View File

View File

@ -1,95 +0,0 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "vikunja.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "vikunja.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "vikunja.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "vikunja.labels" -}}
helm.sh/chart: {{ include "vikunja.chart" . }}
{{ include "vikunja.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "vikunja.selectorLabels" -}}
app.kubernetes.io/name: {{ include "vikunja.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- with .Values.extraLabels }}
{{- toYaml . | nindent 0 }}
{{- end }}
{{- end }}
{{/*
Selector labels for API
*/}}
{{- define "vikunja.apiSelectorLabels" -}}
{{ include "vikunja.selectorLabels" . }}
app.kubernetes.io/component: api
{{- end }}
{{/*
Selector labels for frontend
*/}}
{{- define "vikunja.frontendSelectorLabels" -}}
{{ include "vikunja.selectorLabels" . }}
app.kubernetes.io/component: frontend
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "vikunja.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "vikunja.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}
{{/*
API fullname
*/}}
{{- define "vikunja.apiFullname" -}}
{{- include "vikunja.fullname" . | printf "%s-api" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Frontend fullname
*/}}
{{- define "vikunja.frontendFullname" -}}
{{- include "vikunja.fullname" . | printf "%s-frontend" | trunc 63 | trimSuffix "-" }}
{{- end }}

68
templates/api.yaml Normal file
View File

@ -0,0 +1,68 @@
{{- define "vikunja.api.hardcodedValues" -}}
global:
nameOverride: api
service:
main:
enabled: true
primary: true
type: ClusterIP
ports:
http:
enabled: true
primary: true
port: 3456
protocol: HTTP
persistence:
config:
enabled: true
type: configMap
name: "{{ .Release.Name }}-api-config"
mountPath: /etc/vikunja/config.yml
subPath: config.yml
probes:
liveness: &probes
enabled: true
custom: true
spec:
httpGet:
path: /api/v1/info
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
readiness: *probes
startup:
enabled: false
env:
{{ if .Values.redis.enabled }}
VIKUNJA_REDIS_ENABLED: "true"
{{ end }}
{{ if .Values.typesense.enabled }}
VIKUNJA_TYPESENSE_ENABLED: "true"
{{ end }}
{{ if and .Values.frontend.ingress.enabled .Values.api.configMaps.config.enabled}}
# The configuration for Vikunja's api.
# https://vikunja.io/docs/config-options/
VIKUNJA_SERVICE_FRONTENDURL: "http://{{ index .Values.frontend.ingress.main.hosts 0 "host" }}{{ index .Values.frontend.ingress.main.hosts 0 "path" }}"
{{ end }}
# Logic to decide what the api URL should be
{{ if .Values.frontend.ingress.enabled }}
VIKUNJA_FRONTEND_URL: "http://{{ index .Values.frontend.ingress.main.hosts 0 "host" }}{{ index .Values.frontend.ingress.main.hosts 0 "path" }}"
{{ end }}
{{ end }}
{{ if .Values.api.enabled }}
{{- $ctx := deepCopy . -}}
{{- $_ := get .Values "api" | mergeOverwrite $ctx.Values -}}
{{- $_ = include "vikunja.api.hardcodedValues" . | fromYaml | merge $ctx.Values -}}
{{- include "bjw-s.common.loader.all" $ctx }}
{{ end }}

View File

@ -1,126 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "vikunja.apiFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
{{- if not .Values.api.autoscaling.enabled }}
replicas: {{ .Values.api.replicaCount }}
{{- end }}
{{- with .Values.api.extraDeploymentSpec }}
{{- toYaml . | nindent 2 }}
{{- end }}
selector:
matchLabels:
{{- include "vikunja.apiSelectorLabels" . | nindent 6 }}
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
{{- with .Values.api.podAnnotations }}
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "vikunja.apiSelectorLabels" . | nindent 8 }}
spec:
{{- with .Values.api.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "vikunja.serviceAccountName" . }}
{{- with .Values.api.podSecurityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.api.initContainers }}
initContainers:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
{{- with .Values.api.sidecarContainers }}
{{- toYaml . | nindent 8 }}
{{- end }}
- name: api
{{- with .Values.api.securityContext }}
securityContext:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- $image := required ".image.repository is not set" .Values.api.image.repository }}
{{- $tag := default .Chart.AppVersion .Values.api.image.tag | toString }}
image: {{ printf "%s:%s" $image $tag | quote }}
imagePullPolicy: {{ .Values.api.image.pullPolicy }}
ports:
- name: http
containerPort: {{ (.Values.api.config.service.interface | split ":")._1 | int }}
protocol: TCP
{{- with .Values.api.env }}
env:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.api.envFrom }}
envFrom:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.api.livenessProbe }}
livenessProbe:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- with .Values.api.readinessProbe }}
readinessProbe:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- with .Values.api.startupProbe }}
startupProbe:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- with .Values.api.resources }}
resources:
{{- toYaml . | nindent 10 }}
{{- end }}
volumeMounts:
- name: tmp
mountPath: /tmp
- name: api-config
subPath: api-config.yaml
mountPath: /etc/vikunja/config.yaml
{{- if .Values.api.persistence.enabled }}
- name: storage
subPath: files
mountPath: {{ quote .Values.api.config.files.basepath }}
{{- if eq .Values.api.config.database.type "sqlite" }}
- name: storage
subPath: sqlite
mountPath: {{ dir .Values.api.config.database.path | quote }}
{{- end }}
{{- end }}
{{- with .Values.api.extraVolumeMounts }}
{{- toYaml . | nindent 8 }}
{{- end }}
volumes:
- name: tmp
emptyDir: {}
- name: api-config
secret:
secretName: {{ include "vikunja.fullname" . }}
defaultMode: 0644
{{- if .Values.api.persistence.enabled }}
- name: storage
persistentVolumeClaim:
claimName: {{ include "vikunja.apiFullname" . }}
{{- end }}
{{- with .Values.api.extraVolumes }}
{{- toYaml . | nindent 6 }}
{{- end }}
{{- with .Values.api.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.api.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.api.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@ -1,32 +0,0 @@
{{- if .Values.api.autoscaling.enabled }}
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "vikunja.apiFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "vikunja.apiFullname" . }}
minReplicas: {{ int .Values.api.autoscaling.minReplicas }}
maxReplicas: {{ int .Values.api.autoscaling.maxReplicas }}
metrics:
{{- if .Values.api.autoscaling.targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ int .Values.api.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- if .Values.api.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: {{ int .Values.api.autoscaling.targetMemoryUtilizationPercentage }}
{{- end }}
{{- end }}

View File

@ -1,41 +0,0 @@
{{- if .Values.api.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "vikunja.apiFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
{{- with .Values.api.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.api.ingress.className }}
ingressClassName: {{ . }}
{{- end }}
{{- if .Values.api.ingress.tls }}
tls:
{{- range .Values.api.ingress.tls }}
- secretName: {{ quote .secretName }}
hosts:
{{- toYaml .hosts | nindent 8 }}
{{- end }}
{{- end }}
rules:
{{- range .Values.api.ingress.hosts }}
- host: {{ quote .host }}
http:
paths:
{{- range .paths }}
- path: {{ quote .path }}
{{- with .pathType }}
pathType: {{ . }}
{{- end }}
backend:
service:
name: {{ include "vikunja.apiFullname" $ }}
port:
name: http
{{- end }}
{{- end }}
{{- end }}

View File

@ -1,18 +0,0 @@
{{- if .Values.api.pdb.enabled }}
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: {{ include "vikunja.apiFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
{{- with .Values.api.pdb.maxUnavailable }}
maxUnavailable: {{ . }}
{{- end }}
{{- with .Values.api.pdb.minAvailable }}
minAvailable: {{ . }}
{{- end }}
selector:
matchLabels:
{{- include "vikunja.apiSelectorLabels" . | nindent 6 }}
{{- end }}

View File

@ -1,10 +0,0 @@
{{- if .Values.api.persistence.enabled }}
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ include "vikunja.apiFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
{{- toYaml .Values.api.persistence.spec | nindent 2 }}
{{- end }}

View File

@ -1,18 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "vikunja.apiFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
type: {{ .Values.api.service.type }}
ports:
- port: {{ int .Values.api.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "vikunja.apiSelectorLabels" . | nindent 4 }}
{{- with .Values.api.service.extraSpec }}
{{- toYaml . | nindent 2 }}
{{- end }}

29
templates/frontend.yaml Normal file
View File

@ -0,0 +1,29 @@
{{- define "vikunja.frontend.hardcodedValues" -}}
global:
nameOverride: frontend
service:
main:
enabled: true
primary: true
type: ClusterIP
ports:
http:
enabled: true
primary: true
port: 80
protocol: HTTP
env:
{{- if .Values.api.ingress.main.enabled }}
VIKUNJA_API_URL: "http://{{ index .Values.api.ingress.main.hosts 0 "host" }}{{ index .Values.api.ingress.main.hosts 0 "path" }}"
{{ end }}
{{ end }}
{{ if .Values.frontend.enabled }}
{{- $ctx := deepCopy . -}}
{{- $_ := get .Values "frontend" | mergeOverwrite $ctx.Values -}}
{{- $_ = include "vikunja.frontend.hardcodedValues" . | fromYaml | merge $ctx.Values -}}
{{- include "bjw-s.common.loader.all" $ctx }}
{{ end }}

View File

@ -1,107 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "vikunja.frontendFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
{{- if not .Values.frontend.autoscaling.enabled }}
replicas: {{ .Values.frontend.replicaCount }}
{{- end }}
{{- with .Values.frontend.extraDeploymentSpec }}
{{- toYaml . | nindent 2 }}
{{- end }}
selector:
matchLabels:
{{- include "vikunja.frontendSelectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.frontend.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "vikunja.frontendSelectorLabels" . | nindent 8 }}
spec:
{{- with .Values.frontend.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "vikunja.serviceAccountName" . }}
{{- with .Values.frontend.podSecurityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.frontend.initContainers }}
initContainers:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
{{- with .Values.frontend.sidecarContainers }}
{{- toYaml . | nindent 8 }}
{{- end }}
- name: frontend
{{- with .Values.frontend.securityContext }}
securityContext:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- $image := required ".image.repository is not set" .Values.frontend.image.repository }}
{{- $tag := default .Chart.AppVersion .Values.frontend.image.tag | toString }}
image: {{ printf "%s:%s" $image $tag | quote }}
imagePullPolicy: {{ .Values.frontend.image.pullPolicy }}
ports:
- name: http
containerPort: 8080
protocol: TCP
env:
- name: VIKUNJA_API_URL
value: {{ quote .Values.frontend.apiUrl }}
- name: VIKUNJA_HTTP_PORT
value: "8080"
{{- with .Values.frontend.env }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.frontend.envFrom }}
envFrom:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.frontend.livenessProbe }}
livenessProbe:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- with .Values.frontend.readinessProbe }}
readinessProbe:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- with .Values.frontend.startupProbe }}
startupProbe:
{{- toYaml . | nindent 10 }}
{{- end }}
{{- with .Values.frontend.resources }}
resources:
{{- toYaml . | nindent 10 }}
{{- end }}
volumeMounts:
- name: tmp
mountPath: /tmp
{{- with .Values.frontend.extraVolumeMounts }}
{{- toYaml . | nindent 8 }}
{{- end }}
volumes:
- name: tmp
emptyDir: {}
{{- with .Values.frontend.extraVolumes }}
{{- toYaml . | nindent 6 }}
{{- end }}
{{- with .Values.frontend.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.frontend.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.frontend.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}

View File

@ -1,32 +0,0 @@
{{- if .Values.frontend.autoscaling.enabled }}
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "vikunja.frontendFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "vikunja.frontendFullname" . }}
minReplicas: {{ int .Values.frontend.autoscaling.minReplicas }}
maxReplicas: {{ int .Values.frontend.autoscaling.maxReplicas }}
metrics:
{{- if .Values.frontend.autoscaling.targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ int .Values.frontend.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- if .Values.frontend.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: {{ int .Values.frontend.autoscaling.targetMemoryUtilizationPercentage }}
{{- end }}
{{- end }}

View File

@ -1,41 +0,0 @@
{{- if .Values.frontend.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "vikunja.frontendFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
{{- with .Values.frontend.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- with .Values.frontend.ingress.className }}
ingressClassName: {{ . }}
{{- end }}
{{- if .Values.frontend.ingress.tls }}
tls:
{{- range .Values.frontend.ingress.tls }}
- secretName: {{ quote .secretName }}
hosts:
{{- toYaml .hosts | nindent 8 }}
{{- end }}
{{- end }}
rules:
{{- range .Values.frontend.ingress.hosts }}
- host: {{ quote .host }}
http:
paths:
{{- range .paths }}
- path: {{ quote .path }}
{{- with .pathType }}
pathType: {{ . }}
{{- end }}
backend:
service:
name: {{ include "vikunja.frontendFullname" $ }}
port:
name: http
{{- end }}
{{- end }}
{{- end }}

View File

@ -1,18 +0,0 @@
{{- if .Values.frontend.pdb.enabled }}
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: {{ include "vikunja.frontendFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
{{- with .Values.frontend.pdb.maxUnavailable }}
maxUnavailable: {{ . }}
{{- end }}
{{- with .Values.frontend.pdb.minAvailable }}
minAvailable: {{ . }}
{{- end }}
selector:
matchLabels:
{{- include "vikunja.frontendSelectorLabels" . | nindent 6 }}
{{- end }}

View File

@ -1,18 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "vikunja.frontendFullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
spec:
type: {{ .Values.frontend.service.type }}
ports:
- port: {{ int .Values.frontend.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "vikunja.frontendSelectorLabels" . | nindent 4 }}
{{- with .Values.frontend.service.extraSpec }}
{{- toYaml . | nindent 2 }}
{{- end }}

View File

@ -1,5 +0,0 @@
{{- range .Values.vikunja }}
{{- $manifest := include "vikunja.labels" $ | fromYaml | dict "labels" | dict "metadata" | mergeOverwrite . }}
{{- toYaml $manifest }}
---
{{- end }}

View File

@ -1,9 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: {{ include "vikunja.fullname" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
type: Opaque
data:
api-config.yaml: {{ toYaml .Values.api.config | b64enc }}

View File

@ -1,15 +0,0 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "vikunja.serviceAccountName" . }}
labels:
{{- include "vikunja.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}

39
templates/typesense.yaml Normal file
View File

@ -0,0 +1,39 @@
{{- define "vikunja.typesense.hardcodedValues" -}}
global:
nameOverride: typesense
service:
main:
enabled: true
primary: true
type: ClusterIP
ports:
http:
enabled: true
primary: true
port: 8108
protocol: HTTP
probes:
liveness: &probes
enabled: true
custom: true
spec:
httpGet:
path: /health
port: http
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
failureThreshold: 3
readiness: *probes
startup:
enabled: false
{{- end }}
{{ if .Values.typesense.enabled }}
{{- $ctx := deepCopy . -}}
{{- $_ := get .Values "typesense" | mergeOverwrite $ctx.Values -}}
{{- $_ = include "vikunja.typesense.hardcodedValues" . | fromYaml | merge $ctx.Values -}}
{{- include "bjw-s.common.loader.all" $ctx }}
{{ end }}

View File

@ -1,306 +1,151 @@
# ┐ ┬o┬┌ ┬ ┐┌┐┐ ┬┬─┐
# │┌┘│├┴┐│ ││││┌ ││─┤
# └┘ ┘┘ ┘┘─┘┘└┘└─┘┘ ┘
## This chart relies on the common library chart from bjw-s
## You can find it and the values you can provide and modify, at https://github.com/bjw-s/helm-charts/tree/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common
## Here's the link to the values.yaml file: https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml
## Refer there for more detail about the supported values.
## Any values that you find in the above `values.yaml` can be provided to this chart and are then rendered.
nameOverride: ""
fullnameOverride: ""
serviceAccount:
# Specifies whether a service account should be created
create: true
# Annotations to add to the service account
annotations: {}
# Extra labels
extraLabels: {}
# The name of the service account to use.
# If not set and create is true, a name is generated using the fullname template
name: ""
# Extra labels that will be added to all resources
extraLabels: {}
# ┬─┐┬─┐┌─┐┌┐┐┌┐┐┬─┐┌┐┐┬─┐
# ├─ │┬┘│ ││││ │ ├─ ││││ │
# ┘ ┘└┘┘─┘┘└┘ ┘ ┴─┘┘└┘┘─┘
frontend:
# Public API URL that client's browser will reach
apiUrl: ""
replicaCount: 1
image:
repository: vikunja/frontend
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
podSecurityContext: {}
# fsGroup: 1000
securityContext:
capabilities:
drop:
- ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
service:
type: ClusterIP
port: 80
# If you want to set other fields, like externalName, externalTrafficPolicy, etc.
extraSpec: {}
ingress:
enabled: false
className: ""
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: chart-example.local
paths:
- path: /
pathType: ImplementationSpecific
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
initContainers: []
sidecarContainers: []
# Extra keys to set in deployment.spec.
# Useful if you want to set minReadySeconds, progressDeadlineSeconds, strategy
extraDeploymentSpec: {}
pdb:
enabled: false
# maxUnavailable: 50%
minAvailable: 50%
imagePullSecrets: []
podAnnotations: {}
nodeSelector: {}
tolerations: []
affinity: {}
extraVolumes: []
extraVolumeMounts: []
livenessProbe: {}
# httpGet:
# path: /ready
# port: http
readinessProbe: {}
# httpGet:
# path: /ready
# port: http
startupProbe: {}
# httpGet:
# path: /
# port: http
env: {}
envFrom: {}
# ┬─┐┬─┐o
# │─┤│─┘│
# ┘ ┘┘ ┘
image:
tag: 0.21.0
######################
# VIKUNJA COMPONENTS #
######################
# You can find the default values that this `values.yaml` overrides, in the comment at the top of this file.
api:
# Values for this config are described here https://vikunja.io/docs/config-options/
config:
service:
JWTSecret: ""
interface: ":3456"
frontendurl: ""
enableregistration: false
timezone: GMT
database:
type: sqlite
path: /sqlite/vikunja.db
cache:
enabled: true
type: redis
redis:
enabled: false
host: ""
password: ""
db: 0
cors:
enable: false
origins: []
mailer:
enabled: false
log:
path: null
files:
basepath: /files
defaultsettings:
avatar_provider: gravatar
discoverable_by_name: true
discoverable_by_email: true
week_start: 1
persistence:
enabled: false
spec: {}
# accessModes: ["ReadWriteOnce"]
# resources:
# requests:
# storage: 1Gi
# storageClassName: openebs-hostpath
replicaCount: 1
enabled: true
image:
repository: vikunja/api
tag: 0.21.0
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
securityContext:
capabilities:
add: [CAP_CHOWN]
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
service:
type: ClusterIP
port: 80
# If you want to set other fields, like externalName, externalTrafficPolicy, etc.
extraSpec: {}
persistence:
# This is your Vikunja data will live, you can either let
# the chart create a new PVC for you or provide an existing one.
data:
enabled: true
# existingClaim: # your-claim
accessMode: ReadWriteOnce
size: 10Gi
mountPath: /app/vikunja/files
# storageClass: storage-class
ingress:
enabled: false
className: ""
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: chart-example.local
paths:
- path: /
pathType: ImplementationSpecific
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
main:
enabled: true
annotations:
# proxy-body-size is set to 0 to remove the body limit on file uploads
nginx.ingress.kubernetes.io/proxy-body-size: "0"
hosts:
- host: vikunja.local
paths:
- path: "/api/v1"
tls: []
configMaps:
# The configuration for Vikunja's api.
# https://vikunja.io/docs/config-options/
config:
enabled: true
data:
config.yml: |
# Vikunja needs to know the frontend URL for password reset emails.
# So you might need to provide its value, if you're not using an ingress.
# service:
# frontendUrl: http://vikunja.local
resources: {}
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
typesense:
# Typesense will only work if it is enabled below (typesense.enabled).
url: "{{ printf "%s-typesense" .Release.Name }}:8108"
apiKey: "{{ .Values.typesense.env.TYPESENSE_API_KEY }}"
redis:
# Redis will only work if it is enabled below (redis.enabled).
host: "{{ printf "%s-redis-master" .Release.Name }}:6379"
db: "{{ .Release.Name }}"
env:
# To utilize a secret in the environment variables, you can do something like the following: https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml#L141-L145
# You could also use MySQL or SQLite, but we recommend PostgreSQL.
# https://vikunja.io/docs/config-options/#type
VIKUNJA_DATABASE_TYPE: "postgres"
VIKUNJA_DATABASE_USER: "{{ .Values.postgresql.global.postgresql.auth.username }}"
VIKUNJA_DATABASE_PASSWORD: "{{ .Values.postgresql.global.postgresql.auth.password }}"
VIKUNJA_DATABASE_NAME: "{{ .Values.postgresql.global.postgresql.auth.database }}"
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage: 80
# targetMemoryUtilizationPercentage: 80
frontend:
enabled: true
# You can add any of the top-level keys in the common chart's `values.yaml` to override them here.
# For example, this values.yaml file overrides the image values, located here:
# https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml#L63-L69
image:
repository: vikunja/frontend
tag: 0.21.0
pullPolicy: IfNotPresent
# You can use either a `service` or an `ingress` to interact with Vikunja's frontend.
# `Ingress` is the recommended option, but you can still set the `service` to
# `LoadBalancer` or another service type.
# https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml#L294-L354
service:
main:
type: ClusterIP
initContainers: []
# https://github.com/bjw-s/helm-charts/blob/a081de53024d8328d1ae9ff7e4f6bc500b0f3a29/charts/library/common/values.yaml#L393-L436
ingress:
main:
enabled: true
annotations:
# proxy-body-size is set to 0 to remove the body limit on file uploads
nginx.ingress.kubernetes.io/proxy-body-size: "0"
hosts:
# This is just an example. You should change this to your own domain.
- host: vikunja.local
paths:
- path: "/"
tls: []
# You only need to provide the URL to the API as environment variable here if you deviate from the "built-in" ingress in the api section.
#env:
# VIKUNJA_API_URL: http://vikunja.local/api
sidecarContainers: []
##########################
# END VIKUNJA COMPONENTS #
##########################
# Extra keys to set in deployment.spec.
# Useful if you want to set minReadySeconds, progressDeadlineSeconds, strategy
extraDeploymentSpec: {}
# Optional Dependencies
pdb:
enabled: false
# maxUnavailable: 50%
minAvailable: 50%
imagePullSecrets: []
podAnnotations: {}
podSecurityContext: {}
# fsGroup: 1000
nodeSelector: {}
tolerations: []
affinity: {}
extraVolumes: []
extraVolumeMounts: []
livenessProbe: {}
# httpGet:
# path: /ready
# port: http
readinessProbe: {}
# httpGet:
# path: /ready
# port: http
startupProbe: {}
# httpGet:
# path: /
# port: http
env: {}
envFrom: {}
# ┬─┐┌─┐┐─┐┌┐┐┌─┐┬─┐┬─┐┐─┐┐─┐┬
# │─┘│ │└─┐ │ │ ┬│┬┘├─ └─┐│ ││
# ┬─┐┌─┐┐─┐┌┐┐┌─┐┬─┐┬─┐┐─┐┐─┐┬
# │─┘│ │└─┐ │ │ ┬│┬┘├─ └─┐│ ││
# ┘ ┘─┘──┘ ┘ ┘─┘┘└┘┴─┘──┘└─\┘─┘
postgresqlEnabled: false
# Please refer to PostgreSQL subchart for a full list of possible values
postgresql: {}
# https://github.com/bitnami/charts/tree/main/bitnami/postgresql/#parameters
postgresql:
enabled: true
global:
postgresql:
auth:
username: vikunja
database: vikunja
password: vikunja
# ┬─┐┬─┐┬─┐o┐─┐
# │┬┘├─ │ ││└─┐
# ┘└┘┴─┘┘─┘┘──┘
redisEnabled: false
# Please refer to Redis subchart for a full list of possible values
redis: {}
# https://github.com/bitnami/charts/tree/main/bitnami/redis/#parameters
redis:
enabled: false
architecture: standalone
auth:
enabled: false
# ┬─┐┬─┐┐ ┬
# │┬┘│─┤│││
# ┘└┘┘ ┘└┴┘
typesense:
enabled: true
env:
TYPESENSE_DATA_DIR: /data
TYPESENSE_API_KEY: typesense
persistence:
data:
# Enabling typesense persistence is recommended to avoid slow reindexing
enabled: true
accessMode: ReadWriteOnce
size: 1Gi
# storageClass: storage-class
# You can create custom resources from the plaintext definition
raw: []
image:
repository: docker.io/typesense/typesense
tag: 0.25.1
pullPolicy: IfNotPresent