Browse Source

Adiciona o chart Helm para Snappymail v0.2.0

master
Vitor Choi 3 weeks ago
parent
commit
c5064ab367
  1. 23
      charts/snappymail/v0.2.0/.helmignore
  2. 9
      charts/snappymail/v0.2.0/Chart.lock
  3. 18
      charts/snappymail/v0.2.0/Chart.yaml
  4. 75
      charts/snappymail/v0.2.0/README.md
  5. BIN
      charts/snappymail/v0.2.0/charts/mariadb-11.4.0.tgz
  6. BIN
      charts/snappymail/v0.2.0/charts/redis-17.3.11.tgz
  7. 22
      charts/snappymail/v0.2.0/templates/NOTES.txt
  8. 62
      charts/snappymail/v0.2.0/templates/_helpers.tpl
  9. 109
      charts/snappymail/v0.2.0/templates/deployment.yaml
  10. 28
      charts/snappymail/v0.2.0/templates/hpa.yaml
  11. 61
      charts/snappymail/v0.2.0/templates/ingress.yaml
  12. 19
      charts/snappymail/v0.2.0/templates/pvc.yaml
  13. 15
      charts/snappymail/v0.2.0/templates/service.yaml
  14. 106
      charts/snappymail/v0.2.0/values.yaml

23
charts/snappymail/v0.2.0/.helmignore

@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/

9
charts/snappymail/v0.2.0/Chart.lock

@ -0,0 +1,9 @@
dependencies:
- name: mariadb
repository: https://charts.bitnami.com/bitnami
version: 11.4.0
- name: redis
repository: https://charts.bitnami.com/bitnami
version: 17.3.11
digest: sha256:d0306b0972bff1be59a35b88d107c2ae12984ef2a8715ad8d561f0f40b23114c
generated: "2022-11-29T11:06:02.773563459-03:00"

18
charts/snappymail/v0.2.0/Chart.yaml

@ -0,0 +1,18 @@
apiVersion: v2
name: snappymail
description: Snappymail is a lightweight fork of Rainloop Webmail.
type: application
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.2.0
appVersion: "2.38.2"
dependencies:
- name: mariadb
version: 11.4.0
repository: https://charts.bitnami.com/bitnami
- name: redis
version: 17.3.11
repository: https://charts.bitnami.com/bitnami

75
charts/snappymail/v0.2.0/README.md

