diff --git a/deploy/docker/helm/src/main/chart/Chart.yaml b/deploy/docker/helm/src/main/chart/Chart.yaml new file mode 100644 index 0000000..88051fe --- /dev/null +++ b/deploy/docker/helm/src/main/chart/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v2 + +name: edu-sharing-services-connector +description: Helm chart for edu-sharing connector app +type: application +version: 0.1.0 +appVersion: 0.1.0 \ No newline at end of file diff --git a/deploy/docker/helm/src/main/chart/Readme.md b/deploy/docker/helm/src/main/chart/Readme.md new file mode 100644 index 0000000..2f4c3c0 --- /dev/null +++ b/deploy/docker/helm/src/main/chart/Readme.md @@ -0,0 +1,28 @@ +Usage: +Install via +```bash +helm upgrade --install connector . --set baseUrl=example.repo.org --set storageClassName=storage-class --set clusterIssuer=letsencrypt --set passwordDB=example +``` + +View logs of Container `edu-sharing-connector-0` and check for an output like + +``` +Connector is ready. Please register it at your repository (Admin Tools -> Remote-Systems) with the following url: +``` + +Go to the admin tools of your repository and register the app. + +In order to activate H5P as an editor, configure it in the repository. +Go to Admin Tools -> Global System Config -> Cluster-Override and add +``` +connectorList{ + connectors:[ + { + id:"H5P", icon:"edit", showNew: true, onlyDesktop: true, hasViewMode: false, + filetypes:[ + {mimetype: "application/zip",filetype: "h5p", ccressourcetype: "h5p", createable: true,editable: true} + ] + } + ] +} +``` \ No newline at end of file diff --git a/deploy/docker/helm/src/main/chart/templates/ingress.yml b/deploy/docker/helm/src/main/chart/templates/ingress.yml new file mode 100644 index 0000000..c40fab5 --- /dev/null +++ b/deploy/docker/helm/src/main/chart/templates/ingress.yml @@ -0,0 +1,23 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +annotations: +metadata: + name: edu-sharing-connector-ingress + annotations: + cert-manager.io/cluster-issuer: {{ .Values.clusterIssuer }} +spec: + tls: + - hosts: + - connector.services.{{ .Values.baseUrl }} + secretName: edu-sharing-connector-tls + rules: + - host: connector.services.{{ .Values.baseUrl }} + http: + paths: + - backend: + service: + name: edu-sharing-connector + port: + number: 80 + path: / + pathType: Prefix \ No newline at end of file diff --git a/deploy/docker/helm/src/main/chart/templates/persistentvolumeclaim.yml b/deploy/docker/helm/src/main/chart/templates/persistentvolumeclaim.yml new file mode 100644 index 0000000..37cc199 --- /dev/null +++ b/deploy/docker/helm/src/main/chart/templates/persistentvolumeclaim.yml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: edu-sharing-services-connector-data + annotations: + "helm.sh/resource-policy": keep +spec: + storageClassName: {{ .Values.storageClassName }} + accessModes: + - ReadWriteMany + resources: + requests: + storage: "30Gi" \ No newline at end of file diff --git a/deploy/docker/helm/src/main/chart/templates/service.yml b/deploy/docker/helm/src/main/chart/templates/service.yml new file mode 100644 index 0000000..9ef03b4 --- /dev/null +++ b/deploy/docker/helm/src/main/chart/templates/service.yml @@ -0,0 +1,25 @@ +kind: Service +apiVersion: v1 +metadata: + name: edu-sharing-connector +spec: + selector: + app: edu-sharing-connector + ports: + - port: 80 + name: http-api + targetPort: api + +--- + +kind: Service +apiVersion: v1 +metadata: + name: edu-sharing-connector-db +spec: + selector: + app: edu-sharing-connector-db + ports: + - port: 3306 + name: tcp-db + targetPort: db diff --git a/deploy/docker/helm/src/main/chart/templates/statefulset.yml b/deploy/docker/helm/src/main/chart/templates/statefulset.yml new file mode 100644 index 0000000..c3eaf49 --- /dev/null +++ b/deploy/docker/helm/src/main/chart/templates/statefulset.yml @@ -0,0 +1,126 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: edu-sharing-connector +spec: + selector: + matchLabels: + app: edu-sharing-connector + replicas: 1 + serviceName: edu-sharing-connector + template: + metadata: + labels: + app: edu-sharing-connector + spec: + containers: + - name: edu-sharing-connector + image: docker.edu-sharing.com/community/edu_sharing-community-services-edu-connector-service:{{ .Values.version }} + imagePullPolicy: Always + env: + - name: HOST_EXTERNAL + value: "connector.services.{{ .Values.baseUrl }}" + - name: PROT_EXTERNAL + value: "https" + - name: PORT_EXTERNAL + value: "443" + - name: DATABASE_HOST + value: edu-sharing-connector-db + - name: DATABASE_PORT + value: "3306" + - name: DATABASE_USER + value: "connector" + - name: DATABASE_NAME + value: "connector" + - name: DATABASE_PASSWORD + value: {{ required "A valid .Values.passwordDB is required!" .Values.passwordDB }} + - name: ONLYOFFICE_DOCUMENT_SERVER + value: {{ .Values.onlyofficeDocumentServer | default "" }} + livenessProbe: + httpGet: + path: /metadata + port: api + periodSeconds: 10 + timeoutSeconds: 10 + readinessProbe: + httpGet: + path: /metadata + port: api + failureThreshold: 3 + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 10 + resources: + limits: + cpu: "4000m" + memory: "4Gi" + requests: + cpu: "500m" + memory: "4Gi" + ports: + - containerPort: 80 + name: api + volumeMounts: + - name: data + mountPath: /var/data + volumes: + - name: data + persistentVolumeClaim: + claimName: edu-sharing-services-connector-data + +--- + +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: edu-sharing-connector-db +spec: + selector: + matchLabels: + app: edu-sharing-connector-db + replicas: 1 + serviceName: edu-sharing-connector-db + template: + metadata: + labels: + app: edu-sharing-connector-db + spec: + containers: + - name: edu-sharing-connector-db + image: mysql:8.0.31-debian + env: + - name: MYSQL_DATABASE + value: connector + - name: MYSQL_USER + value: connector + - name: MYSQL_ROOT_HOST + value: "%" + - name: MYSQL_PASSWORD + value: {{ .Values.passwordDB }} + - name: MYSQL_ROOT_PASSWORD + value: {{ .Values.passwordDB }} + resources: + limits: + cpu: "2000m" + memory: "2Gi" + requests: + cpu: "1000m" + memory: "2Gi" + volumeMounts: + - name: data + mountPath: /var/lib/mysql + ports: + - containerPort: 3306 + name: db + + volumeClaimTemplates: + - metadata: + name: data + spec: + storageClassName: {{ .Values.storageClassName }} + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "16Gi" diff --git a/deploy/docker/helm/src/main/chart/values.yaml b/deploy/docker/helm/src/main/chart/values.yaml new file mode 100644 index 0000000..05db910 --- /dev/null +++ b/deploy/docker/helm/src/main/chart/values.yaml @@ -0,0 +1,4 @@ +baseUrl: +storageClassName: +clusterIssuer: letsencrypt +version: maven-fixes-7.0-SNAPSHOT diff --git a/docker-compose.yml b/docker-compose.yml index 644ee43..2cca4ed 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,7 +23,7 @@ services: DATABASE_USER: connector DATABASE_PASSWORD: connector volumes: - - services-edu-connector-data:/var/www/html/data + - services-edu-connector-data:/var/data depends_on: - services-edu-connector-database networks: diff --git a/service/Dockerfile b/service/Dockerfile index dbf53e7..7b321ca 100755 --- a/service/Dockerfile +++ b/service/Dockerfile @@ -23,6 +23,7 @@ RUN set -eux \ && apt-get install -yqq wait-for-it libzip-dev curl xmlstarlet jq nano \ && a2enmod rewrite \ && ln -s $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini \ + && sed -i 's/max_execution_time = 30/max_execution_time = 120/g' $PHP_INI_DIR/php.ini \ && docker-php-ext-install pdo pdo_mysql zip \ && apt-get clean \ && rm -r /var/lib/apt/lists/*