From 3aedeb1ad16e3a709ccbdfdd52e58afc46afcd70 Mon Sep 17 00:00:00 2001 From: jklein Date: Thu, 19 Mar 2026 13:39:11 +0100 Subject: [PATCH] feat(outline): added initial chart --- outline/.helmignore | 23 ++++++ outline/Chart.yaml | 11 +++ outline/templates/outline-db.secret.yaml | 6 ++ outline/templates/outline-redis.secret.yaml | 6 ++ outline/templates/outline.pvc.yaml | 13 ++++ outline/templates/outline.secret.yaml | 6 ++ outline/templates/outline.sfs.yaml | 80 ++++++++++++++++++++ outline/values.yaml | 22 ++++++ template-chart/templates/xxx.deployment.yaml | 1 + 9 files changed, 168 insertions(+) create mode 100644 outline/.helmignore create mode 100644 outline/Chart.yaml create mode 100644 outline/templates/outline-db.secret.yaml create mode 100644 outline/templates/outline-redis.secret.yaml create mode 100644 outline/templates/outline.pvc.yaml create mode 100644 outline/templates/outline.secret.yaml create mode 100644 outline/templates/outline.sfs.yaml create mode 100644 outline/values.yaml diff --git a/outline/.helmignore b/outline/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/outline/.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/outline/Chart.yaml b/outline/Chart.yaml new file mode 100644 index 0000000..a48f96d --- /dev/null +++ b/outline/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v2 +name: Outline +description: A Helm chart to deploy Outline on Kubernetes + +type: application + +version: 1.0.0+upv1.6.1 +appVersion: "v1.6.1" + +maintainers: + - name: jklein \ No newline at end of file diff --git a/outline/templates/outline-db.secret.yaml b/outline/templates/outline-db.secret.yaml new file mode 100644 index 0000000..c2129dd --- /dev/null +++ b/outline/templates/outline-db.secret.yaml @@ -0,0 +1,6 @@ +apiVersion: onepassword.com/v1 +kind: OnePasswordItem +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }}-db-secret +spec: + itemPath: {{ required "A Secret-Reference for the config must be provided" .Values.secrets.dbSecretRef }} diff --git a/outline/templates/outline-redis.secret.yaml b/outline/templates/outline-redis.secret.yaml new file mode 100644 index 0000000..aa5b5a6 --- /dev/null +++ b/outline/templates/outline-redis.secret.yaml @@ -0,0 +1,6 @@ +apiVersion: onepassword.com/v1 +kind: OnePasswordItem +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }}-redis-secret +spec: + itemPath: {{ required "A Secret-Reference for the config must be provided" .Values.secrets.redisSecretRef }} diff --git a/outline/templates/outline.pvc.yaml b/outline/templates/outline.pvc.yaml new file mode 100644 index 0000000..a7b916e --- /dev/null +++ b/outline/templates/outline.pvc.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }}-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.outline.storage.size }} + {{- if .Values.outline.storage.storageClass }} + storageClassName: {{ .Values.outline.storage.storageClass }} + {{- end }} \ No newline at end of file diff --git a/outline/templates/outline.secret.yaml b/outline/templates/outline.secret.yaml new file mode 100644 index 0000000..9b06bf9 --- /dev/null +++ b/outline/templates/outline.secret.yaml @@ -0,0 +1,6 @@ +apiVersion: onepassword.com/v1 +kind: OnePasswordItem +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }}-secret +spec: + itemPath: {{ required "A Secret-Reference for the config must be provided" .Values.secrets.configSecretRef }} diff --git a/outline/templates/outline.sfs.yaml b/outline/templates/outline.sfs.yaml new file mode 100644 index 0000000..d329281 --- /dev/null +++ b/outline/templates/outline.sfs.yaml @@ -0,0 +1,80 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }}-sfs + labels: + app: {{ .Release.Name }}-{{ .Chart.Name }}-sfs +spec: + serviceName: {{ .Release.Name }}-{{ .Chart.Name }}-service + replicas: 1 + selector: + matchLabels: + app: {{ .Release.Name }}-{{ .Chart.Name }}-sfs + template: + metadata: + name: {{ .Release.Name }}-{{ .Chart.Name }}-sfs + labels: + app: {{ .Release.Name }}-{{ .Chart.Name }}-sfs + spec: + automountServiceAccountToken: false + securityContext: + fsGroup: 1001 + fsGroupChangePolicy: Always + containers: + - name: {{ .Release.Name }}-{{ .Chart.Name }}-sfs + image: "outlinewiki/outline:{{ .Chart.AppVersion }}" + imagePullPolicy: IfNotPresent + env: + - name: PORT + value: "80" + - name: URL + value: "https://{{ .Values.ingress.domain }}" + - name: SECRET_KEY + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-{{ .Chart.Name }}-secret + key: outline-secret-key + - name: UTILS_SECRET + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-{{ .Chart.Name }}-secret + key: outline-utils-secret + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-{{ .Chart.Name }}-db-secret + key: connection-url + - name: PGSSLMODE + value: disable + - name: REDIS_URL + valueFrom: + secretKeyRef: + name: {{ .Release.Name }}-{{ .Chart.Name }}-redis-secret + key: connection-url + - name: FILE_STORAGE + value: "local" + - name: FILE_STORAGE_LOCAL_ROOT_DIR + value: "/outline-data/data" + ports: + - containerPort: 80 + protocol: TCP + name: http + # TODO: Add liveness and readiness probes + resources: + requests: + memory: "{{ .Values.outline.resources.requests.memory }}" + cpu: "{{ .Values.outline.resources.requests.cpu }}" + ephemeral-storage: "{{ .Values.outline.resources.requests.ephemeralStorage }}" + limits: + memory: "{{ .Values.outline.resources.limits.memory }}" + cpu: "{{ .Values.outline.resources.limits.cpu }}" + ephemeral-storage: "{{ .Values.outline.resources.limits.ephemeralStorage }}" + volumeMounts: + - mountPath: "/outline-data/data" + name: outline-data + subPath: data + restartPolicy: Always + volumes: + - name: outline-data + persistentVolumeClaim: + claimName: {{ .Release.Name }}-{{ .Chart.Name }}-pvc \ No newline at end of file diff --git a/outline/values.yaml b/outline/values.yaml new file mode 100644 index 0000000..b7d0b29 --- /dev/null +++ b/outline/values.yaml @@ -0,0 +1,22 @@ +secrets: + configSecretRef: null + redisSecretRef: null + dbSecretRef: null +outline: + storage: + size: 10Gi + storageClass: null + resources: + requests: + cpu: 0.1 + memory: 512Mi + ephemeralStorage: 10Mi + limits: + cpu: 1 + memory: 768Mi + ephemeralStorage: 100Mi + +ingress: + enabled: true + clusterIssuer: letsencrypt + domain: null \ No newline at end of file diff --git a/template-chart/templates/xxx.deployment.yaml b/template-chart/templates/xxx.deployment.yaml index a6c0724..ccb563d 100644 --- a/template-chart/templates/xxx.deployment.yaml +++ b/template-chart/templates/xxx.deployment.yaml @@ -24,6 +24,7 @@ spec: - containerPort: 80 protocol: TCP name: http + # TODO: Add liveness and readiness probes resources: requests: memory: "{{ .Values.xxx.resources.requests.memory }}"