@ -0,0 +1,75 @@
# Snappy Mail Helm Chart
This Helm chart installs and manages the Snappy Mail application in Kubernetes.
## Prerequisites
- Kubernetes cluster
- Helm 3
## Configuration
The following table lists the configurable parameters for this chart and their default values.
| Parameter | Description | Default |
| --------------------------------- | ---------------------------------------- | ---------------------------- |
| replicaCount | Number of replicas to run | `1` |
| image.repository | Snappy Mail image repository | `porto.interlegis.leg.br/library/docker-snappymail-il` |
| image.pullPolicy | Snappy Mail image pull policy | `IfNotPresent` |
| image.tag | Snappy Mail image tag | `""` |
| imagePullSecrets | Image pull secrets for private repos | `[]` |
| nameOverride | Override the name of the chart | `""` |
| fullnameOverride | Override the full name of the chart | `""` |
| podAnnotations | Annotations to add to the pod | `{}` |
| podSecurityContext | Security context for the pod | `{}` |
| securityContext | Security context for the container | `{}` |
| service.type | Type of service | `ClusterIP` |
| service.port | Port for the service | `80` |
| snappymail.uploadMaxSize | Maximum size of uploaded files | `25M` |
| snappymail.memoryLimit | Memory limit for Snappy Mail | `128M` |
| snappymail.secureCookies | Option to turn on secure cookies | `true` |
| snappymail.logToStderr | Option to log to stderr | `true` |
| ingress.enabled | Option to enable ingress | `false` |
| ingress.className | The ingress class for the service | `""` |
| ingress.annotations | Annotations for the ingress | `{}` |
| ingress.hosts[0].host | Host for ingress | `chart-example.local` |
| ingress.hosts[0].paths[0].path | Path for ingress | `/` |
| ingress.hosts[0].paths[0].pathType | Path type for ingress | `ImplementationSpecific` |
| ingress.tls | TLS settings for ingress | `[]` |
| resources.limits.cpu | CPU limit for resources | `1500m` |
| resources.limits.memory | Memory limit for resources | `1500Mi` |
| resources.requests.cpu | CPU request for resources | `500m` |
| resources.requests.memory | Memory request for resources | `700Mi` |
| autoscaling.enabled | Option to enable horizontal pod autoscaler | `false` |
| autoscaling.minReplicas | Minimum number of replicas | `2` |
| autoscaling.maxReplicas | Maximum number of replicas | `10` |
| autoscaling.targetCPUUtilizationPercentage | Target CPU utilization percentage | `70` |
| nodeSelector | Node labels for pod assignment | `{}` |
| tolerations | Toleration labels for pod assignment | `[]` |
| persistence.accessMode | Access mode for storage | `ReadWriteMany` |
| persistence.size | Size of the storage | `8Gi` |
| persistence.storageClass | Storage class | `""` |
| mariadb.auth.rootPassword | Root password for MariaDB | `changeme` |
| mariadb.auth.database | Database for MariaDB | `snappymail` |
| mariadb.auth.username | Username for MariaDB | `snappymail` |
| mariadb.auth.password | Password for MariaDB | `changeme` |
| mariadb.architecture | MariaDB architecture | `standalone` |
| mariadb.primary.resources.limits.cpu | CPU limit for primary container | `1500m` |
| mariadb.primary.resources.limits.memory | Memory limit for primary container | `768Mi` |
| mariadb.primary.resources.requests.cpu | CPU request for primary container | `500m` |
| mariadb.primary.resources.requests.memory | Memory request for primary container | `256Mi` |
| redis.architecture | Redis architecture | `standalone` |
| redis.auth.enabled | Option to enable authentication for Redis | `false` |
| redis.master.persistence.enabled | Option to enable persistence for Redis | `true` |
| redis.master.persistence.size | Size of the storage for Redis | `8Gi` |
| redis.master.persistence.storageClass | Storage class for Redis | `""` |
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install` or provide a values.yaml file in the command like `-f values.yaml`.
## Uninstall
To uninstall the chart, run:
```
helm delete snappymail
```

BIN
charts/snappymail/v0.2.0/charts/mariadb-11.4.0.tgz

Binary file not shown.

BIN
charts/snappymail/v0.2.0/charts/redis-17.3.11.tgz

Binary file not shown.

22
charts/snappymail/v0.2.0/templates/NOTES.txt

@ -0,0 +1,22 @@
1. Get the application URL by running these commands:
{{- if .Values.ingress.enabled }}
{{- range $host := .Values.ingress.hosts }}
{{- range .paths }}
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
{{- end }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "snappymail.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
{{- else if contains "LoadBalancer" .Values.service.type }}
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "snappymail.fullname" . }}'
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "snappymail.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo http://$SERVICE_IP:{{ .Values.service.port }}
{{- else if contains "ClusterIP" .Values.service.type }}
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "snappymail.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
{{- end }}

62
charts/snappymail/v0.2.0/templates/_helpers.tpl

@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "snappymail.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 "snappymail.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 "snappymail.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "snappymail.labels" -}}
helm.sh/chart: {{ include "snappymail.chart" . }}
{{ include "snappymail.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "snappymail.selectorLabels" -}}
app.kubernetes.io/name: {{ include "snappymail.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Create the name of the service account to use
*/}}
{{- define "snappymail.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "snappymail.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}

109
charts/snappymail/v0.2.0/templates/deployment.yaml

@ -0,0 +1,109 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "snappymail.fullname" . }}
labels:
{{- include "snappymail.labels" . | nindent 4 }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
selector:
matchLabels:
{{- include "snappymail.selectorLabels" . | nindent 6 }}
strategy:
type: Recreate
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "snappymail.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
initContainers:
- name: fix-volume-permissions
image: alpine:latest
command: ["sh", "-c", "chown -R 82:82 /snappymail/data"]
securityContext:
runAsUser: 0 # Força a execução como root temporariamente
volumeMounts:
- name: snappymaildata
mountPath: /snappymail/data
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: UPLOAD_MAX_SIZE
value: {{ .Values.snappymail.uploadMaxSize | quote }}
- name: LOG_TO_STDERR
value: {{ .Values.snappymail.logToStderr | quote }}
- name: MEMORY_LIMIT
value: {{ .Values.snappymail.memoryLimit | quote }}
- name: SECURE_COOKIES
value: {{ .Values.snappymail.secureCookies | quote }}
volumeMounts:
- mountPath: /snappymail/data
name: snappymaildata
ports:
- name: http
containerPort: 8888
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 60
periodSeconds: 5
successThreshold: 1
failureThreshold: 3
timeoutSeconds: 2
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 60
periodSeconds: 5
successThreshold: 2
failureThreshold: 3
timeoutSeconds: 2
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- {{ include "snappymail.name" . }}
- key: app.kubernetes.io/instance
operator: In
values:
- {{ .Release.Name }}
topologyKey: "kubernetes.io/hostname"
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
volumes:
- name: snappymaildata
persistentVolumeClaim:
claimName: {{ include "snappymail.fullname" . }}-data

28
charts/snappymail/v0.2.0/templates/hpa.yaml

@ -0,0 +1,28 @@
{{- if .Values.autoscaling.enabled }}
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "snappymail.fullname" . }}
labels:
{{- include "snappymail.labels" . | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "snappymail.fullname" . }}
minReplicas: {{ .Values.autoscaling.minReplicas }}
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
metrics:
{{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
{{- end }}
{{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
{{- end }}
{{- end }}

61
charts/snappymail/v0.2.0/templates/ingress.yaml

@ -0,0 +1,61 @@
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "snappymail.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
{{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
{{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
{{- end }}
{{- end }}
{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1beta1
{{- else -}}
apiVersion: extensions/v1beta1
{{- end }}
kind: Ingress
metadata:
name: {{ $fullName }}
labels:
{{- include "snappymail.labels" . | nindent 4 }}
{{- with .Values.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
ingressClassName: {{ .Values.ingress.className }}
{{- end }}
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
{{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
pathType: {{ .pathType }}
{{- end }}
backend:
{{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
service:
name: {{ $fullName }}
port:
number: {{ $svcPort }}
{{- else }}
serviceName: {{ $fullName }}
servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

19
charts/snappymail/v0.2.0/templates/pvc.yaml

@ -0,0 +1,19 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ include "snappymail.fullname" . }}-data
labels:
{{- include "snappymail.labels" . | nindent 4 }}
spec:
accessModes:
- {{ .Values.persistence.accessMode }}
resources:
requests:
storage: {{ .Values.persistence.size }}
{{- if .Values.persistence.storageClass }}
{{- if (eq "-" .Values.persistence.storageClass) }}
storageClassName: ""
{{- else }}
storageClassName: "{{ .Values.persistence.storageClass }}"
{{- end }}
{{- end }}

15
charts/snappymail/v0.2.0/templates/service.yaml

@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "snappymail.fullname" . }}
labels:
{{- include "snappymail.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "snappymail.selectorLabels" . | nindent 4 }}

106
charts/snappymail/v0.2.0/values.yaml

@ -0,0 +1,106 @@
# Default values for snappymail.
replicaCount: 1
image:
repository: porto.interlegis.leg.br/library/docker-snappymail-il
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: ""
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
podAnnotations: {}
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000
service:
type: ClusterIP
port: 80
snappymail:
uploadMaxSize: 25M
memoryLimit: 128M
secureCookies: true
logToStderr: true
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:
limits:
cpu: 1500m
memory: 1500Mi
requests:
cpu: 500m
memory: 700Mi
autoscaling:
enabled: false
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 70
# targetMemoryUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
persistence:
accessMode: ReadWriteMany
size: 8Gi
storageClass: ""
# MariaDB configuration for storing contact information
mariadb:
auth:
rootPassword: changeme
database: snappymail
username: snappymail
password: changeme
architecture: standalone
primary:
resources:
limits:
cpu: 1500m
memory: 768Mi
requests:
cpu: 500m
memory: 256Mi
# Redis configuration for caching
redis:
architecture: standalone
auth:
enabled: false
master:
persistence:
enabled: true
size: 8Gi
storageClass: ""
Loading…
Cancel
Save