diff --git a/nextcloud-onlyoffice/Chart.yaml b/nextcloud-onlyoffice/Chart.yaml index 983b4862a90af29a3d7fbdd7a7b30c67c39e7c3e..a2517259d5952b4f0dbeca88452b82e6514f58da 100644 --- a/nextcloud-onlyoffice/Chart.yaml +++ b/nextcloud-onlyoffice/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v1 description: | A helm chart for installing NextCloud and setting up ONLYOFFICE integration name: nextcloud-onlyoffice -version: 0.1.2 +version: 0.1.3 diff --git a/nextcloud-onlyoffice/templates/_nextcloud-specs.tpl b/nextcloud-onlyoffice/templates/_nextcloud-specs.tpl new file mode 100644 index 0000000000000000000000000000000000000000..f77fb433da6b582f045e0f9a17dbc8695abb138a --- /dev/null +++ b/nextcloud-onlyoffice/templates/_nextcloud-specs.tpl @@ -0,0 +1,89 @@ +{{/* Change the user and group to www-data as required by occ */}} +{{- define "nextcloud-onlyoffice.securityContext" }} +fsGroup: 33 +runAsUser: 33 +runAsGroup: 33 +{{- end}} +{{/* Add volume mounts that are also used by the nextcloud container */}} +{{/* and the configMap that contains job specific content */}} +{{- define "nextcloud-onlyoffice.volumeMounts" }} +- name: nextcloud-data + mountPath: /var/www/html/ + subPath: root +- name: nextcloud-data + mountPath: /var/www/html/data + subPath: data +- name: nextcloud-data + mountPath: /var/www/html/config + subPath: config +- name: nextcloud-data + mountPath: /var/www/html/custom_apps + subPath: custom_apps +- name: nextcloud-data + mountPath: /var/www/html/themes + subPath: themes +- name: onlyoffice-config + mountPath: /var/local +{{- end }} +{{/* Set environment variables that are needed for the nextcloud setup */}} +{{- define "nextcloud-onlyoffice.env" }} +{{- if .Values.nextcloud.internalDatabase.enabled }} +- name: SQLITE_DATABASE + value: {{ .Values.nextcloud.internalDatabase.name | quote }} +{{- else if .Values.nextcloud.mariadb.enabled }} +- name: MYSQL_HOST + value: {{ template "nextcloud.mariadb.fullname" . }} +- name: MYSQL_DATABASE + value: {{ .Values.nextcloud.mariadb.db.name | quote }} +- name: MYSQL_USER + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "db" }} + key: db-username +- name: MYSQL_PASSWORD + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "db" }} + key: db-password +{{- else }} +- name: MYSQL_HOST + value: {{ .Values.nextcloud.externalDatabase.host | quote }} +- name: MYSQL_DATABASE + value: {{ .Values.nextcloud.externalDatabase.database | quote }} +- name: MYSQL_USER + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "db" }} + key: db-username +- name: MYSQL_PASSWORD + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "db" }} + key: db-password +{{- end }} +- name: NEXTCLOUD_ADMIN_USER + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "nextcloud" }} + key: nextcloud-username +- name: NEXTCLOUD_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "nextcloud" }} + key: nextcloud-password +- name: NEXTCLOUD_TRUSTED_DOMAINS + value: {{ .Values.nextcloud.nextcloud.host }} +{{- end }} +{{/* Add volumes that correspond to the volume mounts used in this tpl */}} +{{- define "nextcloud-onlyoffice.volumes" }} +- name: nextcloud-data +{{- if .Values.nextcloud.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ if .Values.nextcloud.persistence.existingClaim }}{{ .Values.nextcloud.persistence.existingClaim }}{{- else }}{{ printf "%s-%s" .Release.Name "nextcloud-nextcloud" }}{{- end }} +{{- else }} + emptyDir: {} +{{- end }} +- name: onlyoffice-config + configMap: + name: {{ .Release.Name }}-onlyoffice-config +{{- end}} diff --git a/nextcloud-onlyoffice/templates/job-configure-nextcloud.yaml b/nextcloud-onlyoffice/templates/job-configure-nextcloud.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c8856f1a2a5adb23d347641b77ae08c267603522 --- /dev/null +++ b/nextcloud-onlyoffice/templates/job-configure-nextcloud.yaml @@ -0,0 +1,34 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: "{{ .Release.Name }}-configure-nextcloud" + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{ .Release.Name | quote }} + helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "1" + "helm.sh/hook-delete-policy": hook-succeeded +spec: + template: + metadata: + name: "{{.Release.Name}}-configure-nextcloud" + labels: + app.kubernetes.io/managed-by: {{ .Release.Service | quote }} + app.kubernetes.io/instance: {{.Release.Name | quote }} + helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + spec: + restartPolicy: Never + securityContext: {{- include "nextcloud-onlyoffice.securityContext" . | indent 8 }} + containers: + - name: {{ .Release.Name }}-configure-nextcloud-job + image: {{ .Values.nextcloud.image.repository }}:{{ .Values.nextcloud.image.tag }} + command: + - "/usr/local/bin/php" + - "/var/www/html/occ" + - "config:import" + - "/var/local/config.json" + volumeMounts: {{- include "nextcloud-onlyoffice.volumeMounts" . | indent 8 }} + env: {{- include "nextcloud-onlyoffice.env" . | indent 8 }} + volumes: {{- include "nextcloud-onlyoffice.volumes" . | indent 6 }} diff --git a/nextcloud-onlyoffice/templates/job-register-onlyoffice.yaml b/nextcloud-onlyoffice/templates/job-register-onlyoffice.yaml index ce0372503a62e61639df807fbb35c9140655a4dc..0f51b16a4b340cef647a2c1ece8aae0e5d2dcd44 100644 --- a/nextcloud-onlyoffice/templates/job-register-onlyoffice.yaml +++ b/nextcloud-onlyoffice/templates/job-register-onlyoffice.yaml @@ -22,91 +22,13 @@ spec: helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" spec: restartPolicy: Never - securityContext: - fsGroup: 33 - runAsUser: 33 - runAsGroup: 33 + securityContext: {{- include "nextcloud-onlyoffice.securityContext" . | indent 8 }} containers: - name: {{ .Release.Name }}-register-onlyoffice-job image: {{ .Values.nextcloud.image.repository }}:{{ .Values.nextcloud.image.tag }} command: - "/bin/bash" - "/var/local/onlyoffice-setup.sh" - volumeMounts: - - name: nextcloud-data - mountPath: /var/www/html/ - subPath: root - - name: nextcloud-data - mountPath: /var/www/html/data - subPath: data - - name: nextcloud-data - mountPath: /var/www/html/config - subPath: config - - name: nextcloud-data - mountPath: /var/www/html/custom_apps - subPath: custom_apps - - name: nextcloud-data - mountPath: /var/www/html/themes - subPath: themes - - name: onlyoffice-config - mountPath: /var/local - env: - {{- if .Values.nextcloud.internalDatabase.enabled }} - - name: SQLITE_DATABASE - value: {{ .Values.nextcloud.internalDatabase.name | quote }} - {{- else if .Values.nextcloud.mariadb.enabled }} - - name: MYSQL_HOST - value: {{ template "nextcloud.mariadb.fullname" . }} - - name: MYSQL_DATABASE - value: {{ .Values.nextcloud.mariadb.db.name | quote }} - - name: MYSQL_USER - valueFrom: - secretKeyRef: - name: {{ printf "%s-%s" .Release.Name "db" }} - key: db-username - - name: MYSQL_PASSWORD - valueFrom: - secretKeyRef: - name: {{ printf "%s-%s" .Release.Name "db" }} - key: db-password - {{- else }} - - name: MYSQL_HOST - value: {{ .Values.nextcloud.externalDatabase.host | quote }} - - name: MYSQL_DATABASE - value: {{ .Values.nextcloud.externalDatabase.database | quote }} - - name: MYSQL_USER - valueFrom: - secretKeyRef: - name: {{ printf "%s-%s" .Release.Name "db" }} - key: db-username - - name: MYSQL_PASSWORD - valueFrom: - secretKeyRef: - name: {{ printf "%s-%s" .Release.Name "db" }} - key: db-password - {{- end }} - - name: NEXTCLOUD_ADMIN_USER - valueFrom: - secretKeyRef: - name: {{ printf "%s-%s" .Release.Name "nextcloud" }} - key: nextcloud-username - - name: NEXTCLOUD_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - name: {{ printf "%s-%s" .Release.Name "nextcloud" }} - key: nextcloud-password - - name: NEXTCLOUD_TRUSTED_DOMAINS - value: {{ .Values.nextcloud.nextcloud.host }} - volumes: - - name: nextcloud-data - {{- if .Values.nextcloud.persistence.enabled }} - persistentVolumeClaim: - claimName: {{ if .Values.nextcloud.persistence.existingClaim }}{{ .Values.nextcloud.persistence.existingClaim }}{{- else }}{{ printf "%s-%s" .Release.Name "nextcloud-nextcloud" }}{{- end }} - {{- else }} - emptyDir: {} - {{- end }} - - name: onlyoffice-config - configMap: - name: {{ .Release.Name }}-onlyoffice-config - - + volumeMounts: {{- include "nextcloud-onlyoffice.volumeMounts" . | indent 8 }} + env: {{- include "nextcloud-onlyoffice.env" . | indent 8 }} + volumes: {{- include "nextcloud-onlyoffice.volumes" . | indent 6 }} diff --git a/nextcloud-onlyoffice/templates/onlyoffice-config.yaml b/nextcloud-onlyoffice/templates/onlyoffice-config.yaml index 9440f9982a8a66d056791b014d9b59eeffcc4450..47fb696c890fc56235a4c4a79ecc3ead5da476cc 100644 --- a/nextcloud-onlyoffice/templates/onlyoffice-config.yaml +++ b/nextcloud-onlyoffice/templates/onlyoffice-config.yaml @@ -41,3 +41,25 @@ data: # Config settings from the configmap above php occ config:import /var/local/onlyoffice-config.json + # + # All values in config.json are applied by the nextcloud occ command + # config:import. + # system.trusted_proxies contains a list of proxies that are considered + # to be trusted. 10.43.0.0/16 contains all ip addresses that are + # assigned to kubernetes services which includes the ip address of + # the ingress service that functions as a proxy. + # apps.core.backgroundjobs_mode set to cron disables the unreliable ajax + # scheduling that is enabled by default. Ajax scheduling is not needed + # because cronjobs are regularly executed by a kubernetes resource. + # + config.json: | + { + "system":{ + "trusted_proxies": "10.43.0.0/16" + }, + "apps":{ + "core":{ + "backgroundjobs_mode": "cron" + } + } + }