diff --git a/dev/helm/.helmignore b/dev/helm/.helmignore
new file mode 100644
index 00000000..0e8a0eb3
--- /dev/null
+++ b/dev/helm/.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/dev/helm/Chart.lock b/dev/helm/Chart.lock
new file mode 100644
index 00000000..7289185d
--- /dev/null
+++ b/dev/helm/Chart.lock
@@ -0,0 +1,6 @@
+dependencies:
+- name: postgresql
+ repository: https://kubernetes-charts.storage.googleapis.com/
+ version: 6.5.0
+digest: sha256:e94b0117531082cb4efc287999abf5c5f7d58fecb8127251c20a7f0fc2ea65da
+generated: "2020-04-21T18:55:53.994556-07:00"
diff --git a/dev/helm/Chart.yaml b/dev/helm/Chart.yaml
index bee62aa6..d81bd456 100644
--- a/dev/helm/Chart.yaml
+++ b/dev/helm/Chart.yaml
@@ -1,7 +1,11 @@
-apiVersion: v1
-name: Wiki.js
-version: 2.0.0
-appVersion: 2.0.0
+apiVersion: v2
+name: wiki
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+version: 2.0.1
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application.
+AppVersion: latest
description: The most powerful and extensible open source Wiki software.
keywords:
- wiki
@@ -10,6 +14,20 @@ keywords:
- docs
- reference
- editor
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+dependencies:
+ - name: postgresql
+ version: 6.5.0
+ repository: https://kubernetes-charts.storage.googleapis.com/
+ condition: postgresql.enabled
home: https://wiki.js.org
icon: https://github.com/Requarks/wiki/raw/master/client/static/favicons/android-chrome-192x192.png
sources:
@@ -18,4 +36,7 @@ maintainers:
- name: Nicolas Giard
email: github@ngpixel.com
url: https://github.com/NGPixel
+ - name: James Greenhill
+ email: james@fuziontech.net
+ url: https://github.com/fuziontech
engine: gotpl
diff --git a/dev/helm/README.md b/dev/helm/README.md
index b3c43d86..86cc5223 100644
--- a/dev/helm/README.md
+++ b/dev/helm/README.md
@@ -1,2 +1,138 @@
-# Work in progress
-##### Do not use!
+
+
+
+
+[![Release](https://img.shields.io/github/release/Requarks/wiki.svg?style=flat&maxAge=3600)](https://github.com/Requarks/wiki/releases)
+[![License](https://img.shields.io/badge/license-AGPLv3-blue.svg?style=flat)](https://github.com/requarks/wiki/blob/master/LICENSE)
+[![Backers on Open Collective](https://opencollective.com/wikijs/all/badge.svg)](https://opencollective.com/wikijs)
+[![Downloads](https://img.shields.io/github/downloads/Requarks/wiki/total.svg?style=flat)](https://github.com/Requarks/wiki/releases)
+[![Docker Pulls](https://img.shields.io/docker/pulls/requarks/wiki.svg)](https://hub.docker.com/r/requarks/wiki/)
+[![Build status](https://dev.azure.com/requarks/wiki/_apis/build/status/build)](https://dev.azure.com/requarks/wiki/_build/latest?definitionId=9)
+[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=wiki&metric=alert_status)](https://sonarcloud.io/dashboard?id=wiki)
+[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=wiki&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=wiki)
+[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=wiki&metric=security_rating)](https://sonarcloud.io/dashboard?id=wiki)
+[![Standard - JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](http://standardjs.com/)
+[![Chat on Slack](https://img.shields.io/badge/slack-requarks-CC2B5E.svg?style=flat&logo=slack)](https://wiki.requarks.io/slack)
+[![Twitter Follow](https://img.shields.io/badge/follow-%40requarks-blue.svg?style=flat&logo=twitter)](https://twitter.com/requarks)
+[![Subscribe to Newsletter](https://img.shields.io/badge/newsletter-subscribe-yellow.svg?style=flat&logo=mailchimp)](https://wiki.js.org/newsletter)
+
+##### A modern, lightweight and powerful wiki app built on NodeJS
+
+
+
+- **[Official Website](https://wiki.js.org/)**
+- **[Documentation](https://docs.requarks.io/)**
+
+Donate
+
+
+
+Wiki.js is an open source project that has been made possible due to the generous contributions by community [backers](https://wiki.js.org/about). If you are interested in supporting this project, please consider [becoming a sponsor](https://github.com/users/NGPixel/sponsorship), [becoming a patron](https://www.patreon.com/requarks), donating to our [OpenCollective](https://opencollective.com/wikijs), via [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FLV5X255Z9CJU&source=url) or via Ethereum (`0xe1d55c19ae86f6bcbfb17e7f06ace96bdbb22cb5`).
+
+ [![Become a Sponsor](https://img.shields.io/badge/donate-github-ea4aaa.svg?style=popout&logo=github)](https://github.com/users/NGPixel/sponsorship)
+ [![Become a Patron](https://img.shields.io/badge/donate-patreon-orange.svg?style=popout&logo=patreon)](https://www.patreon.com/requarks)
+ [![Donate on OpenCollective](https://img.shields.io/badge/donate-open%20collective-blue.svg?style=popout&logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIyNTZweCIgaGVpZ2h0PSIyNTZweCIgdmlld0JveD0iMCAwIDI1NiAyNTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPjxnPjxwYXRoIGQ9Ik0yMDkuNzY1MTQ0LDEyOC4xNDk5NzkgQzIwOS43NjUxNDQsMTQ0LjE2MzMgMjA0Ljg2NDM4MSwxNTkuNDg5ODkgMTk2LjQ5ODc0NywxNzIuNzI1MDcyIEwyMjkuOTQ1Njc1LDIwNi4xNzE5OTkgQzI0Ni42ODIxMDUsMTgzLjg1Njc1OSAyNTUuNzI5MzA3LDE1Ni43MTUxNTIgMjU1LjcyOTMwNywxMjguODIxMTAyIEMyNTUuNzI5MzA3LDk5LjU1Njk5MTcgMjQ1Ljk3NDYwMyw3My4wNzEwMjA3IDIyOS4yNTg5NDQsNTEuNDg1ODEyOCBMMTk2LjQ4MzE0LDg0LjIxNDc5NCBDMjA1LjEyMjU2MSw5Ny4yMjI0NjgzIDIwOS43MzY5MDcsMTEyLjQ4NzgxIDIwOS43NDk1MzcsMTI4LjEwMzE1NiBMMjA5Ljc2NTE0NCwxMjguMTQ5OTc5IFoiIGZpbGw9IiNCOEQzRjQiPjwvcGF0aD48cGF0aCBkPSJNMTI3LjUxMzQ4NCwyMTAuMzU0ODE2IEM4Mi4xNDYwODcyLDIxMC4yNjg5NTggNDUuMzg3NTA5NCwxNzMuNTE3MzU4IDQ1LjI5MzAzOTMsMTI4LjE0OTk3OSBDNDUuMzYxNzUwMiw4Mi43NjQzMTM4IDgyLjEyNzg0ODcsNDUuOTg0MjU3IDEyNy41MTM0ODQsNDUuODk4MzE4NiBDMTQ0LjI0NDc1Miw0NS44OTgzMTg2IDE1OS41NzEzNDIsNTAuNzk5MDgxNyAxNzIuMTE5NzkyLDU5LjE2NDcxNTQgTDIwNC44NjQzODEsMjYuMzg4OTExNiBDMTgyLjU0MzY1LDkuNjY2NjUxMjkgMTU1LjQwMzQyOSwwLjYzMDg2MzI5OCAxMjcuNTEzNDg0LDAuNjM2NDk0NDAzIEM1Ny4xMjM1NDM3LDAuNjM2NDk0NDAzIDAsNTcuNzYwMDM4MSAwLDEyOC4xNDk5NzkgQzAsMTk4LjUwODcwNCA1Ny4xMjM1NDM3LDI1NS42NjM0NjMgMTI3LjUxMzQ4NCwyNTUuNjYzNDYzIEMxNTUuNTM3MzUyLDI1NS43NDA4NzYgMTgyLjc3NTk4OSwyNDYuNDA4NTEgMjA0Ljg2NDM4MSwyMjkuMTYxODg0IEwxNzEuNDE3NDU0LDE5NS43MzA1NjQgQzE1OS41NTU3MzQsMjA1LjQ4NTI2OCAxNDQuMjYwMzU5LDIxMC4zNTQ4MTYgMTI3LjUxMzQ4NCwyMTAuMzU0ODE2IEwxMjcuNTEzNDg0LDIxMC4zNTQ4MTYgWiIgZmlsbD0iIzdGQURGMiI+PC9wYXRoPjwvZz48L3N2Zz4=)](https://opencollective.com/wikijs)
+ [![Donate via Paypal](https://img.shields.io/badge/donate-paypal-blue.svg?style=popout&logo=paypal)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FLV5X255Z9CJU&source=url)
+ [![Donate via Ethereum](https://img.shields.io/badge/donate-ethereum-999.svg?style=popout&logo=ethereum&logoColor=CCC)](https://etherscan.io/address/0xe1d55c19ae86f6bcbfb17e7f06ace96bdbb22cb5)
+ [![Donate via Bitcoin](https://img.shields.io/badge/donate-bitcoin-ff9900.svg?style=popout&logo=bitcoin&logoColor=CCC)](https://checkout.opennode.com/p/2553c612-f863-4407-82b3-1a7685268747)
+ [![Buy a T-Shirt](https://img.shields.io/badge/buy-t--shirts-teal.svg?style=popout&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4Igp3aWR0aD0iMjQiIGhlaWdodD0iMjQiCnZpZXdCb3g9IjAgMCAxOTIgMTkyIgpzdHlsZT0iIGZpbGw6IzAwMDAwMDsiPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IiIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjAiIGZvbnQtZmFtaWx5PSJub25lIiBmb250LXdlaWdodD0ibm9uZSIgZm9udC1zaXplPSJub25lIiB0ZXh0LWFuY2hvcj0ibm9uZSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOiBub3JtYWwiPjxwYXRoIGQ9Ik0wLDE5MnYtMTkyaDE5MnYxOTJ6IiBmaWxsPSJub25lIj48L3BhdGg+PGcgZmlsbD0iIzFhYmM5YyI+PGcgaWQ9InN1cmZhY2UxIj48cGF0aCBkPSJNOTYsMGMtMTUuMjE4NzUsMCAtMjQuNjg3NSwzLjY1NjI1IC0yNS41LDRsLTIyLjUsNy4yNWMtMTAuNDA2MjUsMy4xODc1IC0xOS4wOTM3NSw5LjQzNzUgLTI1LjUsMTguMjVsLTIyLjUsNDIuNWwyNy4yNSwxNi43NWwxMi43NSwtMjR2MTE5LjI1YzAsNC40MDYyNSAyNS4wNjI1LDggNTYsOGMzMC45Mzc1LDAgNTYsLTMuNTkzNzUgNTYsLTh2LTExOS4yNWwxMi43NSwyNGwyNy4yNSwtMTYuNzVsLTIyLjUsLTQyLjVjLTYuNDA2MjUsLTguODEyNSAtMTUuMTU2MjUsLTE1LjA2MjUgLTI0Ljc1LC0xOC4yNWwtMjIuMjUsLTcuMjVjLTAuMTg3NSwwIC0xLjAzMTI1LDEuMzEyNSAtMiwyLjc1bDEuMjUsLTIuNWMwLDAgLTkuODQzNzUsLTQuMjUgLTI1Ljc1LC00LjI1ek05Niw4YzExLjQwNjI1LDAgMTguNDM3NSwyLjI1IDIxLDMuMjVjLTQuNDY4NzUsNS43NSAtMTEuNDA2MjUsMTIuNzUgLTIxLDEyLjc1Yy05LjQwNjI1LDAgLTE2LjQwNjI1LC03LjA2MjUgLTIwLjc1LC0xMi43NWMyLjg3NSwtMS4wNjI1IDkuODc1LC0zLjI1IDIwLjc1LC0zLjI1eiI+PC9wYXRoPjwvZz48L2c+PC9nPjwvc3ZnPg==)](https://wikijs.threadless.com)
+
+
+
+## Introduction
+
+This chart bootstraps a Wiki.js deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
+
+It also optionally packages the [PostgreSQL](https://github.com/kubernetes/charts/tree/master/stable/postgresql) as the database but you are free to bring your own.
+
+## Prerequisites
+
+- PV provisioner support in the underlying infrastructure (with persistence storage enabled) if you want data persistance
+
+## Installing the Chart
+
+To install the chart with the release name `my-release` run the following from this (`helm`) directory:
+
+```console
+$ helm install --name my-release .
+```
+
+The command deploys Wiki.js on the Kubernetes cluster in the default configuration. The [configuration](#configuration) section lists the parameters that can be configured during installation.
+
+> **Tip**: List all releases using `helm list`
+
+## Uninstalling the Chart
+
+To uninstall/delete the `my-release` deployment:
+
+```console
+$ helm delete my-release
+```
+
+The command removes all the Kubernetes components associated with the chart and deletes the release.
+
+> **Warning**: Persistant Volume Claims for the database are not deleted automatically. They need to be manually deleted
+
+```console
+$ kubectl delete pvc/data-wiki-postgresql-0
+```
+
+## Configuration
+
+The following table lists the configurable parameters of the Wiki.js chart and their default values.
+
+| Parameter | Description | Default |
+| ------------------------------- | ------------------------------- | ---------------------------------------------------------- |
+| `image.repository` | Wiki.js image | `requarks/wiki` |
+| `image.tag` | Wiki.js image tag | `latest` |
+| `imagePullPolicy` | Image pull policy | `IfNotPresent` |
+| `replicacount` | Amount of wiki.js service pods to run | `1` |
+| `resources.limits` | wiki.js service resource limits | `{cpu: 500m, memory: 500Mi}` |
+| `resources.requests` | wiki.js service resource requests | `{cpu: 300m, memory: 300Mi}` |
+| `nodeSelector` | Node labels for wiki.js pod assignment | `{}` |
+| `affinity` | Affinity settings for wiki.js pod assignment | `{}` |
+| `schedulerName` | Name of an alternate scheduler for wiki.js pod | `nil` |
+| `tolerations` | Toleration labels for wiki.jsk pod assignment | `[]` |
+| `ingress.enabled` | Enable ingress controller resource | `false` |
+| `ingress.annotations` | Ingress annotations | `{}` |
+| `ingress.hostname` | URL to address your Wiki.js installation | `wiki.local` |
+| `ingress.tls` | Ingress TLS configuration | `[]` |
+| `postgresql.enabled` | Deploy postgres server (see below) | `true` |
+| `postgresql.postgresqlDatabase` | Postgres database name | `wiki` |
+| `postgresql.postgresqlUser` | Postgres username | `postgres` |
+| `postgresql.postgresqlHost` | External postgres host | `nil` |
+| `postgresql.postgresqlPassword` | External postgres password | `nil` |
+| `postgresql.postgresqlPort` | External postgres port | `5432` |
+| `postgresql.persistence.enabled` | Enable postgres persistence using PVC | `true` |
+| `postgresql.persistence.existingClaim` | Provide an existing `PersistentVolumeClaim` for postgres | `nil` |
+| `postgresql.persistence.storageClass` | Postgres PVC Storage Class (example: `nfs`) | `nil` |
+| `postgresql.persistence.size` | Postgers PVC Storage Request | `10Gi` |
+
+Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
+
+```console
+$ helm install --name my-release \
+ --set postgresql.persistence.enabled=false \
+ .
+```
+
+Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
+
+```console
+$ helm install --name my-release -f values.yaml .
+```
+
+> **Tip**: You can use the default [values.yaml](values.yaml)
+
+## PostgresSQL
+
+By default, PostgreSQL is installed as part of the chart. To use an external PostgreSQL server set `postgresql.enabled` to `false` and then set `postgresql.postgresqlHost` and `postgresql.postgresqlPassword`. The other options (`postgresql.postgresqlDatabase`, `postgresql.postgresqlUser` and `postgresql.postgresqlPort`) may also want changing from their default values.
+
+## Persistence
+
+Persistent Volume Claims are used to keep the data across deployments. This is known to work in GCE, AWS, and minikube.
+See the [Configuration](#configuration) section to configure the PVC or to disable persistence.
+
+## Ingress
+
+This chart provides support for Ingress resource. If you have an available Ingress Controller such as Nginx or Traefik you maybe want to set `ingress.enabled` to true and choose an `ingress.hostname` for the URL. Then, you should be able to access the installation using that address.
diff --git a/dev/helm/charts/postgresql-6.5.0.tgz b/dev/helm/charts/postgresql-6.5.0.tgz
new file mode 100644
index 00000000..acc79962
Binary files /dev/null and b/dev/helm/charts/postgresql-6.5.0.tgz differ
diff --git a/dev/helm/requirements.yaml b/dev/helm/requirements.yaml
deleted file mode 100644
index 16900131..00000000
--- a/dev/helm/requirements.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-dependencies:
- - name: postgresql
- version: 3.18.4
- repository: https://kubernetes-charts.storage.googleapis.com/
- condition: postgresql.enabled
diff --git a/dev/helm/templates/NOTES.txt b/dev/helm/templates/NOTES.txt
new file mode 100644
index 00000000..5199428e
--- /dev/null
+++ b/dev/helm/templates/NOTES.txt
@@ -0,0 +1,21 @@
+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 }}{{ . }}
+ {{- 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 "wiki.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 "wiki.fullname" . }}'
+ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "wiki.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 "wiki.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+ echo "Visit http://127.0.0.1:8080 to use your application"
+ kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80
+{{- end }}
diff --git a/dev/helm/templates/_helpers.tpl b/dev/helm/templates/_helpers.tpl
new file mode 100644
index 00000000..40af2a9e
--- /dev/null
+++ b/dev/helm/templates/_helpers.tpl
@@ -0,0 +1,108 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "wiki.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 "wiki.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 "wiki.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Common labels
+*/}}
+{{- define "wiki.labels" -}}
+helm.sh/chart: {{ include "wiki.chart" . }}
+{{ include "wiki.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end -}}
+
+{{/*
+Selector labels
+*/}}
+{{- define "wiki.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "wiki.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "wiki.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create -}}
+ {{ default (include "wiki.fullname" .) .Values.serviceAccount.name }}
+{{- else -}}
+ {{ default "default" .Values.serviceAccount.name }}
+{{- end -}}
+{{- 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).
+*/}}
+{{- define "wiki.postgresql.fullname" -}}
+{{- if .Values.postgresql.fullnameOverride -}}
+{{- .Values.postgresql.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{ printf "%s-%s" .Chart.Name "postgresql"}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Set postgres host
+*/}}
+{{- define "wiki.postgresql.host" -}}
+{{- if .Values.postgresql.enabled -}}
+{{- template "wiki.postgresql.fullname" . -}}
+{{- else -}}
+{{- .Values.postgresql.postgresqlHost | quote -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Set postgres secret
+*/}}
+{{- define "wiki.postgresql.secret" -}}
+{{- if .Values.postgresql.enabled -}}
+{{- template "wiki.postgresql.fullname" . -}}
+{{- else -}}
+{{- template "wiki.fullname" . -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Set postgres secretKey
+*/}}
+{{- define "wiki.postgresql.secretKey" -}}
+{{- if .Values.postgresql.enabled -}}
+"postgresql-password"
+{{- else -}}
+{{- default "postgresql-password" .Values.postgresql.existingSecretKey | quote -}}
+{{- end -}}
+{{- end -}}
diff --git a/dev/helm/templates/deployment.yaml b/dev/helm/templates/deployment.yaml
new file mode 100644
index 00000000..7611db99
--- /dev/null
+++ b/dev/helm/templates/deployment.yaml
@@ -0,0 +1,75 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "wiki.fullname" . }}
+ labels:
+ {{- include "wiki.labels" . | nindent 4 }}
+spec:
+ replicas: {{ .Values.replicaCount }}
+ selector:
+ matchLabels:
+ {{- include "wiki.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ labels:
+ {{- include "wiki.selectorLabels" . | nindent 8 }}
+ spec:
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ serviceAccountName: {{ include "wiki.serviceAccountName" . }}
+ securityContext:
+ {{- toYaml .Values.podSecurityContext | nindent 8 }}
+ containers:
+ - name: {{ .Chart.Name }}
+ securityContext:
+ {{- toYaml .Values.securityContext | nindent 12 }}
+ image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ env:
+ - name: DB_TYPE
+ value: postgres
+ - name: DB_HOST
+ value: {{ template "wiki.postgresql.host" . }}
+ - name: DB_PORT
+ value: "{{ default "5432" .Values.postgresql.postgresqlPort }}"
+ - name: DB_NAME
+ value: {{ default "wiki" .Values.postgresql.postgresqlDatabase }}
+ - name: DB_USER
+ value: {{ default "wiki" .Values.postgresql.postgresqlUser }}
+ - name: DB_PASS
+ valueFrom:
+ secretKeyRef:
+ {{- if .Values.postgresql.existingSecret }}
+ name: {{ .Values.postgresql.existingSecret }}
+ {{- else }}
+ name: {{ template "wiki.postgresql.secret" . }}
+ {{- end }}
+ key: {{ template "wiki.postgresql.secretKey" . }}
+ ports:
+ - name: http
+ containerPort: 3000
+ protocol: TCP
+ livenessProbe:
+ httpGet:
+ path: /healthz
+ port: http
+ readinessProbe:
+ httpGet:
+ path: /healthz
+ port: http
+ resources:
+ {{- toYaml .Values.resources | nindent 12 }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.tolerations }}
+ tolerations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
diff --git a/dev/helm/templates/ingress.yaml b/dev/helm/templates/ingress.yaml
index 01d60ffb..0b08134d 100644
--- a/dev/helm/templates/ingress.yaml
+++ b/dev/helm/templates/ingress.yaml
@@ -1,39 +1,41 @@
-{{- if .Values.ingress.enabled }}
-{{- range .Values.ingress.hosts }}
+{{- if .Values.ingress.enabled -}}
+{{- $fullName := include "wiki.fullname" . -}}
+{{- $svcPort := .Values.service.port -}}
+{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
+apiVersion: networking.k8s.io/v1beta1
+{{- else -}}
apiVersion: extensions/v1beta1
+{{- end }}
kind: Ingress
metadata:
- name: {{ template "wiki.fullname" $ }}
+ name: {{ $fullName }}
labels:
- app: {{ template "wiki.name" $ }}
- chart: {{ template "wiki.chart" $ }}
- release: {{ $.Release.Name | quote }}
- heritage: {{ $.Release.Service | quote }}
+ {{- include "wiki.labels" . | nindent 4 }}
+ {{- with .Values.ingress.annotations }}
annotations:
- {{- if .tls }}
- ingress.kubernetes.io/secure-backends: "true"
- {{- end }}
- {{- if .certManager }}
- kubernetes.io/tls-acme: "true"
- {{- end }}
- {{- range $key, $value := .annotations }}
- {{ $key }}: {{ $value | quote }}
- {{- end }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
spec:
- rules:
- - host: {{ .name }}
- http:
- paths:
- - path: {{ default "/" .path }}
- backend:
- serviceName: {{ template "wiki.fullname" $ }}
- servicePort: 80
-{{- if .tls }}
+{{- if .Values.ingress.tls }}
tls:
- - hosts:
- - {{ .name }}
- secretName: {{ .tlsSecret }}
-{{- end }}
----
+ {{- 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: {{ . }}
+ backend:
+ serviceName: {{ $fullName }}
+ servicePort: {{ $svcPort }}
+ {{- end }}
+ {{- end }}
{{- end }}
diff --git a/dev/helm/templates/secrets.yaml b/dev/helm/templates/secrets.yaml
deleted file mode 100644
index 66241deb..00000000
--- a/dev/helm/templates/secrets.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-apiVersion: v1
-kind: Secret
-metadata:
- name: {{ template "wiki.fullname" . }}
- labels:
- app: {{ template "wiki.fullname" . }}
- chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
- release: "{{ .Release.Name }}"
- heritage: "{{ .Release.Service }}"
-type: Opaque
-data:
- db-user: {{ .Values.postgresql.postgresUser | b64enc | quote }}
- db-password: {{ .Values.postgresql.postgresPassword | b64enc | quote }}
diff --git a/dev/helm/templates/service.yaml b/dev/helm/templates/service.yaml
index 1bf029bb..567282e7 100644
--- a/dev/helm/templates/service.yaml
+++ b/dev/helm/templates/service.yaml
@@ -1,32 +1,15 @@
apiVersion: v1
kind: Service
metadata:
- name: {{ template "wiki.fullname" . }}
+ name: {{ include "wiki.fullname" . }}
labels:
- app: {{ template "wiki.name" . }}
- chart: {{ template "wiki.chart" . }}
- release: {{ .Release.Name | quote }}
- heritage: {{ .Release.Service | quote }}
+ {{- include "wiki.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
- {{- if .Values.service.loadBalancerIP }}
- loadBalancerIP: {{ .Values.service.loadBalancerIP }}
- {{- end }}
- {{- if (or (eq .Values.service.type "LoadBalancer") (eq .Values.service.type "NodePort")) }}
- externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }}
- {{- end }}
ports:
- - name: http
- port: {{ .Values.service.port }}
- targetPort: http
- {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePorts.http)))}}
- nodePort: {{ .Values.service.nodePorts.http }}
- {{- end }}
- - name: https
- port: {{ .Values.service.httpsPort }}
- targetPort: https
- {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePorts.https)))}}
- nodePort: {{ .Values.service.nodePorts.https }}
- {{- end }}
+ - port: {{ .Values.service.port }}
+ targetPort: http
+ protocol: TCP
+ name: http
selector:
- app: {{ template "wiki.name" . }}
+ {{- include "wiki.selectorLabels" . | nindent 4 }}
diff --git a/dev/helm/templates/serviceaccount.yaml b/dev/helm/templates/serviceaccount.yaml
new file mode 100644
index 00000000..7f6c8917
--- /dev/null
+++ b/dev/helm/templates/serviceaccount.yaml
@@ -0,0 +1,12 @@
+{{- if .Values.serviceAccount.create -}}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "wiki.serviceAccountName" . }}
+ labels:
+ {{- include "wiki.labels" . | nindent 4 }}
+ {{- with .Values.serviceAccount.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end -}}
diff --git a/dev/helm/templates/tests/test-connection.yaml b/dev/helm/templates/tests/test-connection.yaml
new file mode 100644
index 00000000..2d0887d4
--- /dev/null
+++ b/dev/helm/templates/tests/test-connection.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Pod
+metadata:
+ name: "{{ include "wiki.fullname" . }}-test-connection"
+ labels:
+ {{- include "wiki.labels" . | nindent 4 }}
+ annotations:
+ "helm.sh/hook": test-success
+spec:
+ containers:
+ - name: wget
+ image: busybox
+ command: ['wget']
+ args: ['{{ include "wiki.fullname" . }}:{{ .Values.service.port }}']
+ restartPolicy: Never
diff --git a/dev/helm/values.yaml b/dev/helm/values.yaml
index 2a5ec42c..e4149df7 100644
--- a/dev/helm/values.yaml
+++ b/dev/helm/values.yaml
@@ -1,41 +1,104 @@
-##
+# Default values for wiki.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+replicaCount: 1
+
+image:
+ repository: requarks/wiki
+ pullPolicy: IfNotPresent
+
+imagePullSecrets: []
+nameOverride: ""
+fullnameOverride: ""
+
+serviceAccount:
+ # Specifies whether a service account should be created
+ create: true
+ # Annotations to add to the service account
+ annotations: {}
+ # The name of the service account to use.
+ # If not set and create is true, a name is generated using the fullname template
+ name:
+
+podSecurityContext: {}
+ # fsGroup: 2000
+
+securityContext: {}
+ # capabilities:
+ # drop:
+ # - ALL
+ # readOnlyRootFilesystem: true
+ # runAsNonRoot: true
+ # runAsUser: 1000
+
+service:
+ type: ClusterIP
+ port: 80
+
+ingress:
+ enabled: false
+ annotations: {}
+ # kubernetes.io/ingress.class: nginx
+ # kubernetes.io/tls-acme: "true"
+ hosts:
+ - host: wiki.local
+ paths: ["/"]
+ tls: []
+ # - secretName: chart-example-tls
+ # hosts:
+ # - chart-example.local
+
+resources: {}
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ # limits:
+ # cpu: 100m
+ # memory: 128Mi
+ # requests:
+ # cpu: 100m
+ # memory: 128Mi
+
+nodeSelector: {}
+
+tolerations: []
+
+affinity: {}
+
## Configuration values for the postgresql dependency.
## ref: https://github.com/kubernetes/charts/blob/master/stable/postgresql/README.md
+##
postgresql:
- ##
## Use the PostgreSQL chart dependency.
- ## Set to false if bringing your own PostgreSQL.
+ ## Set to false if bringing your own PostgreSQL, and set secret value postgresql-uri.
+ ##
enabled: true
+ ### PostgreSQL User to create.
##
- ## If you are bringing your own PostgreSQL, you should set postgresHost and
- ## also probably service.port, postgresUser, postgresPassword, and postgresDatabase
- ## postgresHost:
- ##
- ## PostgreSQL port
- service:
- port: 5432
- ## PostgreSQL User to create.
- postgresUser: wiki
- ##
- ## PostgreSQL Password for the new user.
- ## If not set, a random 10 characters password will be used.
- postgresPassword: wikijsrocks
- ##
+ postgresqlUser: postgres
## PostgreSQL Database to create.
- postgresDatabase: wiki
##
+ postgresqlDatabase: wiki
## Persistent Volume Storage configuration.
## ref: https://kubernetes.io/docs/user-guide/persistent-volumes
+ ##
persistence:
- ##
## Enable PostgreSQL persistence using Persistent Volume Claims.
+ ##
enabled: true
+ ## concourse data Persistent Volume Storage Class
+ ## If defined, storageClassName:
+ ## If set to "-", storageClassName: "", which disables dynamic provisioning
+ ## If undefined (the default) or set to null, no storageClassName spec is
+ ## set, choosing the default provisioner. (gp2 on AWS, standard on
+ ## GKE, AWS & OpenStack)
##
- ## Persistant class
- # storageClass: classname
+ # storageClass: "-"
+ ## Persistent Volume Access Mode.
##
- ## Access mode:
accessMode: ReadWriteOnce
+ ## Persistent Volume Storage Size.
##
- ## Requested size:
- size: 10Gi
+ size: 8Gi