# Zulip ![Version: 0.3.0](https://img.shields.io/badge/Version-0.3.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 5.6-0](https://img.shields.io/badge/AppVersion-5.6--0-informational?style=flat-square) [Zulip](https://zulip.com/) is an open source threaded team chat that helps teams stay productive and focused. Helm chart based on https://github.com/zulip/docker-zulip ## Installation Copy `values-local.yaml.example`, modify it as instructed in the comments, then install with the following commands: ``` helm dependency update # Get helm dependency charts helm install -f ./values-local.yaml zulip . # Install Zulip ``` This will show a message on how to reach your Zulip installation and how to create your first realm. Wait for all your pods to be ready before you continue. You can run `kubectl get pods` to their current state. Once all pods are ready, you can run the commands to create a Realm, and you can reach Zulip following the instructions as well. ### Installing on Minikube You need to do a few things to make [minikube](https://minikube.sigs.k8s.io/docs/) serve Zulip with a TLS certificate. Without it, Zulip will not work. If you haven't already, you need to set up `cert-manager` inside your minikube. First, enable the "ingress" minikube addon ([more info available here](https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/#enable-the-ingress-controller)) ``` minikube addons enable ingress ``` Second, [install cert-manager into your minikube cluster](https://cert-manager.io/docs/installation/#default-static-install): ``` kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml ``` Now you'll need to add an issuer that issues self-signed certificates. Copy this into a file, `self-signed-issuer.yaml` ``` apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: selfsigned namespace: cert-manager spec: selfSigned: {} ``` Now apply the issuer: `kubectl apply -f self-signed-issuer.yaml` We'll host Zulip on `zulip.local`. Add that to your `/etc/hosts` file and point it to the IP address you get with the command `minikube ip`. Now you're ready to follow [the installation instructions above](#installation). ## Values | Key | Type | Default | Description | |-----|------|---------|-------------| | affinity | object | `{}` | Affinity for pod assignment. Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity | | fullnameOverride | string | `""` | Fully override common.names.fullname template. | | image.pullPolicy | string | `"IfNotPresent"` | Pull policy for Zulip docker image. Ref: https://kubernetes.io/docs/user-guide/images/#pre-pulling-images | | image.repository | string | `"zulip/docker-zulip"` | Defaults to hub.docker.com/zulip/docker-zulip, but can be overwritten with a full HTTPS address. | | image.tag | string | `"5.6-0"` | Zulip image tag (immutable tags are recommended) | | imagePullSecrets | list | `[]` | Global Docker registry secret names as an array. | | ingress.annotations | object | `{}` | Can be used to add custom Ingress annotations. | | ingress.enabled | bool | `false` | Enable this to use an Ingress to reach the Zulip service. | | ingress.hosts[0] | object | `{"host":"zulip.example.com","paths":[{"path":"/"}]}` | Host for the Ingress. Should be the same as `zulip.environment.SETTING_EXTERNAL_HOST`. | | ingress.hosts[0].paths | list | `[{"path":"/"}]` | Serves Zulip root of the chosen host domain. | | ingress.tls | list | `[]` | Set a specific secret to read the TLS certificate from. If you use cert-manager, it will save the TLS secret here. If you do not, you need to manually create a secret with your TLS certificate. | | livenessProbe | object | `{"enabled":true,"failureThreshold":3,"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5}` | Liveness probe values. Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes | | memcached | object | `{"memcachedUsername":"zulip@localhost"}` | Memcached settings, see [Requirements](#Requirements). | | nameOverride | string | `""` | Partially override common.names.fullname template (will maintain the release name). | | nodeSelector | object | `{}` | Optionally add a nodeSelector to the Zulip pod, so it runs on a specific node. Ref: https://kubernetes.io/docs/user-guide/node-selection/ | | podAnnotations | object | `{}` | Custom annotations to add to the Zulip Pod. | | podLabels | object | `{}` | Custom labels to add to the Zulip Pod. | | podSecurityContext | object | `{}` | Can be used to override the default PodSecurityContext (fsGroup, runAsUser and runAsGroup) of the Zulip _Pod_. | | postSetup.scripts | object | `{}` | The Docker entrypoint script runs commands from `/data/post-setup.d` after the Zulip application's Setup phase has completed. Scripts can be added here as `script_filename: