Files
docker-zulip/kubernetes/chart/zulip/README.md
Anders Kaseorg 2de3b6a0af Update to Zulip Server 10.2.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2025-04-15 23:52:16 -07:00

168 lines
7.1 KiB
Markdown

# Zulip
![Version: 0.10.2](https://img.shields.io/badge/Version-0.10.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 10.2-0](https://img.shields.io/badge/AppVersion-10.2--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 | `{}` | |
| fullnameOverride | string | `""` | |
| image.pullPolicy | string | `"IfNotPresent"` | |
| image.repository | string | `"zulip/docker-zulip"` | |
| image.tag | string | `"10.2-0"` | |
| imagePullSecrets | list | `[]` | |
| ingress.annotations | object | `{}` | |
| ingress.enabled | bool | `false` | |
| ingress.hosts[0].host | string | `"zulip.example.com"` | |
| ingress.hosts[0].paths[0].path | string | `"/"` | |
| ingress.tls | list | `[]` | |
| livenessProbe.enabled | bool | `true` | |
| livenessProbe.failureThreshold | int | `3` | |
| livenessProbe.initialDelaySeconds | int | `10` | |
| livenessProbe.periodSeconds | int | `10` | |
| livenessProbe.successThreshold | int | `1` | |
| livenessProbe.timeoutSeconds | int | `5` | |
| memcached.memcachedUsername | string | `"zulip@localhost"` | |
| nameOverride | string | `""` | |
| nodeSelector | object | `{}` | |
| podAnnotations | object | `{}` | |
| podLabels | object | `{}` | |
| podSecurityContext | object | `{}` | |
| postSetup.scripts | object | `{}` | |
| postgresql.auth.database | string | `"zulip"` | |
| postgresql.auth.username | string | `"zulip"` | |
| postgresql.image.repository | string | `"zulip/zulip-postgresql"` | |
| postgresql.image.tag | int | `14` | |
| postgresql.primary.containerSecurityContext.runAsUser | int | `0` | |
| rabbitmq.auth.username | string | `"zulip"` | |
| rabbitmq.persistence.enabled | bool | `false` | |
| redis.architecture | string | `"standalone"` | |
| redis.master.persistence.enabled | bool | `false` | |
| resources | object | `{}` | |
| securityContext | object | `{}` | |
| service.port | int | `80` | |
| service.type | string | `"ClusterIP"` | |
| serviceAccount.annotations | object | `{}` | |
| serviceAccount.create | bool | `true` | |
| serviceAccount.name | string | `""` | |
| sidecars | list | `[]` | |
| startupProbe.enabled | bool | `true` | |
| startupProbe.failureThreshold | int | `30` | |
| startupProbe.initialDelaySeconds | int | `10` | |
| startupProbe.periodSeconds | int | `10` | |
| startupProbe.successThreshold | int | `1` | |
| startupProbe.timeoutSeconds | int | `5` | |
| statefulSetAnnotations | object | `{}` | |
| statefulSetLabels | object | `{}` | |
| tolerations | list | `[]` | |
| zulip.environment.DISABLE_HTTPS | bool | `true` | |
| zulip.environment.SECRETS_email_password | string | `"123456789"` | |
| zulip.environment.SETTING_EMAIL_HOST | string | `""` | |
| zulip.environment.SETTING_EMAIL_HOST_USER | string | `"noreply@example.com"` | |
| zulip.environment.SETTING_EMAIL_PORT | string | `"587"` | |
| zulip.environment.SETTING_EMAIL_USE_SSL | string | `"False"` | |
| zulip.environment.SETTING_EMAIL_USE_TLS | string | `"True"` | |
| zulip.environment.SETTING_EXTERNAL_HOST | string | `"zulip.example.com"` | |
| zulip.environment.SETTING_ZULIP_ADMINISTRATOR | string | `"admin@example.com"` | |
| zulip.environment.SSL_CERTIFICATE_GENERATION | string | `"self-signed"` | |
| zulip.environment.ZULIP_AUTH_BACKENDS | string | `"EmailAuthBackend"` | |
| zulip.persistence.accessMode | string | `"ReadWriteOnce"` | |
| zulip.persistence.enabled | bool | `true` | |
| zulip.persistence.size | string | `"10Gi"` | |
| zulip.persistence.storageClass | string | `nil` | |
## About this helm chart
This helm chart sets up a StatefulSet that runs a Zulip pod, that in turn runs
the [docker-zulip](https://hub.docker.com/r/zulip/docker-zulip/) Dockerized
Zulip version. Configuration of Zulip happens through environment variables that
are defined in the `values.yaml` under `zulip.environment`. These environment
variables are forwarded to the Docker container, you can read more about
configuring Zulip through environment variables
[here](https://github.com/zulip/docker-zulip/#configuration).
### Dependencies
The chart uses Memcached, RabbitMQ and Redis helm charts defined in
the Bitnami Helm repository. Most of these are configured following their
default settings, but you can check
https://github.com/bitnami/charts/tree/master/bitnami/ for more configuration
options of the subcharts.
For PostgreSQL the chart also uses the Bitnami chart to install it on the
Kubernetes cluster. However, in this case we use Zulip's
[zulip-postgresql](https://hub.docker.com/r/zulip/zulip-postgresql) docker
image, because it contains the Postgresql plugins that are needed to run Zulip.
## Requirements
| Repository | Name | Version |
|------------|------|---------|
| oci://registry-1.docker.io/bitnamicharts | memcached | 7.4.16 |
| oci://registry-1.docker.io/bitnamicharts | postgresql | 15.5.32 |
| oci://registry-1.docker.io/bitnamicharts | rabbitmq | 14.7.0 |
| oci://registry-1.docker.io/bitnamicharts | redis | 20.1.4 |