From d025b860dda90f5983c8dd89cac36f5594bd6e47 Mon Sep 17 00:00:00 2001 From: titver968 Date: Mon, 29 Dec 2025 12:35:32 +0100 Subject: [PATCH] mantisbt restored --- mantisbt/index.yaml | 19 +++ mantisbt/mantisbt/Chart.yaml | 12 ++ mantisbt/mantisbt/charts/mariadb-19.1.2.tgz | Bin 0 -> 52497 bytes mantisbt/mantisbt/templates/_helpers.tpl | 117 +++++++++++++ mantisbt/mantisbt/templates/deployment.yaml | 158 ++++++++++++++++++ mantisbt/mantisbt/templates/hpa.yaml | 18 ++ mantisbt/mantisbt/templates/ingress.yaml | 47 ++++++ mantisbt/mantisbt/templates/pvc.yaml | 57 +++++++ mantisbt/mantisbt/templates/secret.yaml | 17 ++ mantisbt/mantisbt/templates/service.yaml | 25 +++ .../mantisbt/templates/serviceaccount.yaml | 13 ++ mantisbt/mantisbt/values.yaml | 114 +++++++++++++ 12 files changed, 597 insertions(+) create mode 100644 mantisbt/index.yaml create mode 100644 mantisbt/mantisbt/Chart.yaml create mode 100644 mantisbt/mantisbt/charts/mariadb-19.1.2.tgz create mode 100644 mantisbt/mantisbt/templates/_helpers.tpl create mode 100644 mantisbt/mantisbt/templates/deployment.yaml create mode 100644 mantisbt/mantisbt/templates/hpa.yaml create mode 100644 mantisbt/mantisbt/templates/ingress.yaml create mode 100644 mantisbt/mantisbt/templates/pvc.yaml create mode 100644 mantisbt/mantisbt/templates/secret.yaml create mode 100644 mantisbt/mantisbt/templates/service.yaml create mode 100644 mantisbt/mantisbt/templates/serviceaccount.yaml create mode 100644 mantisbt/mantisbt/values.yaml diff --git a/mantisbt/index.yaml b/mantisbt/index.yaml new file mode 100644 index 0000000..960f63a --- /dev/null +++ b/mantisbt/index.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +entries: + mantisbt: + - apiVersion: v2 + appVersion: 2.27.0 + created: "2025-12-19T08:44:25.766178+01:00" + dependencies: + - condition: mariadb.enabled + name: mariadb + repository: https://charts.bitnami.com/bitnami + version: 19.*.* + description: MantisBT Bug Tracker - A Helm chart for Kubernetes + digest: 120476f60a1fb4d84ce06e50e4c57f75722e9fca06ac83fb353724ae0bb0b915 + name: mantisbt + type: application + urls: + - https://gitea.innovation-hub-niedersachsen.de/innohub/charts/raw/main/mantisbt/mantisbt-0.4.3.tgz + version: 0.4.3 +generated: "2025-12-19T08:44:25.763065+01:00" diff --git a/mantisbt/mantisbt/Chart.yaml b/mantisbt/mantisbt/Chart.yaml new file mode 100644 index 0000000..a983980 --- /dev/null +++ b/mantisbt/mantisbt/Chart.yaml @@ -0,0 +1,12 @@ +apiVersion: v2 +name: mantisbt +description: MantisBT Bug Tracker - A Helm chart for Kubernetes +type: application +version: "0.4.3" +appVersion: "2.27.0" + +dependencies: + - name: mariadb + version: "19.*.*" + repository: "https://charts.bitnami.com/bitnami" + condition: mariadb.enabled diff --git a/mantisbt/mantisbt/charts/mariadb-19.1.2.tgz b/mantisbt/mantisbt/charts/mariadb-19.1.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6fa352afa03a8fb2b615979c1fe5e1ac57ef936d GIT binary patch literal 52497 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 D>CxhS literal 0 HcmV?d00001 diff --git a/mantisbt/mantisbt/templates/_helpers.tpl b/mantisbt/mantisbt/templates/_helpers.tpl new file mode 100644 index 0000000..defe835 --- /dev/null +++ b/mantisbt/mantisbt/templates/_helpers.tpl @@ -0,0 +1,117 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "mantisbt.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 "mantisbt.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 "mantisbt.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "mantisbt.labels" -}} +helm.sh/chart: {{ include "mantisbt.chart" . }} +{{ include "mantisbt.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "mantisbt.selectorLabels" -}} +app.kubernetes.io/name: {{ include "mantisbt.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "mantisbt.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "mantisbt.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + +{{/* +Create a default fully qualified database name. +*/}} +{{- define "mantisbt.databaseHost" -}} +{{- if .Values.mariadb.enabled }} +{{- printf "%s-mariadb" (include "mantisbt.fullname" .) }} +{{- else }} +{{- .Values.externalDatabase.host }} +{{- end }} +{{- end }} + +{{/* +Get database port +*/}} +{{- define "mantisbt.databasePort" -}} +{{- if .Values.mariadb.enabled }} +{{- printf "3306" }} +{{- else }} +{{- .Values.externalDatabase.port | default "3306" }} +{{- end }} +{{- end }} + +{{/* +Get database name +*/}} +{{- define "mantisbt.databaseName" -}} +{{- if .Values.mariadb.enabled }} +{{- .Values.mariadb.auth.database }} +{{- else }} +{{- .Values.externalDatabase.database }} +{{- end }} +{{- end }} + +{{/* +Get database user +*/}} +{{- define "mantisbt.databaseUser" -}} +{{- if .Values.mariadb.enabled }} +{{- .Values.mariadb.auth.username }} +{{- else }} +{{- .Values.externalDatabase.username }} +{{- end }} +{{- end }} + +{{/* +Get database password +*/}} +{{- define "mantisbt.databasePassword" -}} +{{- if .Values.mariadb.enabled }} +{{- .Values.mariadb.auth.password }} +{{- else }} +{{- .Values.externalDatabase.password }} +{{- end }} +{{- end }} diff --git a/mantisbt/mantisbt/templates/deployment.yaml b/mantisbt/mantisbt/templates/deployment.yaml new file mode 100644 index 0000000..01ed0ef --- /dev/null +++ b/mantisbt/mantisbt/templates/deployment.yaml @@ -0,0 +1,158 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "mantisbt.fullname" . }} + labels: + app: {{ template "mantisbt.name" . }} + chart: {{ template "mantisbt.chart" . }} + component: mantisbt + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- if .Values.deploymentLabels }} + {{- toYaml .Values.deploymentLabels | nindent 4 }} + {{- end }} +spec: + strategy: + {{ toYaml .Values.updateStrategy | nindent 4 }} + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app: {{ template "mantisbt.name" . }} + component: mantisbt + release: {{ .Release.Name }} + template: + metadata: + annotations: + checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} + labels: + app: {{ template "mantisbt.name" . }} + component: mantisbt + release: {{ .Release.Name }} + {{- if .Values.podLabels }} + {{- toYaml .Values.podLabels | nindent 8 }} + {{- end }} + spec: + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + serviceAccountName: {{ template "mantisbt.serviceAccountName" . }} + initContainers: + - name: wait-for-db + image: busybox:1.36 + command: + - sh + - -c + - | + echo "Waiting for database at {{ include "mantisbt.databaseHost" . }}:{{ include "mantisbt.databasePort" . }}..." + until nc -z {{ include "mantisbt.databaseHost" . }} {{ include "mantisbt.databasePort" . }}; do + echo "Database not ready, waiting..." + sleep 3 + done + echo "Database is ready!" + sleep 5 + - name: fix-permissions + image: busybox:1.36 + command: + - sh + - -c + - | + echo "Fixing permissions on config and uploads directories..." + # www-data has UID 33 in Debian-based images + chown -R 33:33 /var/www/html/config + chown -R 33:33 /var/www/html/uploads + chmod -R 755 /var/www/html/config + chmod -R 755 /var/www/html/uploads + echo "Permissions fixed:" + ls -la /var/www/html/config + ls -la /var/www/html/uploads + volumeMounts: + - name: config + mountPath: /var/www/html/config + {{- if .Values.persistence.enabled }} + - name: uploads + mountPath: /var/www/html/uploads + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + terminationMessagePolicy: FallbackToLogsOnError + ports: + - name: http + containerPort: 80 + env: + # xlrl/mantisbt uses MANTIS_TIMEZONE and MANTIS_ENABLE_ADMIN + - name: MANTIS_TIMEZONE + value: {{ .Values.mantisbt.timezone | default "Europe/Berlin" | quote }} + - name: MANTIS_ENABLE_ADMIN + value: {{ .Values.mantisbt.enableAdmin | default "1" | quote }} + # Master salt from secret - keeps crypto keys stable across deployments + - name: MASTER_SALT + valueFrom: + secretKeyRef: + name: {{ template "mantisbt.fullname" . }}-secret + key: master-salt + {{- range $key := .Values.env }} + {{- if .value }} + - name: {{ .name }} + value: {{ .value | quote }} + {{- end }} + {{- end }} + {{- range $key := .Values.secretEnv }} + - name: {{ .name }} + valueFrom: + secretKeyRef: + name: {{ template "mantisbt.fullname" $ }}-secret + key: {{ .name }} + {{- end }} + envFrom: + {{- with .Values.extraEnvFrom }} + {{- tpl . $ | nindent 10 }} + {{- end }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + resources: +{{ toYaml .Values.resources | indent 12 }} + volumeMounts: + # xlrl/mantisbt expects config as a volume mount - will be created on first run + - name: config + mountPath: /var/www/html/config + {{- if .Values.persistence.enabled }} + - name: uploads + mountPath: /var/www/html/uploads + {{- end }} + livenessProbe: + tcpSocket: + port: http + initialDelaySeconds: 180 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + readinessProbe: + tcpSocket: + port: http + initialDelaySeconds: 60 + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 10 + {{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} +{{- if .Values.affinity }} + affinity: +{{ toYaml .Values.affinity | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + volumes: + # Persistent config volume - xlrl expects this to be writable + - name: config + persistentVolumeClaim: + claimName: {{ template "mantisbt.fullname" . }}-config + {{- if .Values.persistence.enabled }} + - name: uploads + persistentVolumeClaim: + claimName: {{ template "mantisbt.fullname" . }}-uploads + {{- end }} diff --git a/mantisbt/mantisbt/templates/hpa.yaml b/mantisbt/mantisbt/templates/hpa.yaml new file mode 100644 index 0000000..5a366ee --- /dev/null +++ b/mantisbt/mantisbt/templates/hpa.yaml @@ -0,0 +1,18 @@ +{{- if .Values.autoscaling.enabled -}} +apiVersion: autoscaling/v1 +kind: HorizontalPodAutoscaler +metadata: + name: {{ template "mantisbt.fullname" . }} + labels: + app: {{ template "mantisbt.name" . }} + chart: {{ template "mantisbt.chart" . }} + component: mantisbt + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ template "mantisbt.fullname" . }} +{{ toYaml .Values.autoscaling.config | indent 2 }} +{{- end -}} diff --git a/mantisbt/mantisbt/templates/ingress.yaml b/mantisbt/mantisbt/templates/ingress.yaml new file mode 100644 index 0000000..1156fde --- /dev/null +++ b/mantisbt/mantisbt/templates/ingress.yaml @@ -0,0 +1,47 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "mantisbt.fullname" . -}} +{{- $servicePort := .Values.service.port -}} +{{- $ingressPath := .Values.ingress.path -}} +{{- $ingressPathType := .Values.ingress.pathtype -}} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + app: {{ template "mantisbt.name" . }} + chart: {{ template "mantisbt.chart" . }} + component: mantisbt + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +{{- with .Values.ingress.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +spec: + {{- if .Values.ingress.className }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ . }} + http: + paths: + - path: {{ $ingressPath }} + pathType: {{ $ingressPathType }} + backend: + service: + name: {{ $fullName }} + port: + number: {{ $servicePort }} + {{- end }} +{{- end }} diff --git a/mantisbt/mantisbt/templates/pvc.yaml b/mantisbt/mantisbt/templates/pvc.yaml new file mode 100644 index 0000000..b7c2425 --- /dev/null +++ b/mantisbt/mantisbt/templates/pvc.yaml @@ -0,0 +1,57 @@ +{{- if .Values.persistence.enabled -}} +# Config PVC - xlrl/mantisbt needs writable config directory +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ template "mantisbt.fullname" . }}-config + labels: + app: {{ template "mantisbt.name" . }} + chart: {{ template "mantisbt.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- with .Values.persistence.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + accessModes: + - {{ .Values.persistence.accessMode | quote }} + {{- if .Values.persistence.storageClass }} + {{- if (eq "-" .Values.persistence.storageClass) }} + storageClassName: "" + {{- else }} + storageClassName: {{ .Values.persistence.storageClass | quote }} + {{- end }} + {{- end }} + resources: + requests: + storage: "100Mi" +--- +# Uploads PVC +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ template "mantisbt.fullname" . }}-uploads + labels: + app: {{ template "mantisbt.name" . }} + chart: {{ template "mantisbt.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- with .Values.persistence.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + accessModes: + - {{ .Values.persistence.accessMode | quote }} + {{- if .Values.persistence.storageClass }} + {{- if (eq "-" .Values.persistence.storageClass) }} + storageClassName: "" + {{- else }} + storageClassName: {{ .Values.persistence.storageClass | quote }} + {{- end }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} +{{- end -}} diff --git a/mantisbt/mantisbt/templates/secret.yaml b/mantisbt/mantisbt/templates/secret.yaml new file mode 100644 index 0000000..97b0d6e --- /dev/null +++ b/mantisbt/mantisbt/templates/secret.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "mantisbt.fullname" . }}-secret + labels: + app: {{ template "mantisbt.name" . }} + chart: {{ template "mantisbt.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +type: Opaque +stringData: + database-password: {{ include "mantisbt.databasePassword" . | quote }} + # Master salt - use provided value or generate random one + master-salt: {{ .Values.mantisbt.masterSalt | default (randAlphaNum 64 | b64enc) | quote }} + {{- range .Values.secretEnv }} + {{ .name }}: {{ .value | quote }} + {{- end }} diff --git a/mantisbt/mantisbt/templates/service.yaml b/mantisbt/mantisbt/templates/service.yaml new file mode 100644 index 0000000..c0b1519 --- /dev/null +++ b/mantisbt/mantisbt/templates/service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + {{- if .Values.service.annotations }} + annotations: +{{ toYaml .Values.service.annotations | indent 4 }} + {{- end }} + name: {{ template "mantisbt.fullname" . }} + labels: + app: {{ template "mantisbt.name" . }} + chart: {{ template "mantisbt.chart" . }} + component: mantisbt + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.port }} + targetPort: 80 + protocol: TCP + name: http + selector: + app: {{ template "mantisbt.name" . }} + component: mantisbt + release: {{ .Release.Name }} diff --git a/mantisbt/mantisbt/templates/serviceaccount.yaml b/mantisbt/mantisbt/templates/serviceaccount.yaml new file mode 100644 index 0000000..1a3f664 --- /dev/null +++ b/mantisbt/mantisbt/templates/serviceaccount.yaml @@ -0,0 +1,13 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "mantisbt.serviceAccountName" . }} + labels: + {{- include "mantisbt.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +automountServiceAccountToken: {{ .Values.serviceAccount.automount }} +{{- end }} diff --git a/mantisbt/mantisbt/values.yaml b/mantisbt/mantisbt/values.yaml new file mode 100644 index 0000000..426d616 --- /dev/null +++ b/mantisbt/mantisbt/values.yaml @@ -0,0 +1,114 @@ +platform: kubernetes + +serviceAccount: + create: true + name: "" + annotations: {} + automount: false + +image: + # xlrl/mantisbt - well maintained, PHP 8.3, good documentation + repository: xlrl/mantisbt + tag: "latest" + pullPolicy: IfNotPresent + +replicaCount: 1 + +service: + type: ClusterIP + port: 80 + annotations: {} + +ingress: + enabled: false + className: traefik + annotations: {} + path: / + pathtype: Prefix + hosts: + - mantisbt.local + tls: [] + +resources: + requests: + memory: 128Mi + cpu: 100m + limits: + memory: 512Mi + cpu: 500m + +nodeSelector: {} +tolerations: [] +affinity: {} + +autoscaling: + enabled: false + config: + minReplicas: 1 + maxReplicas: 5 + targetCPUUtilizationPercentage: 80 + +deploymentLabels: {} +podLabels: {} + +persistence: + enabled: true + accessMode: ReadWriteOnce + size: 5Gi + storageClass: "" + annotations: {} + +updateStrategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 1 + maxSurge: 1 + +podSecurityContext: {} +securityContext: {} + +# MantisBT specific configuration +mantisbt: + # Enable admin folder for installation (set to "0" after install!) + enableAdmin: "1" + + # Timezone (xlrl uses MANTIS_TIMEZONE) + timezone: "Europe/Berlin" + + # Master Salt for crypto - IMPORTANT: Set this to keep it stable across deployments! + # If not set, a random one will be generated (but changes on each deploy) + # Generate with: openssl rand -base64 32 + masterSalt: "" + +# Environment variables +env: [] + +secretEnv: [] + +extraEnvFrom: [] + +extraDeploy: [] + +# MariaDB subchart configuration +mariadb: + enabled: true + auth: + database: mantisbt + username: mantisbt + password: "mantisbt123" + rootPassword: "rootpassword123" + primary: + persistence: + enabled: true + size: 8Gi + storageClass: "" + +# External database (if mariadb.enabled=false) +externalDatabase: + host: "" + port: 3306 + database: mantisbt + username: mantisbt + password: "" + existingSecret: "" + existingSecretPasswordKey: ""