diff --git a/matrix-synapse/.helmignore b/matrix-synapse/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/matrix-synapse/.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/ diff --git a/matrix-synapse/Chart.yaml b/matrix-synapse/Chart.yaml new file mode 100644 index 0000000..6d1ba4a --- /dev/null +++ b/matrix-synapse/Chart.yaml @@ -0,0 +1,8 @@ +apiVersion: v2 +name: matrix-synapse +description: A Helm chart to deploy a Matrix Synapse server on Kubernetes +type: application +version: 0.1.0+upv1.149.1 +appVersion: "v1.149.1" +maintainers: + - name: jklein \ No newline at end of file diff --git a/matrix-synapse/templates/matrix-synapse.ingress.yaml b/matrix-synapse/templates/matrix-synapse.ingress.yaml new file mode 100644 index 0000000..320c78d --- /dev/null +++ b/matrix-synapse/templates/matrix-synapse.ingress.yaml @@ -0,0 +1,23 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }}-ingress + annotations: + cert-manager.io/cluster-issuer: {{ required "A Cluster-Issuer must be provided" .Values.ingress.clusterIssuer }} +spec: + ingressClassName: nginx + rules: + - host: {{ required "A Domain/Host must be provided" .Values.ingress.domain }} + http: + paths: + - backend: + service: + name: {{ .Release.Name }}-{{ .Chart.Name }}-service + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - {{ required "A Domain/Host must be provided" .Values.ingress.domain }} + secretName: tls-{{ .Release.Name }}-{{ .Chart.Name }}-ingress diff --git a/matrix-synapse/templates/matrix-synapse.pvc.yaml b/matrix-synapse/templates/matrix-synapse.pvc.yaml new file mode 100644 index 0000000..aff10b8 --- /dev/null +++ b/matrix-synapse/templates/matrix-synapse.pvc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }}-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.storage.amount }} + storageClassName: {{ .Values.storage.storageClass }} diff --git a/matrix-synapse/templates/matrix-synapse.service.yaml b/matrix-synapse/templates/matrix-synapse.service.yaml new file mode 100644 index 0000000..5dabd92 --- /dev/null +++ b/matrix-synapse/templates/matrix-synapse.service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: "{{ .Release.Name }}-{{ .Chart.Name }}-service" + labels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" +spec: + type: NodePort + ports: + - name: http + port: 80 + protocol: TCP + targetPort: http + selector: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" \ No newline at end of file diff --git a/matrix-synapse/templates/matrix-synapse.sfs.yaml b/matrix-synapse/templates/matrix-synapse.sfs.yaml new file mode 100644 index 0000000..05ce5f0 --- /dev/null +++ b/matrix-synapse/templates/matrix-synapse.sfs.yaml @@ -0,0 +1,44 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: "{{ .Release.Name }}-{{ .Chart.Name }}-sfs" +spec: + selector: + matchLabels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + serviceName: "{{ .Release.Name }}-{{ .Chart.Name }}-service" + replicas: 1 + template: + metadata: + labels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + spec: + automountServiceAccountToken: false + containers: + - name: "{{ .Release.Name }}-{{ .Chart.Name }}-container" + image: "matrixdotorg/synapse:{{ .Chart.AppVersion }}" + env: + - name: SYNAPSE_SERVER_NAME + value: "{{ required "You must provide a Server-Name" .Values.matrix.serverName }}" + - name: SYNAPSE_REPORT_STATS + value: "no" + - name: UID + value: "1000" + - name: GID + value: "1000" + - name: TZ + value: "{{ .Values.matrix.timezone }}" + ports: + - name: http + containerPort: 8008 + protocol: TCP + # TODO: Add liveness and readiness probes + # TODO: Add resource requests and limits + volumeMounts: + - name: matrix-synapse-volume + mountPath: /data + subPath: matrix-synapse-data/ + volumes: + - name: matrix-synapse-volume + persistentVolumeClaim: + claimName: {{ .Release.Name }}-{{ .Chart.Name }}-pvc diff --git a/matrix-synapse/values.yaml b/matrix-synapse/values.yaml new file mode 100644 index 0000000..0210717 --- /dev/null +++ b/matrix-synapse/values.yaml @@ -0,0 +1,11 @@ +matrix: + serverName: null + timezone: UTC + +storage: + amount: 10Gi + storageClass: longhorn-encrypted + +ingress: + domain: null + clusterIssuer: null \ No newline at end of file