├── .helmignore ├── Chart.lock ├── Chart.yaml ├── LICENSE ├── Makefile ├── README.md ├── charts └── prosody │ ├── .helmignore │ ├── Chart.yaml │ ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── configmaps-cont-init.yaml │ ├── configmaps-defaults.yaml │ ├── envs-configmap.yaml │ ├── envs-secret.yaml │ ├── ingress.yaml │ ├── metrics-configmap.yaml │ ├── metrics-servicemonitor.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ ├── statefulset.yaml │ └── tests │ │ └── test-connection.yaml │ └── values.yaml ├── docs ├── artifacthub-repo.yml ├── index.yaml ├── jitsi-meet-0.1.2.tgz ├── jitsi-meet-0.1.3.tgz ├── jitsi-meet-0.1.4.tgz ├── jitsi-meet-0.2.0.tgz ├── jitsi-meet-0.2.1.tgz ├── jitsi-meet-1.0.0.tgz ├── jitsi-meet-1.1.0.tgz ├── jitsi-meet-1.2.0.tgz ├── jitsi-meet-1.2.1.tgz ├── jitsi-meet-1.2.2.tgz ├── jitsi-meet-1.2.3.tgz ├── jitsi-meet-1.3.0.tgz ├── jitsi-meet-1.3.1.tgz ├── jitsi-meet-1.3.2.tgz ├── jitsi-meet-1.3.3.tgz ├── jitsi-meet-1.3.4.tgz ├── jitsi-meet-1.3.5.tgz ├── jitsi-meet-1.3.5.tgz.prov ├── jitsi-meet-1.3.6.tgz ├── jitsi-meet-1.3.6.tgz.prov ├── jitsi-meet-1.3.7.tgz ├── jitsi-meet-1.3.7.tgz.prov ├── jitsi-meet-1.3.8.tgz ├── jitsi-meet-1.3.8.tgz.prov ├── jitsi-meet-1.4.0.tgz ├── jitsi-meet-1.4.0.tgz.prov ├── jitsi-meet-1.4.1.tgz ├── jitsi-meet-1.4.1.tgz.prov ├── jitsi-meet-1.5.0.tgz ├── jitsi-meet-1.5.0.tgz.prov ├── jitsi-meet-1.5.1.tgz ├── jitsi-meet-1.5.1.tgz.prov ├── jitsi-meet.png └── robots.txt ├── example-configurations └── custom-defaults.yaml ├── files └── grafana_dashboards │ ├── README.md │ ├── jitsi-meet-system.json │ └── jitsi-meet.json ├── templates ├── NOTES.txt ├── _helpers.tpl ├── common-configmap.yaml ├── ingress.yaml ├── jibri │ ├── _helper.tpl │ ├── configmap.yaml │ ├── configmaps-cont-init.yaml │ ├── configmaps-defaults.yaml │ ├── configmaps-other.yaml │ ├── deployment.yaml │ ├── persistentvolumeclaim.yaml │ ├── service.yaml │ └── xmpp-secret.yaml ├── jicofo │ ├── _helper.tpl │ ├── configmap.yaml │ ├── configmaps-cont-init.yaml │ ├── configmaps-defaults.yaml │ ├── deployment.yaml │ ├── podmonitor.yaml │ └── xmpp-secret.yaml ├── jigasi │ ├── _helper.tpl │ ├── configmap.yaml │ ├── deployment.yaml │ └── xmpp-secret.yaml ├── jvb │ ├── _helper.tpl │ ├── configmap.yaml │ ├── configmap_grafana_dashboards.yaml │ ├── deployment.yaml │ ├── metrics-prometheus.yaml │ ├── metrics-service.yaml │ ├── service.yaml │ └── xmpp-secret.yaml ├── serviceaccount.yaml ├── tests │ └── test-connection.yaml ├── transcriber │ ├── _helper.tpl │ ├── configmap.yaml │ ├── deployment.yaml │ ├── pvc-transcriber.yaml │ └── xmpp-secret.yaml └── web │ ├── _helper.tpl │ ├── configmap-conffiles.yaml │ ├── configmap-init.yaml │ ├── configmap.yaml │ ├── deployment.yaml │ └── service.yaml └── values.yaml /.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | # GitHub Pages 25 | docs/ 26 | # Built Helm charts 27 | *.tgz 28 | # 29 | example-configurations/ 30 | Makefile 31 | -------------------------------------------------------------------------------- /Chart.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: prosody 3 | repository: "" 4 | version: 1.5.1 5 | digest: sha256:e922b4514ee6ba07305f3eb613db7eb973e70b829582aa89e49263cc9f00a8ca 6 | generated: "2025-09-17T11:44:43.455477014+01:00" 7 | -------------------------------------------------------------------------------- /Chart.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | ## Main Chart metadata: 3 | apiVersion: v2 4 | name: jitsi-meet 5 | description: Jitsi Meet packaged for Kubernetes 6 | type: application 7 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 8 | 9 | 10 | ## This is the *chart* version. 11 | # This version number should be incremented each time you make 12 | # changes to the chart and its templates, including the app version. 13 | version: 1.5.1 14 | 15 | ## This is the *application* version. 16 | # Due to the way the chart is split into the "main" one 17 | # and one for Prosody, make sure to bump application version 18 | # in 3 places: 19 | # * Here; 20 | # * charts/prosody/Chart.yaml; 21 | # * values.yaml. 22 | appVersion: stable-10590 23 | 24 | ## Chart dependencies: 25 | # Make sure to keep the Prosody chart version in sync with this one. 26 | dependencies: 27 | - name: prosody 28 | condition: prosody.enabled 29 | version: 1.5.1 30 | 31 | ## Chart annotations (for ArtifactHub): 32 | annotations: 33 | artifacthub.io/category: streaming-messaging 34 | artifacthub.io/links: | 35 | - name: Jitsi Meet 36 | url: https://jitsi.org/jitsi-meet/ 37 | - name: Jitsi Meet Documentation 38 | url: https://jitsi.github.io/handbook/docs/intro/ 39 | - name: Jitsi-Helm GitHub 40 | url: https://github.com/jitsi-contrib/jitsi-helm 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-2023 jitsi-contrib 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | NAME := jitsi-meet-example 2 | NAMESPACE := 3 | OUTFILE := 4 | 5 | ifeq "$(strip $(OUTFILE))" "" 6 | OUT_FLAGS := 7 | else 8 | OUT_FLAGS := > $(OUTFILE) 9 | endif 10 | 11 | ifeq "$(strip $(NAMESPACE))" "" 12 | NS_FLAGS := 13 | else 14 | NS_FLAGS := -n $(NAMESPACE) 15 | endif 16 | 17 | ifeq "$(strip $(VALUES))" "" 18 | VAL_FLAGS := 19 | else 20 | VAL_FLAGS := -f $(VALUES) 21 | endif 22 | 23 | template: 24 | echo helm template ${NS_FLAGS} ${VAL_FLAGS} --release-name ${NAME} . ${OUT_FLAGS} 25 | 26 | package: 27 | echo helm package . 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Helm Chart for Jitsi Meet 2 | 3 | [![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/jitsi-meet)](https://artifacthub.io/packages/search?repo=jitsi-meet) ![GitHub Release](https://img.shields.io/github/v/release/jitsi-contrib/jitsi-helm?logo=helm&logoColor=white&label=Latest%20release) 4 | ![GitHub Release Date](https://img.shields.io/github/release-date/jitsi-contrib/jitsi-helm?display_date=published_at&logo=git&logoColor=white&label=Released%20at) 5 | 6 | 7 | [jitsi-meet](https://jitsi.org/jitsi-meet/) Secure, Simple and Scalable Video 8 | Conferences that you use as a standalone app or embed in your web application. 9 | 10 | ## TL;DR; 11 | 12 | ```bash 13 | helm repo add jitsi https://jitsi-contrib.github.io/jitsi-helm/ 14 | helm install myjitsi jitsi/jitsi-meet 15 | ``` 16 | 17 | ## Introduction 18 | 19 | This chart bootstraps a jitsi-meet deployment, like the official 20 | [one](https://meet.jit.si). 21 | 22 | ## Exposing your Jitsi Meet installation 23 | 24 | To be able to do video conferencing with other people, the JVB component should 25 | be reachable by all participants (e.g. on a public IP). Thus the default 26 | behaviour of advertised the internal IP of JVB, is not really suitable in many 27 | cases. Kubernetes offers multiple possibilities to work around the problem. Not 28 | all options are available depending on the Kubernetes cluster setup. The chart 29 | tries to make all options available without enforcing one. 30 | 31 | ### Option 1: service of type `LoadBalancer` 32 | 33 | This requires a cloud setup that enables a Loadbalancer attachement. 34 | This could be enabled via values: 35 | 36 | ```yaml 37 | jvb: 38 | service: 39 | type: LoadBalancer 40 | 41 | # Depending on the cloud, LB's public IP cannot be known in advance, so deploy first, without the next option. 42 | # Next: redeploy with the following option set to the public IP you retrieved from the API. 43 | # Additionally, you can add your cluster's public IPs if you want to use direct connection as a fallback. 44 | publicIPs: 45 | - 1.2.3.4 46 | # - 30.10.10.1 47 | # - 30.10.10.2 48 | ``` 49 | 50 | In this case you're not allowed to change the `jvb.replicaCount` to more than 51 | `1`, UDP packets will be routed to random `jvb`, which would not allow for a 52 | working video setup. 53 | 54 | ### Option 2: NodePort and node with Public IP or external loadbalancer 55 | 56 | ```yaml 57 | jvb: 58 | service: 59 | type: NodePort 60 | # Set the following variable if you want to use a specific external port for the service. 61 | # The default is to select a random port from Kubelet's allowed NodePort range (30000-32767). 62 | 63 | # nodePort: 10000 64 | 65 | # Use public IP of one (or more) of your nodes, 66 | # or the public IP of an external LB: 67 | publicIPs: 68 | - 30.10.10.1 69 | ``` 70 | 71 | In this case you're not allowed to change the `jvb.replicaCount` to more than 72 | `1`, UDP packets will be routed to random `jvb`, which would not allow for a 73 | working video setup. 74 | 75 | ### Option 3: hostPort and node with Public IP 76 | 77 | ```yaml 78 | jvb: 79 | useHostPort: true 80 | # Use public IP of one (or more) of your nodes, 81 | # or the public IP of an external LB: 82 | publicIPs: 83 | - 30.10.10.1 84 | ``` 85 | 86 | In this case you can have more the one `jvb` but you're putting you cluster at 87 | risk by having the nodes IPs and JVB ports directly exposed on the Internet. 88 | 89 | #### Option 3.1: hostPort and auto-detected Node IP 90 | 91 | ```yaml 92 | jvb: 93 | useHostPort: true 94 | useNodeIP: true 95 | ``` 96 | 97 | This is similar to option 3, but every JVB pod will auto-detect it's own 98 | external IP address based on the node it's running on. This option might be 99 | better suited for installations that use OCTO. 100 | 101 | ### Option 4: hostNetwork 102 | 103 | ```yaml 104 | jvb: 105 | useHostNetwork: true 106 | ``` 107 | 108 | Similar to Option 3, this way you expose JVB "as is" on the node, without any 109 | additional protection. This is not recommended, but might be useful in some rare 110 | cases. 111 | 112 | ### Option 4: Use ingress TCP/UDP forward capabilities 113 | 114 | In case of an ingress capable of doing tcp/udp forwarding (like nginx-ingress), 115 | it can be setup to forward the video streams. 116 | 117 | ```yaml 118 | # Don't forget to configure the ingress properly (separate configuration) 119 | jvb: 120 | # 1.2.3.4 being one of the IP of the ingress controller 121 | publicIPs: 122 | - 1.2.3.4 123 | 124 | ``` 125 | 126 | Again in this case, only one jvb will work in this case. 127 | 128 | ### Option 5: Bring your own setup 129 | 130 | There are multiple other possibilities combining the available parameters, depending of your cluster/network setup. 131 | 132 | 133 | ## Recording and streaming support 134 | 135 | This chart includes support for *Jibri*, which allows Jitsi Meet users to record and stream their meetings. 136 | To enable Jibri support, add this section to your `values.yaml`: 137 | ```yaml 138 | jibri: 139 | ## Enabling Jibri will allow users to record 140 | ## and/or stream their meetings (e.g. to YouTube). 141 | enabled: true 142 | 143 | ## Enable single-use mode for Jibri (recommended). 144 | singleUseMode: false 145 | 146 | ## Enable multiple Jibri instances. 147 | ## Secommended for single-use mode. 148 | replicaCount: 1 149 | 150 | ## Enable recording service. 151 | ## Set this to true/false to enable/disable local recordings. 152 | ## Defaults to enabled (allow local recordings). 153 | recording: true 154 | 155 | ## Enable livestreaming service. 156 | ## Set this to true/false to enable/disable live streams. 157 | ## Defaults to disabled (livestreaming is forbidden). 158 | livestreaming: true 159 | 160 | ## Enable persistent storage for local recordings. 161 | ## If disabled, jibri pod will use a transient 162 | ## emptyDir-backed storage instead. 163 | persistence: 164 | enabled: true 165 | size: 32Gi 166 | 167 | shm: 168 | ## Set to true to enable "/dev/shm" mount. 169 | ## May be required by built-in Chromium. 170 | enabled: true 171 | ``` 172 | 173 | The above example will allow your Jitsi users to make local recordings, as well 174 | as live streams of their meetings. 175 | 176 | 177 | ## Scaling your installation 178 | 179 | At the moment you can freely scale Jitsi Web and Jibri pods, as they're 180 | stateless and require zero special configuration to work in multi-instance 181 | setup: 182 | 183 | ```yaml 184 | web: 185 | replicaCount: 3 186 | 187 | jibri: 188 | replicaCount: 3 189 | ``` 190 | 191 | Also, this chart supports JVB scaling based on OCTO Relay feature, which allows 192 | different users to connect to different bridges and still see and hear each 193 | other. This feature requires some additional configuration. Here's an example 194 | based on the Option 3.1 mentioned above: 195 | 196 | ```yaml 197 | jvb: 198 | ## Set JVB instance count: 199 | replicaCount: 3 200 | ## Expose JVB interface port to the outside world 201 | # only on nodes that actually have it: 202 | useHostPort: true 203 | ## Make every JVB pod announce its Node's external 204 | # IP address and nothing more: 205 | useNodeIP: true 206 | 207 | 208 | octo: 209 | ## Enable OCTO support for both JVB and Jicofo: 210 | enabled: true 211 | ``` 212 | 213 | Please note that the JVB scaling feature is currently under-tested and thus 214 | considered *experimental*. Also note that this chart doesn't allow to scale JVB 215 | into multiple zones/regions yet: all JVB pods will be part of the single OCTO 216 | region named `all`. 217 | 218 | ## Adding custom Prosody plugins 219 | 220 | In case you want to extend your Jitsi Meet installation with additional Prosody 221 | features, you can add custom plugins using additional ConfigMap mounts like 222 | this: 223 | 224 | ```yaml 225 | prosody: 226 | extraVolumes: 227 | - name: prosody-modules 228 | configMap: 229 | name: prosody-modules 230 | extraVolumeMounts: 231 | - name: prosody-modules 232 | subPath: mod_measure_client_presence.lua 233 | mountPath: /prosody-plugins-custom/mod_measure_client_presence.lua 234 | ``` 235 | 236 | ## Configuration 237 | 238 | The following table lists the configurable parameters of the jisti-meet chart and their default values. 239 | 240 | Parameter | Description | Default 241 | --- | --- | --- 242 | `imagePullSecrets` | List of names of secrets resources containing private registry credentials | `[]` 243 | `enableAuth` | Enable authentication | `false` 244 | `enableGuests` | Enable guest access | `true` 245 | `websockets.colibri.enabled` | Enable WebSocket support for JVB/Colibri | `false` 246 | `websockets.xmpp.enabled` | Enable WebSocket support for Prosody/XMPP | `false` 247 | `jibri.enabled` | Enable Jibri service | `false` 248 | `jibri.useExternalJibri` | Use external Jibri service, instead of chart-provided one | `false` 249 | `jibri.singleUseMode` | Enable Jibri single-use mode | `false` 250 | `jibri.recording` | Enable local recording service | `true` 251 | `jibri.livestreaming` | Enable livestreaming service | `false` 252 | `jibri.persistence.enabled` | Enable persistent storage for Jibri recordings | `false` 253 | `jibri.persistence.size` | Jibri persistent storage size | `4Gi` 254 | `jibri.persistence.existingClaim` | Use pre-created PVC for Jibri | `(unset)` 255 | `jibri.persistence.storageClassName` | StorageClass to use with Jibri | `(unset)` 256 | `jibri.shm.enabled` | Allocate shared memory to Jibri pod | `false` 257 | `jibri.shm.useHost` | Pass `/dev/shm` from host to Jibri | `false` 258 | `jibri.shm.size` | Jibri shared memory size | `2Gi` 259 | `jibri.replicaCount` | Number of replica of the jibri pods | `1` 260 | `jibri.image.repository` | Name of the image to use for the jibri pods | `jitsi/jibri` 261 | `jibri.extraEnvs` | Map containing additional environment variables for jibri | `{}` 262 | `jibri.livenessProbe` | Map that holds the liveness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A livenessProbe map 263 | `jibri.readinessProbe` | Map that holds the readiness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A readinessProbe map 264 | `jibri.breweryMuc` | Name of the XMPP MUC used by jibri | `jibribrewery` 265 | `jibri.xmpp.user` | Name of the XMPP user used by jibri to authenticate | `jibri` 266 | `jibri.xmpp.password` | Password used by jibri to authenticate on the XMPP service | 10 random chars 267 | `jibri.recorder.user` | Name of the XMPP user used by jibri to record | `recorder` 268 | `jibri.recorder.password` | Password used by jibri to record on the XMPP service | 10 random chars 269 | `jibri.strategy` | Depolyment update strategy and parameters | `(unset)` 270 | `jigasi.enabled` | Enable Jigasi service | `false` 271 | `jigasi.useExternalJigasi` | Use external Jigasi service, instead of chart-provided one | `false` 272 | `jigasi.replicaCount` | Number of replica of the Jigasi pods | `1` 273 | `jigasi.image.repository` | Name of the image to use for the Jigasi pods | `jitsi/jigasi` 274 | `jigasi.breweryMuc` | Name of the XMPP MUC used by Jigasi | `jigasibrewery` 275 | `jigasi.xmpp.user` | Name of the XMPP user used by Jigasi to authenticate | `jigasi` 276 | `jigasi.xmpp.password` | Password used by Jigasi to authenticate on the XMPP service | 10 random chars 277 | `jigasi.livenessProbe` | Map that holds the liveness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A livenessProbe map 278 | `jigasi.readinessProbe` | Map that holds the readiness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A readinessProbe map 279 | `jigasi.extraEnvs` | Map containing additional environment variables for Jigasi | `{}` 280 | `jicofo.replicaCount` | Number of replica of the jicofo pods | `1` 281 | `jicofo.image.repository` | Name of the image to use for the jicofo pods | `jitsi/jicofo` 282 | `jicofo.extraEnvs` | Map containing additional environment variables for jicofo | `{}` 283 | `jicofo.livenessProbe` | Map that holds the liveness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A livenessProbe map 284 | `jicofo.readinessProbe` | Map that holds the readiness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A readinessProbe map 285 | `jicofo.xmpp.password` | Password used by jicofo to authenticate on the XMPP service | 10 random chars 286 | `jicofo.xmpp.componentSecret` | Values of the secret used by jicofo for the xmpp-component | 10 random chars 287 | `jvb.publicIPs` | List of IP addresses for JVB to announce to clients | `(unset)` 288 | `jvb.useNodeIP` | Auto-detect external IP address based on the Node IP | `false` 289 | `jvb.stunServers` | List of STUN/TURN servers to announce to the users | `meet-jit-si-turnrelay.jitsi.net:443` 290 | `jvb.service.enabled` | Boolean to enable os disable the jvb service creation | `false` if `jvb.useHostPort` is `true` otherwise `true` 291 | `jvb.service.type` | Type of the jvb service | `ClusterIP` 292 | `jvb.service.ipFamilyPolicy` | `ipFamilyPolicy` for the service ([docs](https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services)) | `(unset)` 293 | `jvb.service.annotations` | Additional annotations for JVB service (might be useful for managed k8s) | `{}` 294 | `jvb.service.extraPorts` | Additional ports to expose from your JVB pod(s) | `[]` 295 | `jvb.UDPPort` | UDP port used by jvb, also affects port of service, and hostPort | `10000` 296 | `jvb.nodePort` | UDP port used by NodePort service | `(unset)` 297 | `jvb.useHostPort` | Enable HostPort feature (may not work on some CNI plugins) | `false` 298 | `jvb.useHostNetwork` | Connect JVB pod to host network namespace | `false` 299 | `jvb.extraEnvs` | Map containing additional environment variables to jvb | `{}` 300 | `jvb.xmpp.user` | Name of the XMPP user used by jvb to authenticate | `jvb` 301 | `jvb.xmpp.password` | Password used by jvb to authenticate on the XMPP service | 10 random chars 302 | `jvb.livenessProbe` | Map that holds the liveness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A livenessProbe map 303 | `jvb.readinessProbe` | Map that holds the readiness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A readinessProbe map 304 | `jvb.metrics.enabled` | Boolean that control the metrics exporter for jvb. If true the `ServiceMonitor` will also created | `false` 305 | `jvb.metrics.prometheusAnnotations` | Boolean that controls the generation of prometheus annotations, to expose metrics for HPA | `false` 306 | `jvb.metrics.image.repository` | Default image repository for metrics exporter | `docker.io/systemli/prometheus-jitsi-meet-exporter` 307 | `jvb.metrics.image.tag` | Default tag for metrics exporter | `1.1.5` 308 | `jvb.metrics.image.pullPolicy` | ImagePullPolicy for metrics exporter | `IfNotPresent` 309 | `jvb.metrics.serviceMonitor.enabled` | `ServiceMonitor` for Prometheus | `true` 310 | `jvb.metrics.serviceMonitor.selector` | Selector for `ServiceMonitor` | `{ release: prometheus-operator }` 311 | `jvb.metrics.serviceMonitor.interval` | Interval for `ServiceMonitor` | `10s` 312 | `jvb.metrics.serviceMonitor.honorLabels` | Make `ServiceMonitor` honor labels | `false` 313 | `jvb.metrics.resources` | Resources for the metrics container | `{ requests: { cpu: 10m, memory: 16Mi }, limits: { cpu: 20m, memory: 32Mi } }` 314 | `octo.enabled` | Boolean to enable or disable the OCTO mode, for a single region | `false` 315 | `web.httpsEnabled` | Boolean that enabled tls-termination on the web pods. Useful if you expose the UI via a `Loadbalancer` IP instead of an ingress | `false` 316 | `web.httpRedirect` | Boolean that enabled http-to-https redirection. Useful for ingress that don't support this feature (ex: GKE ingress) | `false` 317 | `web.resolverIP` | Override nameserver IP for Web container | (*unset*, use auto-detected nameserver IP) 318 | `web.extraEnvs` | Map containing additional environment variable to web pods | `{}` 319 | `web.livenessProbe` | Map that holds the liveness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A livenessProbe map 320 | `web.readinessProbe` | Map that holds the readiness probe, you can add parameters such as timeout or retries following the Kubernetes spec | A readinessProbe map 321 | `tz` | System Time Zone | `Europe/Amsterdam` 322 | 323 | ## Package 324 | 325 | ```bash 326 | helm package . -d docs 327 | helm repo index docs --url https://jitsi-contrib.github.io/jitsi-helm/ 328 | ``` 329 | -------------------------------------------------------------------------------- /charts/prosody/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /charts/prosody/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: prosody 3 | description: Prosody XMPP server for Jitsi Meet on Kubernetes 4 | 5 | # A chart can be either an 'application' or a 'library' chart. 6 | # 7 | # Application charts are a collection of templates that can be packaged into versioned archives 8 | # to be deployed. 9 | # 10 | # Library charts provide useful utilities or functions for the chart developer. They're included as 11 | # a dependency of application charts to inject those utilities and functions into the rendering 12 | # pipeline. Library charts do not define any templates and therefore cannot be deployed. 13 | type: application 14 | 15 | # This is the chart version. This version number should be incremented each time you make changes 16 | # to the chart and its templates, including the app version. 17 | version: 1.5.1 18 | 19 | # This is the version number of the application being deployed. 20 | appVersion: stable-10590 21 | -------------------------------------------------------------------------------- /charts/prosody/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "prosody.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "prosody.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "prosody.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "prosody.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /charts/prosody/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "prosody.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "prosody.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "prosody.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "prosody.labels" -}} 38 | helm.sh/chart: {{ include "prosody.chart" . }} 39 | {{ include "prosody.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "prosody.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "prosody.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "prosody.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "prosody.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | -------------------------------------------------------------------------------- /charts/prosody/templates/configmaps-cont-init.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "prosody.fullname" . }}-cont-inits 5 | labels: 6 | {{- include "prosody.labels" . | nindent 4 }} 7 | data: 8 | 10-config: | 9 | {{- if .Values.custom.contInit._10_config }} 10 | {{- .Values.custom.contInit._10_config | nindent 4 }} 11 | {{- else }} 12 | # Using prosody /etc/cont-init.d/10-config from container image 13 | {{ end }} 14 | -------------------------------------------------------------------------------- /charts/prosody/templates/configmaps-defaults.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "prosody.fullname" . }}-defaults 5 | labels: 6 | {{- include "prosody.labels" . | nindent 4 }} 7 | data: 8 | prosody.cfg.lua: | 9 | {{- if .Values.custom.defaults._prosody_cfg_lua }} 10 | {{- .Values.custom.defaults._prosody_cfg_lua | nindent 4 }} 11 | {{- else }} 12 | # Using prosody /default/prosody.cfg.lua from container image 13 | {{ end }} 14 | saslauthd.conf: | 15 | {{- if .Values.custom.defaults._saslauthd_conf }} 16 | {{- .Values.custom.defaults._saslauthd_conf | nindent 4 }} 17 | {{- else }} 18 | # Using prosody /default/saslauthd.conf from container image 19 | {{ end }} 20 | jitsi-meet.cfg.lua: | 21 | {{- if .Values.custom.defaults._jitsi_meet_cfg_lua }} 22 | {{- .Values.custom.defaults._jitsi_meet_cfg_lua | nindent 4 }} 23 | {{- else }} 24 | # Using prosody /default/conf.d/jitsi-meet.cfg.lua from container image 25 | {{ end }} 26 | -------------------------------------------------------------------------------- /charts/prosody/templates/envs-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "prosody.fullname" . }} 5 | labels: 6 | {{- include "prosody.labels" . | nindent 4 }} 7 | data: 8 | {{- range $key, $value := .Values.env }} 9 | {{- if not (kindIs "invalid" $value) }} 10 | {{ $key }}: {{ tpl $value $ | quote }} 11 | {{- end }} 12 | {{- end }} 13 | -------------------------------------------------------------------------------- /charts/prosody/templates/envs-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ include "prosody.fullname" . }} 5 | labels: 6 | {{- include "prosody.labels" . | nindent 4 }} 7 | type: Opaque 8 | data: 9 | {{- range $key, $value := .Values.secretEnvs }} 10 | {{- if not (kindIs "invalid" $value) }} 11 | {{ $key }}: {{ tpl $value $ | b64enc }} 12 | {{- end }} 13 | {{- end }} 14 | -------------------------------------------------------------------------------- /charts/prosody/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "prosody.fullname" . -}} 3 | {{- $svcPort := index .Values.service.ports "bosh-insecure" -}} 4 | {{- $kubeVersion := .Capabilities.KubeVersion.GitVersion -}} 5 | {{- if semverCompare ">=1.19-0" $kubeVersion -}} 6 | apiVersion: networking.k8s.io/v1 7 | {{- else if semverCompare ">=1.14-0" $kubeVersion -}} 8 | apiVersion: networking.k8s.io/v1beta1 9 | {{- else -}} 10 | apiVersion: extensions/v1beta1 11 | {{- end }} 12 | kind: Ingress 13 | metadata: 14 | name: {{ $fullName }} 15 | labels: 16 | {{- include "prosody.labels" . | nindent 4 }} 17 | {{- if or .Values.ingress.annotations (and .Values.ingress.ingressClassName (semverCompare "<1.19-0" $kubeVersion)) }} 18 | annotations: 19 | {{- if and .Values.ingress.ingressClassName (semverCompare "<1.19-0" $kubeVersion) }} 20 | kubernetes.io/ingress.class: {{ .Values.ingress.ingressClassName }} 21 | {{- end }} 22 | {{- with .Values.ingress.annotations }} 23 | {{- toYaml . | nindent 4 }} 24 | {{- end }} 25 | {{- end }} 26 | spec: 27 | {{- if and .Values.ingress.ingressClassName (semverCompare ">=1.19-0" $kubeVersion) }} 28 | ingressClassName: {{ .Values.ingress.ingressClassName }} 29 | {{- end }} 30 | {{- if .Values.ingress.tls }} 31 | tls: 32 | {{- range .Values.ingress.tls }} 33 | - hosts: 34 | {{- range .hosts }} 35 | - {{ . | quote }} 36 | {{- end }} 37 | secretName: {{ .secretName }} 38 | {{- end }} 39 | {{- end }} 40 | rules: 41 | {{- range .Values.ingress.hosts }} 42 | - host: {{ .host | quote }} 43 | http: 44 | paths: 45 | {{- range .paths }} 46 | - path: {{ . }} 47 | pathType: Prefix 48 | backend: 49 | {{ if semverCompare ">=1.19-0" $kubeVersion }} 50 | service: 51 | name: {{ $fullName }} 52 | port: 53 | {{ if kindIs "float64" $svcPort }} 54 | number: {{ $svcPort }} 55 | {{ else }} 56 | name: {{ $svcPort }} 57 | {{ end }} 58 | {{ else }} 59 | serviceName: {{ $fullName }} 60 | servicePort: {{ $svcPort }} 61 | {{ end }} 62 | {{- end }} 63 | {{- end }} 64 | {{- end }} 65 | -------------------------------------------------------------------------------- /charts/prosody/templates/metrics-configmap.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.metrics.enabled }} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ include "prosody.fullname" . }}-metrics 6 | labels: 7 | {{- include "prosody.labels" . | nindent 4 }} 8 | data: 9 | otel-collector-config.yaml: | 10 | receivers: 11 | prometheus_simple: 12 | collection_interval: 10s 13 | endpoint: "localhost:5280" 14 | metrics_path: "/metrics" 15 | use_service_account: false 16 | 17 | exporters: 18 | prometheus: 19 | endpoint: "0.0.0.0:8889" 20 | metric_expiration: 180m 21 | 22 | service: 23 | pipelines: 24 | metrics: 25 | receivers: [prometheus_simple] 26 | exporters: [prometheus] 27 | 28 | {{- end }} 29 | -------------------------------------------------------------------------------- /charts/prosody/templates/metrics-servicemonitor.yaml: -------------------------------------------------------------------------------- 1 | {{- if and (.Values.metrics.enabled) (.Values.metrics.serviceMonitor.enabled) }} 2 | apiVersion: monitoring.coreos.com/v1 3 | kind: ServiceMonitor 4 | metadata: 5 | name: {{ include "prosody.fullname" . }} 6 | labels: 7 | {{- include "prosody.labels" . | nindent 4 }} 8 | {{- range $key, $value := .Values.metrics.serviceMonitor.selector }} 9 | {{ $key }}: {{ $value | quote }} 10 | {{- end }} 11 | spec: 12 | endpoints: 13 | - port: metrics 14 | path: /metrics 15 | {{- if .Values.metrics.serviceMonitor.honorLabels }} 16 | honorLabels: {{ .Values.metrics.serviceMonitor.honorLabels }} 17 | {{- end }} 18 | {{- if .Values.metrics.serviceMonitor.interval }} 19 | interval: {{ .Values.metrics.serviceMonitor.interval }} 20 | {{- end }} 21 | selector: 22 | matchLabels: 23 | {{- include "prosody.labels" . | nindent 6 }} 24 | namespaceSelector: 25 | matchNames: 26 | - {{ .Release.Namespace }} 27 | {{- end -}} 28 | -------------------------------------------------------------------------------- /charts/prosody/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "prosody.fullname" . }} 5 | labels: 6 | {{- include "prosody.labels" . | nindent 4 }} 7 | spec: 8 | type: {{ .Values.service.type }} 9 | ports: 10 | - port: {{ index .Values.service.ports "bosh-insecure" }} 11 | protocol: TCP 12 | name: tcp-bosh-insecure 13 | - port: {{ index .Values.service.ports "bosh-secure" }} 14 | protocol: TCP 15 | name: tcp-bosh-secure 16 | - port: {{ index .Values.service.ports "xmpp-component" }} 17 | protocol: TCP 18 | name: tcp-xmpp-component 19 | - port: {{ index .Values.service.ports "xmpp-c2s" }} 20 | protocol: TCP 21 | name: tcp-xmpp-c2 22 | {{- if .Values.service.ports.xmppc2snodePort }} 23 | nodePort: {{ index .Values.service.ports "xmppc2snodePort" }} 24 | {{- end }} 25 | - port: {{ index .Values.service.ports "xmpp-s2s" }} 26 | protocol: TCP 27 | name: tcp-xmpp-s2 28 | {{- if .Values.metrics.enabled }} 29 | - port: 8889 30 | protocol: TCP 31 | name: metrics 32 | {{- end }} 33 | selector: 34 | {{- include "prosody.selectorLabels" . | nindent 4 }} 35 | -------------------------------------------------------------------------------- /charts/prosody/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "prosody.serviceAccountName" . }} 6 | labels: 7 | {{- include "prosody.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- end -}} 13 | -------------------------------------------------------------------------------- /charts/prosody/templates/statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: {{ include "prosody.fullname" . }} 5 | labels: 6 | {{- include "prosody.labels" . | nindent 4 }} 7 | {{- with .Values.annotations }} 8 | annotations: 9 | {{ toYaml . | nindent 4 }} 10 | {{- end }} 11 | spec: 12 | serviceName: "{{ include "prosody.fullname" . }}" 13 | replicas: {{ if .Values.useExternalProsody }}0{{ else }}1{{end}} 14 | selector: 15 | matchLabels: 16 | {{- include "prosody.selectorLabels" . | nindent 6 }} 17 | template: 18 | metadata: 19 | labels: 20 | {{- include "prosody.selectorLabels" . | nindent 8 }} 21 | {{- range $label, $value := mergeOverwrite .Values.global.podLabels .Values.podLabels }} 22 | {{ $label }}: {{ $value }} 23 | {{- end }} 24 | annotations: 25 | si.jit.meet/hash-secret: "{{ toYaml .Values.secretEnvs | sha256sum | trunc 32 }}" 26 | si.jit.meet/hash-configmap: "{{ toYaml (concat .Values.extraEnvs .Values.extraEnvFrom) | sha256sum | trunc 32 }}" 27 | {{- range $annotation, $value := mergeOverwrite .Values.global.podAnnotations .Values.podAnnotations }} 28 | {{ $annotation }}: {{ $value | quote }} 29 | {{- end }} 30 | spec: 31 | {{- with .Values.imagePullSecrets }} 32 | imagePullSecrets: 33 | {{- toYaml . | nindent 8 }} 34 | {{- end }} 35 | serviceAccountName: {{ include "prosody.serviceAccountName" . }} 36 | securityContext: 37 | {{- toYaml .Values.podSecurityContext | nindent 8 }} 38 | containers: 39 | - name: {{ .Chart.Name }} 40 | securityContext: 41 | {{- toYaml .Values.securityContext | nindent 12 }} 42 | image: "{{ .Values.image.repository }}:{{ tpl (default .Chart.AppVersion .Values.image.tag ) . }}" 43 | imagePullPolicy: {{ .Values.image.pullPolicy }} 44 | envFrom: 45 | - configMapRef: 46 | name: {{ include "prosody.fullname" . }} 47 | - secretRef: 48 | name: {{ include "prosody.fullname" . }} 49 | {{- range .Values.extraEnvFrom }} 50 | - {{ tpl (toYaml . ) $ | indent 12 | trim }} 51 | {{- end }} 52 | {{- if .Values.global.releaseSecretsOverride.enabled }} 53 | {{- range .Values.global.releaseSecretsOverride.extraEnvFrom }} 54 | - {{ tpl (toYaml . ) $ | indent 12 | trim }} 55 | {{- end }} 56 | {{- end }} 57 | {{- if or (.Values.extraEnvs) (.Values.metrics.enabled) }} 58 | env: 59 | {{- if .Values.metrics.enabled }} 60 | - name: PROSODY_ENABLE_METRICS 61 | value: "true" 62 | - name: PROSODY_METRICS_ALLOWED_CIDR 63 | value: "{{ .Values.metrics.allowed_cidr }}" 64 | {{- end }} 65 | {{- range .Values.extraEnvs }} 66 | - {{ tpl (toYaml . ) $ | indent 12 | trim }} 67 | {{- end }} 68 | {{- end }} 69 | ports: 70 | - name: xmpp-c2s 71 | containerPort: {{ index .Values.service.ports "xmpp-c2s" }} 72 | protocol: TCP 73 | - name: xmpp-s2s 74 | containerPort: {{ index .Values.service.ports "xmpp-s2s" }} 75 | protocol: TCP 76 | - name: xmpp-component 77 | containerPort: {{ index .Values.service.ports "xmpp-component" }} 78 | protocol: TCP 79 | - name: bosh-insecure 80 | containerPort: {{ index .Values.service.ports "bosh-insecure" }} 81 | protocol: TCP 82 | - name: bosh-secure 83 | containerPort: {{ index .Values.service.ports "bosh-secure" }} 84 | protocol: TCP 85 | {{- with .Values.livenessProbe }} 86 | livenessProbe: 87 | {{- toYaml . | nindent 12 }} 88 | {{- end }} 89 | {{- with .Values.readinessProbe }} 90 | readinessProbe: 91 | {{- toYaml . | nindent 12 }} 92 | {{- end }} 93 | resources: 94 | {{- toYaml .Values.resources | nindent 12 }} 95 | volumeMounts: 96 | - name: config 97 | mountPath: /config 98 | - name: prosody-data 99 | mountPath: {{ .Values.dataDir }} 100 | {{- if .Values.custom.contInit._10_config }} 101 | - name: custom-cont-inits 102 | mountPath: /etc/cont-init.d/10-config 103 | subPath: 10-config 104 | {{- end }} 105 | {{- if .Values.custom.defaults._prosody_cfg_lua }} 106 | - name: custom-defaults 107 | mountPath: /defaults/prosody.cfg.lua 108 | subPath: prosody.cfg.lua 109 | {{- end }} 110 | {{- if .Values.custom.defaults._saslauthd_conf }} 111 | - name: custom-defaults 112 | mountPath: /defaults/saslauthd.conf 113 | subPath: saslauthd.conf 114 | {{- end }} 115 | {{- if .Values.custom.defaults._jitsi_meet_cfg_lua }} 116 | - name: custom-defaults 117 | mountPath: /defaults/conf.d/jitsi-meet.cfg.lua 118 | subPath: jitsi-meet.cfg.lua 119 | {{- end }} 120 | {{- with .Values.extraVolumeMounts }} 121 | {{- toYaml . | nindent 10 }} 122 | {{- end }} 123 | {{- if .Values.metrics.enabled }} 124 | - name: metrics 125 | image: "{{ .Values.metrics.image.repository }}:{{ .Values.metrics.image.tag }}" 126 | imagePullPolicy: "{{ .Values.metrics.image.pullPolicy }}" 127 | args: [--config=/etc/otel-collector-config.yaml] 128 | ports: 129 | - name: metrics 130 | containerPort: 8889 131 | protocol: TCP 132 | volumeMounts: 133 | - name: metrics-config 134 | mountPath: /etc/otel-collector-config.yaml 135 | subPath: otel-collector-config.yaml 136 | readOnly: true 137 | {{- end }} 138 | volumes: 139 | - name: config 140 | emptyDir: {} 141 | - name: custom-cont-inits 142 | configMap: 143 | defaultMode: 493 144 | name: {{ include "prosody.fullname" . }}-cont-inits 145 | items: 146 | - key: 10-config 147 | path: 10-config 148 | - name: custom-defaults 149 | configMap: 150 | name: {{ include "prosody.fullname" . }}-defaults 151 | items: 152 | - key: prosody.cfg.lua 153 | path: prosody.cfg.lua 154 | - key: saslauthd.conf 155 | path: saslauthd.conf 156 | - key: jitsi-meet.cfg.lua 157 | path: jitsi-meet.cfg.lua 158 | - name: prosody-data 159 | {{- if .Values.persistence.enabled }} 160 | persistentVolumeClaim: 161 | claimName: prosody-data 162 | {{- else }} 163 | emptyDir: {} 164 | {{- end }} 165 | {{- if .Values.metrics.enabled }} 166 | - name: metrics-config 167 | configMap: 168 | name: "{{ include "prosody.fullname" . }}-metrics" 169 | defaultMode: 420 170 | {{- end }} 171 | {{- with .Values.extraVolumes }} 172 | {{- toYaml . | nindent 6 }} 173 | {{- end }} 174 | {{- with .Values.nodeSelector }} 175 | nodeSelector: 176 | {{- toYaml . | nindent 8 }} 177 | {{- end }} 178 | {{- with .Values.affinity }} 179 | affinity: 180 | {{- toYaml . | nindent 8 }} 181 | {{- end }} 182 | {{- with .Values.tolerations }} 183 | tolerations: 184 | {{- toYaml . | nindent 8 }} 185 | {{- end }} 186 | {{- if or .Values.persistence.enabled .Values.extraVolumeClaimTemplates }} 187 | volumeClaimTemplates: 188 | - metadata: 189 | name: prosody-data 190 | spec: 191 | accessModes: 192 | - ReadWriteOnce 193 | volumeMode: Filesystem 194 | resources: 195 | requests: 196 | storage: {{ .Values.persistence.size }} 197 | {{- with .Values.persistence.storageClassName }} 198 | storageClassName: {{ . | quote }} 199 | {{- end }} 200 | {{- with .Values.extraVolumeClaimTemplates }} 201 | {{- toYaml . | nindent 2 }} 202 | {{- end }} 203 | {{- end }} 204 | -------------------------------------------------------------------------------- /charts/prosody/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "prosody.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "prosody.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "prosody.fullname" . }}:{{ index .Values.service.ports "bosh-insecure" }}/http-bind'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /charts/prosody/values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for prosody. 2 | # This is a YAML-formatted file. 3 | # Declare variables to be passed into your templates. 4 | 5 | image: 6 | repository: nginx 7 | pullPolicy: IfNotPresent 8 | 9 | imagePullSecrets: [] 10 | nameOverride: "" 11 | fullnameOverride: "" 12 | 13 | domain: 14 | 15 | dataDir: /config/data 16 | serviceAccount: 17 | # Specifies whether a service account should be created 18 | create: true 19 | # Annotations to add to the service account 20 | annotations: {} 21 | # The name of the service account to use. 22 | # If not set and create is true, a name is generated using the fullname template 23 | name: 24 | 25 | podLabels: {} 26 | podAnnotations: {} 27 | podSecurityContext: {} 28 | # fsGroup: 2000 29 | 30 | securityContext: {} 31 | # capabilities: 32 | # drop: 33 | # - ALL 34 | # readOnlyRootFilesystem: true 35 | # runAsNonRoot: true 36 | # runAsUser: 1000 37 | 38 | service: 39 | type: ClusterIP 40 | ports: 41 | bosh-insecure: 5280 42 | bosh-secure: 5281 43 | xmpp-c2s: 5222 44 | xmpp-s2s: 5269 45 | xmpp-component: 5347 46 | 47 | ingress: 48 | enabled: false 49 | # ingressClassName: "nginx-ingress-0" 50 | annotations: {} 51 | # kubernetes.io/tls-acme: "true" 52 | hosts: 53 | - host: chart-example.local 54 | paths: [] 55 | tls: [] 56 | # - secretName: chart-example-tls 57 | # hosts: 58 | # - chart-example.local 59 | 60 | resources: {} 61 | # We usually recommend not to specify default resources and to leave this as a conscious 62 | # choice for the user. This also increases chances charts run on environments with little 63 | # resources, such as Minikube. If you do want to specify resources, uncomment the following 64 | # lines, adjust them as necessary, and remove the curly braces after 'resources:'. 65 | # limits: 66 | # cpu: 100m 67 | # memory: 128Mi 68 | # requests: 69 | # cpu: 100m 70 | # memory: 128Mi 71 | 72 | livenessProbe: 73 | httpGet: 74 | path: /http-bind 75 | port: bosh-insecure 76 | readinessProbe: 77 | httpGet: 78 | path: /http-bind 79 | port: bosh-insecure 80 | 81 | persistence: 82 | enabled: true 83 | size: 3G 84 | storageClassName: 85 | 86 | nodeSelector: {} 87 | 88 | tolerations: [] 89 | 90 | affinity: {} 91 | 92 | extraEnvs: [] 93 | extraEnvFrom: [] 94 | secretEnvs: {} 95 | 96 | extraVolumes: [] 97 | # - name: prosody-modules 98 | # configMap: 99 | # name: prosody-modules 100 | 101 | extraVolumeMounts: [] 102 | # - name: prosody-modules 103 | # subPath: mod_measure_client_presence.lua 104 | # mountPath: /prosody-plugins-custom/mod_measure_client_presence.lua 105 | 106 | metrics: 107 | enabled: false 108 | allowed_cidr: "0.0.0.0/0" # change to cluster pod ip cidr 109 | image: 110 | repository: otel/opentelemetry-collector-contrib 111 | tag: "0.76.1" 112 | pullPolicy: IfNotPresent 113 | serviceMonitor: 114 | enabled: true 115 | selector: 116 | release: prometheus-operator 117 | interval: 10s 118 | # honorLabels: false 119 | -------------------------------------------------------------------------------- /docs/artifacthub-repo.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # Artifact Hub repository metadata file 3 | # 4 | repositoryID: ce7f4283-c105-4e67-9d06-91331a59e525 5 | owners: 6 | - name: spijet 7 | email: sp1j3t@gmail.com 8 | -------------------------------------------------------------------------------- /docs/index.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | entries: 3 | jitsi-meet: 4 | - annotations: 5 | artifacthub.io/category: streaming-messaging 6 | artifacthub.io/links: | 7 | - name: Jitsi Meet 8 | url: https://jitsi.org/jitsi-meet/ 9 | - name: Jitsi Meet Documentation 10 | url: https://jitsi.github.io/handbook/docs/intro/ 11 | - name: Jitsi-Helm GitHub 12 | url: https://github.com/jitsi-contrib/jitsi-helm 13 | apiVersion: v2 14 | appVersion: stable-10314 15 | created: "2025-06-24T01:38:25.368048+08:00" 16 | dependencies: 17 | - condition: prosody.enabled 18 | name: prosody 19 | repository: "" 20 | version: 1.5.1 21 | description: Jitsi Meet packaged for Kubernetes 22 | digest: f9d453653095bd7db6f7185e7d1df069daffb526e542ebdbe7a0b2d2a3b3844d 23 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 24 | name: jitsi-meet 25 | type: application 26 | urls: 27 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.5.1.tgz 28 | version: 1.5.1 29 | - annotations: 30 | artifacthub.io/category: streaming-messaging 31 | artifacthub.io/links: | 32 | - name: Jitsi Meet 33 | url: https://jitsi.org/jitsi-meet/ 34 | - name: Jitsi Meet Documentation 35 | url: https://jitsi.github.io/handbook/docs/intro/ 36 | - name: Jitsi-Helm GitHub 37 | url: https://github.com/jitsi-contrib/jitsi-helm 38 | apiVersion: v2 39 | appVersion: stable-10314 40 | created: "2025-06-24T01:38:25.367132+08:00" 41 | dependencies: 42 | - condition: prosody.enabled 43 | name: prosody 44 | repository: "" 45 | version: 1.5.0 46 | description: Jitsi Meet packaged for Kubernetes 47 | digest: 397235f63a3f7d590347c61f91b417867016c56282e5da87c4f8056fb373744d 48 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 49 | name: jitsi-meet 50 | type: application 51 | urls: 52 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.5.0.tgz 53 | version: 1.5.0 54 | - annotations: 55 | artifacthub.io/category: streaming-messaging 56 | artifacthub.io/links: | 57 | - name: Jitsi Meet 58 | url: https://jitsi.org/jitsi-meet/ 59 | - name: Jitsi Meet Documentation 60 | url: https://jitsi.github.io/handbook/docs/intro/ 61 | - name: Jitsi-Helm GitHub 62 | url: https://github.com/jitsi-contrib/jitsi-helm 63 | apiVersion: v2 64 | appVersion: stable-9646 65 | created: "2024-08-30T02:12:13.120611+03:00" 66 | dependencies: 67 | - condition: prosody.enabled 68 | name: prosody 69 | repository: "" 70 | version: 1.4.1 71 | description: Jitsi Meet packaged for Kubernetes 72 | digest: 25672372ea920f1515564499020b35d3985fd147807145563c87aaf08ab0eeed 73 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 74 | name: jitsi-meet 75 | type: application 76 | urls: 77 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.4.1.tgz 78 | version: 1.4.1 79 | - annotations: 80 | artifacthub.io/category: streaming-messaging 81 | artifacthub.io/links: | 82 | - name: Jitsi Meet 83 | url: https://jitsi.org/jitsi-meet/ 84 | - name: Jitsi Meet Documentation 85 | url: https://jitsi.github.io/handbook/docs/intro/ 86 | - name: Jitsi-Helm GitHub 87 | url: https://github.com/jitsi-contrib/jitsi-helm 88 | apiVersion: v2 89 | appVersion: stable-9646 90 | created: "2024-08-07T23:58:26.67718+08:00" 91 | dependencies: 92 | - condition: prosody.enabled 93 | name: prosody 94 | repository: "" 95 | version: 1.4.0 96 | description: Jitsi Meet packaged for Kubernetes 97 | digest: 4a93803cd7847df62f896f5ac17b66dbee55340698b3be4add8a69ec793da23a 98 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 99 | name: jitsi-meet 100 | type: application 101 | urls: 102 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.4.0.tgz 103 | version: 1.4.0 104 | - apiVersion: v2 105 | appVersion: stable-9111 106 | created: "2023-11-24T14:08:03.813666+02:00" 107 | dependencies: 108 | - condition: prosody.enabled 109 | name: prosody 110 | repository: "" 111 | version: 1.3.8 112 | description: Jitsi Meet packaged for Kubernetes 113 | digest: a00fa62df02f2cdec64dfeaa376e3ba84caaf0f4a7fa49166bbc3894232d603d 114 | name: jitsi-meet 115 | type: application 116 | urls: 117 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.8.tgz 118 | version: 1.3.8 119 | - apiVersion: v2 120 | appVersion: stable-8719 121 | created: "2023-08-31T17:15:20.93019+03:00" 122 | dependencies: 123 | - condition: prosody.enabled 124 | name: prosody 125 | repository: "" 126 | version: 1.3.7 127 | description: Jitsi Meet packaged for Kubernetes 128 | digest: 2b31e905ca9c2d76528baec663d617d3873683eef54ce9f466ae25f52977e7a8 129 | name: jitsi-meet 130 | type: application 131 | urls: 132 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.7.tgz 133 | version: 1.3.7 134 | - apiVersion: v2 135 | appVersion: stable-8719 136 | created: "2023-08-31T17:15:20.929142+03:00" 137 | dependencies: 138 | - condition: prosody.enabled 139 | name: prosody 140 | repository: "" 141 | version: 1.3.6 142 | description: Jitsi Meet packaged for Kubernetes 143 | digest: 82c2e9bdf140e8ff3c9ab02597972c14f01e8ad2040ca5121e0df1c0f0236ed8 144 | name: jitsi-meet 145 | type: application 146 | urls: 147 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.6.tgz 148 | version: 1.3.6 149 | - apiVersion: v2 150 | appVersion: stable-8319 151 | created: "2023-04-11T01:14:33.814687+03:00" 152 | dependencies: 153 | - condition: prosody.enabled 154 | name: prosody 155 | repository: "" 156 | version: 1.3.5 157 | description: Jitsi Meet packaged for Kubernetes 158 | digest: 17943b174bfa281e1537d4a705b3ed1625a3585c58554560585b1b71fedd7633 159 | name: jitsi-meet 160 | type: application 161 | urls: 162 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.5.tgz 163 | version: 1.3.5 164 | - apiVersion: v2 165 | appVersion: stable-8319 166 | created: "2023-04-11T00:56:43.936208+03:00" 167 | dependencies: 168 | - condition: prosody.enabled 169 | name: prosody 170 | repository: "" 171 | version: 1.3.4 172 | description: Jitsi Meet packaged for Kubernetes 173 | digest: 2bd78e4dd461229baeddef8c400ad459080e7796c73f1b5be015f512b56a11b3 174 | name: jitsi-meet 175 | type: application 176 | urls: 177 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.4.tgz 178 | version: 1.3.4 179 | - apiVersion: v2 180 | appVersion: stable-8252 181 | created: "2023-02-09T22:59:17.764714+07:00" 182 | dependencies: 183 | - condition: prosody.enabled 184 | name: prosody 185 | repository: "" 186 | version: 1.3.3 187 | description: Jitsi Meet packaged for Kubernetes 188 | digest: e407ce375841dab2103ebd97c9ad30687a808e1fff2eafaa86f82be4f503d101 189 | name: jitsi-meet 190 | type: application 191 | urls: 192 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.3.tgz 193 | version: 1.3.3 194 | - apiVersion: v2 195 | appVersion: stable-8218 196 | created: "2023-01-29T00:55:01.440345+07:00" 197 | dependencies: 198 | - condition: prosody.enabled 199 | name: prosody 200 | repository: "" 201 | version: 1.3.2 202 | description: Jitsi Meet packaged for Kubernetes 203 | digest: a69af808655bd8c5ffbcd4a80ec07d1638c84e80189c6fdeb2a68c7c4f49e423 204 | name: jitsi-meet 205 | type: application 206 | urls: 207 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.2.tgz 208 | version: 1.3.2 209 | - apiVersion: v2 210 | appVersion: stable-8044 211 | created: "2022-12-10T00:14:42.379429+08:00" 212 | dependencies: 213 | - condition: prosody.enabled 214 | name: prosody 215 | repository: "" 216 | version: 1.3.1 217 | description: Jitsi Meet packaged for Kubernetes 218 | digest: a2cff445d232f9c7ad16404b9383ba30a1aa3b3123f7d35f20508f62089a2c2a 219 | name: jitsi-meet 220 | type: application 221 | urls: 222 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.1.tgz 223 | version: 1.3.1 224 | - apiVersion: v2 225 | appVersion: stable-8044 226 | created: "2022-12-10T00:14:42.378321+08:00" 227 | dependencies: 228 | - condition: prosody.enabled 229 | name: prosody 230 | repository: "" 231 | version: 1.3.0 232 | description: Jitsi Meet packaged for Kubernetes 233 | digest: 49f915fe86c28425c943d3bd91cc11e2a6aa98bc86e963d4e16d814640666b99 234 | name: jitsi-meet 235 | type: application 236 | urls: 237 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.3.0.tgz 238 | version: 1.3.0 239 | - apiVersion: v2 240 | appVersion: stable-7830 241 | created: "2022-12-10T00:14:42.377019+08:00" 242 | dependencies: 243 | - condition: prosody.enabled 244 | name: prosody 245 | repository: "" 246 | version: 1.2.3 247 | description: Jitsi Meet packaged for Kubernetes 248 | digest: d617eacff83967979e7b0cc05fb827beb8bef6d0a9a9290c4fff2fe167b08997 249 | name: jitsi-meet 250 | type: application 251 | urls: 252 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.2.3.tgz 253 | version: 1.2.3 254 | - apiVersion: v2 255 | appVersion: stable-6865 256 | created: "2022-12-10T00:14:42.375699+08:00" 257 | dependencies: 258 | - condition: prosody.enabled 259 | name: prosody 260 | repository: "" 261 | version: 1.2.2 262 | description: A Helm chart for Kubernetes 263 | digest: 18406c945a2086787be543d6036a46f91fb7c1a5aca7b75f2e9eb6d2447858fb 264 | name: jitsi-meet 265 | type: application 266 | urls: 267 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.2.2.tgz 268 | version: 1.2.2 269 | - apiVersion: v2 270 | appVersion: stable-6865 271 | created: "2022-12-10T00:14:42.374733+08:00" 272 | dependencies: 273 | - condition: prosody.enabled 274 | name: prosody 275 | repository: "" 276 | version: 1.2.1 277 | description: A Helm chart for Kubernetes 278 | digest: cdd81bdc042771e36060dca0474920df80f7b87c61c09a20b002988bd42eb8a6 279 | name: jitsi-meet 280 | type: application 281 | urls: 282 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.2.1.tgz 283 | version: 1.2.1 284 | - apiVersion: v2 285 | appVersion: stable-6865 286 | created: "2022-12-10T00:14:42.373314+08:00" 287 | dependencies: 288 | - condition: prosody.enabled 289 | name: prosody 290 | repository: "" 291 | version: 1.2.0 292 | description: A Helm chart for Kubernetes 293 | digest: d27498c191d77de8bc53d077e664d2a89ac69224ab31956a80e7eebdeed7d05c 294 | name: jitsi-meet 295 | type: application 296 | urls: 297 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.2.0.tgz 298 | version: 1.2.0 299 | - apiVersion: v2 300 | appVersion: stable-6726 301 | created: "2022-12-10T00:14:42.372332+08:00" 302 | dependencies: 303 | - condition: prosody.enabled 304 | name: prosody 305 | repository: "" 306 | version: 1.1.0 307 | description: A Helm chart for Kubernetes 308 | digest: f6344a12a4964ae731a9048cf5f451a99795268e0dffafb293659b34620ab1f6 309 | name: jitsi-meet 310 | type: application 311 | urls: 312 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.1.0.tgz 313 | version: 1.1.0 314 | - apiVersion: v2 315 | appVersion: stable-6433 316 | created: "2022-12-10T00:14:42.371522+08:00" 317 | dependencies: 318 | - condition: prosody.enabled 319 | name: prosody 320 | repository: "" 321 | version: 1.0.0 322 | description: A Helm chart for Kubernetes 323 | digest: ed6a5a05e23d4d951e1c4e18ce5b08564d63ece5aff3055cc0fbc7345d6c42cb 324 | name: jitsi-meet 325 | type: application 326 | urls: 327 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-1.0.0.tgz 328 | version: 1.0.0 329 | - apiVersion: v2 330 | appVersion: stable-5963 331 | created: "2022-12-10T00:14:42.370629+08:00" 332 | dependencies: 333 | - condition: prosody.enabled 334 | name: prosody 335 | repository: "" 336 | version: 0.2.1 337 | description: A Helm chart for Kubernetes 338 | digest: a0092b31326bf41597fceb664e3fc669340054f4338a64bdc576f5ef8c24d9b8 339 | name: jitsi-meet 340 | type: application 341 | urls: 342 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-0.2.1.tgz 343 | version: 0.2.1 344 | - apiVersion: v2 345 | appVersion: stable-5963 346 | created: "2022-12-10T00:14:42.369761+08:00" 347 | dependencies: 348 | - condition: prosody.enabled 349 | name: prosody 350 | repository: "" 351 | version: 0.2.0 352 | description: A Helm chart for Kubernetes 353 | digest: 8234cdb12cd20c9e9c1abe8c7d3920549bffb65fbe63b35af43e1cddbdaeeaca 354 | name: jitsi-meet 355 | type: application 356 | urls: 357 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-0.2.0.tgz 358 | version: 0.2.0 359 | - apiVersion: v2 360 | appVersion: stable-5390-3 361 | created: "2022-12-10T00:14:42.368949+08:00" 362 | dependencies: 363 | - condition: prosody.enabled 364 | name: prosody 365 | repository: "" 366 | version: '*' 367 | description: A Helm chart for Kubernetes 368 | digest: f50c08198000e2b25b1d21fd926a7392bf3027e3e5bb984c9501744389aa90a8 369 | name: jitsi-meet 370 | type: application 371 | urls: 372 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-0.1.4.tgz 373 | version: 0.1.4 374 | - apiVersion: v2 375 | appVersion: stable-5390-3 376 | created: "2022-12-10T00:14:42.367927+08:00" 377 | dependencies: 378 | - condition: prosody.enabled 379 | name: prosody 380 | repository: "" 381 | version: '*' 382 | description: A Helm chart for Kubernetes 383 | digest: f5d23258f3021f42029514be9206910864123ecca5bbcc9505b0cc100e7bd5e0 384 | name: jitsi-meet 385 | type: application 386 | urls: 387 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-0.1.3.tgz 388 | version: 0.1.3 389 | - apiVersion: v2 390 | appVersion: stable-5390-3 391 | created: "2022-12-10T00:14:42.366935+08:00" 392 | dependencies: 393 | - condition: prosody.enabled 394 | name: prosody 395 | repository: "" 396 | version: '*' 397 | description: A Helm chart for Kubernetes 398 | digest: 3579cde89bd94faf4d94efd94524c64bebf95cfc123446dc0c535bf8e23b70fe 399 | name: jitsi-meet 400 | type: application 401 | urls: 402 | - https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet-0.1.2.tgz 403 | version: 0.1.2 404 | generated: "2025-06-24T01:38:25.346162+08:00" 405 | -------------------------------------------------------------------------------- /docs/jitsi-meet-0.1.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-0.1.2.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-0.1.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-0.1.3.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-0.1.4.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-0.1.4.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-0.2.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-0.2.0.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-0.2.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-0.2.1.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.0.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.0.0.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.1.0.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.2.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.2.0.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.2.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.2.1.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.2.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.2.2.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.2.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.2.3.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.0.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.1.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.2.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.2.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.3.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.3.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.4.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.4.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.5.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.5.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.5.tgz.prov: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA256 3 | 4 | apiVersion: v2 5 | appVersion: stable-8319 6 | dependencies: 7 | - - condition: prosody.enabled 8 | name: prosody 9 | repository: '' 10 | version: 1.3.5 11 | description: Jitsi Meet packaged for Kubernetes 12 | name: jitsi-meet 13 | type: application 14 | version: 1.3.5 15 | 16 | ... 17 | files: 18 | jitsi-meet-1.3.5.tgz: sha256:17943b174bfa281e1537d4a705b3ed1625a3585c58554560585b1b71fedd7633 19 | -----BEGIN PGP SIGNATURE----- 20 | 21 | iQEzBAEBCAAdFiEE6FyjGTe01aUn5/f0cLTh0l1K2EEFAmQ0ig0ACgkQcLTh0l1K 22 | 2EE8ZAgAiuvvhrUFwkGSuESGoXYWghrujDK9L1N5q0P1OCOfjZa6JYZwVo5498lW 23 | t4LLervxlpF0X/0Gyg4kyMHlzGSTNsqWc1M+fLs5UEmfi6JZiPHaGpkQWNuduWVb 24 | Q4i7hJ0pyvTeay4tBoRhoCPX2zsjSIR/3FkTII4xs/CWlFmF2qVIoCJQCCpvgd4k 25 | pS68GZ2U+haQjhsTe5h2d0Es4taCg2oxJZQMCiOjgmdtC3BOW2SeUa48+1IlSAnB 26 | ml2GjYMxBF+S+AgHs8W752+htnLe97q9xq7lb6v3JDlnncLy4MHoqpGeG/vzqRzB 27 | XNg8x/SUfRDLB4FCj0Eq+Si7Ndq3Vg== 28 | =r2hz 29 | -----END PGP SIGNATURE----- 30 | -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.6.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.6.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.6.tgz.prov: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA512 3 | 4 | apiVersion: v2 5 | appVersion: stable-8719 6 | dependencies: 7 | - - condition: prosody.enabled 8 | name: prosody 9 | repository: "" 10 | version: 1.3.6 11 | description: Jitsi Meet packaged for Kubernetes 12 | name: jitsi-meet 13 | type: application 14 | version: 1.3.6 15 | 16 | ... 17 | files: 18 | jitsi-meet-1.3.6.tgz: sha256:82c2e9bdf140e8ff3c9ab02597972c14f01e8ad2040ca5121e0df1c0f0236ed8 19 | -----BEGIN PGP SIGNATURE----- 20 | 21 | wsBcBAEBCgAQBQJknKtuCRBQgmc+jUqS8AAAu2MIABYIpi0+UeQqxdvPFajHoKk1 22 | drGwe0qbfgyoI8Avzpmlq6xDxlp3sNXnfMrp1TuFcyXOznMOXHiQK5eoYJXXgDin 23 | xvzRC0I1IdlPwz+Vn02NJNB5HUunH3YN9pPNSj3L37Olz/Py6pH9S29fHQ8n06N7 24 | 5IfqL4yhhvB+9qKn0HK8vndN5XMVDWSnd1wS8T4vjxz4Q5kYvAJKm3R6U5A9ds1F 25 | tyw6/xgnWzTouH3gHIQ3/gwrNIWLXj8F4Y9eCllxwkBnlsWyXU29fgE2ShkACX50 26 | SJyldDNTbopxvUKGuY0QmuXaz7WNElv+439yg5N2Wd8q66guoe/TsveoGnV/X7A= 27 | =Wdmv 28 | -----END PGP SIGNATURE----- -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.7.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.7.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.7.tgz.prov: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA512 3 | 4 | apiVersion: v2 5 | appVersion: stable-8719 6 | dependencies: 7 | - - condition: prosody.enabled 8 | name: prosody 9 | repository: "" 10 | version: 1.3.7 11 | description: Jitsi Meet packaged for Kubernetes 12 | name: jitsi-meet 13 | type: application 14 | version: 1.3.7 15 | 16 | ... 17 | files: 18 | jitsi-meet-1.3.7.tgz: sha256:2b31e905ca9c2d76528baec663d617d3873683eef54ce9f466ae25f52977e7a8 19 | -----BEGIN PGP SIGNATURE----- 20 | 21 | wsBcBAEBCgAQBQJk8KB0CRBQgmc+jUqS8AAAHMsIAEfvqw1zZV6K2JQic8uTdIb+ 22 | 9oVFWOSpAs9/MuEcnkDW2sI/uLVYqyD2OwFur6IAM1hgLLY+b0sH38iFlHqiOiUo 23 | 0icsCG20NbX0AzNqbBfej2bipp8YbROggxqARb9V8NvJ7uPEux+T+5B/NIOdfPEC 24 | DSreCA+X1pDQDlrcTWzvmC6dWi60ePX5P39SQ993TY8SD3RVgIyU/r8VDo+gBCkJ 25 | TQonXd9VJWOfHGaMWmnmWkz6g1UuiHCrAuwLm/R6guamp8fTJVXr0QiV71w678HY 26 | 7PvW67yUW5Z0J6C8UT9LQ0uQhVTytU7aRAMO90x/djlcLFD8zHua2QTNiPHMQj8= 27 | =9rRJ 28 | -----END PGP SIGNATURE----- -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.8.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.3.8.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.3.8.tgz.prov: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA512 3 | 4 | apiVersion: v2 5 | appVersion: stable-9111 6 | dependencies: 7 | - - condition: prosody.enabled 8 | name: prosody 9 | repository: "" 10 | version: 1.3.8 11 | description: Jitsi Meet packaged for Kubernetes 12 | name: jitsi-meet 13 | type: application 14 | version: 1.3.8 15 | 16 | ... 17 | files: 18 | jitsi-meet-1.3.8.tgz: sha256:a00fa62df02f2cdec64dfeaa376e3ba84caaf0f4a7fa49166bbc3894232d603d 19 | -----BEGIN PGP SIGNATURE----- 20 | 21 | wsBcBAEBCgAQBQJlYJIaCRBQgmc+jUqS8AAAK5IIAEys9CjIels0J9QuL8WuzufV 22 | lEE5Sy0kZhR/NzEusQUoBXk+RN1xc9Nd08tF+ai8icUNbe4eqDDtBJoNEOn9MDeE 23 | 0VN3QzEdxzvISFIXMrDArSw7U1LyN6l1q+JiqctKy6A5QwvmIQ/B+10L2i9R6+ET 24 | O4zAyFtZH05+iFG+oBt/0HcPsBpK/KGux028BJU30BhfLm3KwI8F+rGymYdgH4ee 25 | t/C+RF9opL37mpDzYklYRxJvHBZ20cHpP4n4h+4N+S1jQHAQcgHjIOJLygzwSnBW 26 | in889HDS/hIkeBhmuyRLjfDrb6ZK1ElZy0Efz6TKejtHBo67v0b0xxgUJvK16tA= 27 | =1Qms 28 | -----END PGP SIGNATURE----- -------------------------------------------------------------------------------- /docs/jitsi-meet-1.4.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.4.0.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.4.0.tgz.prov: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA512 3 | 4 | annotations: 5 | artifacthub.io/category: streaming-messaging 6 | artifacthub.io/links: | 7 | - name: Jitsi Meet 8 | url: https://jitsi.org/jitsi-meet/ 9 | - name: Jitsi Meet Documentation 10 | url: https://jitsi.github.io/handbook/docs/intro/ 11 | - name: Jitsi-Helm GitHub 12 | url: https://github.com/jitsi-contrib/jitsi-helm 13 | apiVersion: v2 14 | appVersion: stable-9646 15 | dependencies: 16 | - - condition: prosody.enabled 17 | name: prosody 18 | repository: "" 19 | version: 1.4.0 20 | description: Jitsi Meet packaged for Kubernetes 21 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 22 | name: jitsi-meet 23 | type: application 24 | version: 1.4.0 25 | 26 | ... 27 | files: 28 | jitsi-meet-1.4.0.tgz: sha256:4a93803cd7847df62f896f5ac17b66dbee55340698b3be4add8a69ec793da23a 29 | -----BEGIN PGP SIGNATURE----- 30 | 31 | wsBcBAEBCgAQBQJms5keCRBQgmc+jUqS8AAAbj4IAMsaBWq9o36DgvUd/29rLVe8 32 | +NOR/gG/Yha5fyAq1GbHzxR8EcMDsJ5m3KlejjV+KPkWTBp/8IRBvWH2/M73b2+C 33 | 98FwTYw699SESsrztvrVWPW91Kj+Qg1euQplho2H52rPvF50rzhlnve3r2nVEh/p 34 | +nSNtjEc9AE/TySxQARIO+JBvEvZ9X40HSdqjHL1bPV5YN4pcX8vzTHcnjUzoQmd 35 | w/e/mBXDaqN8OztmyCZvDGxf5zKcT99yuES0DPLQMtwUL4D05sG6PyuupYLaLtnb 36 | X+AG92f58TCx6mPo+FlG/RvSgl/oF+822cb+mfNKn9CueIZ/Jsjaj/QJIcbMZCU= 37 | =Uj9S 38 | -----END PGP SIGNATURE----- -------------------------------------------------------------------------------- /docs/jitsi-meet-1.4.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.4.1.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.4.1.tgz.prov: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA512 3 | 4 | annotations: 5 | artifacthub.io/category: streaming-messaging 6 | artifacthub.io/links: | 7 | - name: Jitsi Meet 8 | url: https://jitsi.org/jitsi-meet/ 9 | - name: Jitsi Meet Documentation 10 | url: https://jitsi.github.io/handbook/docs/intro/ 11 | - name: Jitsi-Helm GitHub 12 | url: https://github.com/jitsi-contrib/jitsi-helm 13 | apiVersion: v2 14 | appVersion: stable-9646 15 | dependencies: 16 | - - condition: prosody.enabled 17 | name: prosody 18 | repository: "" 19 | version: 1.4.1 20 | description: Jitsi Meet packaged for Kubernetes 21 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 22 | name: jitsi-meet 23 | type: application 24 | version: 1.4.1 25 | 26 | ... 27 | files: 28 | jitsi-meet-1.4.1.tgz: sha256:25672372ea920f1515564499020b35d3985fd147807145563c87aaf08ab0eeed 29 | -----BEGIN PGP SIGNATURE----- 30 | 31 | wsBcBAEBCgAQBQJm0QBICRBQgmc+jUqS8AAAuqAIAHnhXAFZ5DnmFmMht5dLBJV/ 32 | oVkm0hHp9DMMbz+sUcMjKH4s5U8vIMfnokQPMiqpLeqW3CLjWdSl2pwL8/R9B26C 33 | KAa4WAEcjEP7HNdFlcLR3y3XwcRTOoLEY/QboWXG+a9v7mU5ebcsYsUmfu9WF87g 34 | oUWssqNS5bpI28m2iv8hKDmORSGDhmT92kVKp18P0eefH7z1QSZ6VsweJxNKDi+a 35 | 1gJTnKcx6tZh0jh7msBQRFkz4O7Y0MNJpBa0aQxPwKYhpgeCteCxUCd66Ik03sKW 36 | RKmYdvuOZRlkF4y9tFZMcFThh2zUVIT9n4Yr63pUxM7Fu0aCBe+NOck2L70tw18= 37 | =2HpZ 38 | -----END PGP SIGNATURE----- -------------------------------------------------------------------------------- /docs/jitsi-meet-1.5.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.5.0.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.5.0.tgz.prov: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA512 3 | 4 | annotations: 5 | artifacthub.io/category: streaming-messaging 6 | artifacthub.io/links: | 7 | - name: Jitsi Meet 8 | url: https://jitsi.org/jitsi-meet/ 9 | - name: Jitsi Meet Documentation 10 | url: https://jitsi.github.io/handbook/docs/intro/ 11 | - name: Jitsi-Helm GitHub 12 | url: https://github.com/jitsi-contrib/jitsi-helm 13 | apiVersion: v2 14 | appVersion: stable-10314 15 | dependencies: 16 | - - condition: prosody.enabled 17 | name: prosody 18 | repository: "" 19 | version: 1.5.0 20 | description: Jitsi Meet packaged for Kubernetes 21 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 22 | name: jitsi-meet 23 | type: application 24 | version: 1.5.0 25 | 26 | ... 27 | files: 28 | jitsi-meet-1.5.0.tgz: sha256:397235f63a3f7d590347c61f91b417867016c56282e5da87c4f8056fb373744d 29 | -----BEGIN PGP SIGNATURE----- 30 | 31 | wsBcBAEBCgAQBQJoWOiXCRBQgmc+jUqS8AAAVZ4IAKLNWIE5ChuF4aP+b7CY4ACi 32 | vLRus4mv7WcYURo6Bj0XjUxjXURDkF1GsxkAsBqCRBAJDxTIkkvMhRgnVdz0Jaeg 33 | d/Z7/p2lZ/ebMnCBh0T5hwkD/4eaE61XVtCEI7d3+9CF+PBjCAgCYl/MYxgu0wv4 34 | Uf+feVRUCUgl4Q5XcvWJIukdauLtmTAeyz/byhpv0Vdh0RWmQ1vkzCX+GJrjXOF7 35 | 6l4mo7G7dusLiNosOatTDqVuSjXhxPzUMI/eq6lLNuRuCJo2ZR6NO25mcRjSJyjL 36 | pP66WAmNktfsU5BwUzpmUFQLMT1RzbU8VTr+TMR6kMcY+7BBY0CDw+zV9N4KLno= 37 | =7JuW 38 | -----END PGP SIGNATURE----- -------------------------------------------------------------------------------- /docs/jitsi-meet-1.5.1.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet-1.5.1.tgz -------------------------------------------------------------------------------- /docs/jitsi-meet-1.5.1.tgz.prov: -------------------------------------------------------------------------------- 1 | -----BEGIN PGP SIGNED MESSAGE----- 2 | Hash: SHA512 3 | 4 | annotations: 5 | artifacthub.io/category: streaming-messaging 6 | artifacthub.io/links: | 7 | - name: Jitsi Meet 8 | url: https://jitsi.org/jitsi-meet/ 9 | - name: Jitsi Meet Documentation 10 | url: https://jitsi.github.io/handbook/docs/intro/ 11 | - name: Jitsi-Helm GitHub 12 | url: https://github.com/jitsi-contrib/jitsi-helm 13 | apiVersion: v2 14 | appVersion: stable-10314 15 | dependencies: 16 | - - condition: prosody.enabled 17 | name: prosody 18 | repository: "" 19 | version: 1.5.1 20 | description: Jitsi Meet packaged for Kubernetes 21 | icon: https://jitsi-contrib.github.io/jitsi-helm/jitsi-meet.png 22 | name: jitsi-meet 23 | type: application 24 | version: 1.5.1 25 | 26 | ... 27 | files: 28 | jitsi-meet-1.5.1.tgz: sha256:f9d453653095bd7db6f7185e7d1df069daffb526e542ebdbe7a0b2d2a3b3844d 29 | -----BEGIN PGP SIGNATURE----- 30 | 31 | wsBcBAEBCgAQBQJoWZEMCRBQgmc+jUqS8AAApbcIACCvylKgNMn3BAbXj7IT0eg5 32 | JaG/z5gcyLZCC8LZ916Ck3KmOqUeVL7yG8LXZ2qaGZNt+y3ZLbEPXRk055w8a5vD 33 | y8eAa2Bg2lQqFpvQJvr5cbHM/vjsROIBAfhFDV2TmSRc06vHJ2I6ZKmNgTIcul7c 34 | /oGwzcmY2rtOCIEE0IzMeud88bN4FVFIc4RhSIBN9gPaaOI8WMxgGGnh/0uk7r+L 35 | FyOEUGG+iMwg8Rp24BduAAHHov+QDPHwTKNIKrq5IVvFxACLlhiBs06OP4aTyySb 36 | 1JIoEWdlkEyftHSdsV1QstMdmsLT5QLhbdmQw4X7DVUECSWqRA/wQpWRQT5113I= 37 | =b+vs 38 | -----END PGP SIGNATURE----- -------------------------------------------------------------------------------- /docs/jitsi-meet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jitsi-contrib/jitsi-helm/b1a93e694c6ed6174a5005933ffe7e8b71472a56/docs/jitsi-meet.png -------------------------------------------------------------------------------- /docs/robots.txt: -------------------------------------------------------------------------------- 1 | User-Agent: * 2 | Disallow: / 3 | -------------------------------------------------------------------------------- /example-configurations/custom-defaults.yaml: -------------------------------------------------------------------------------- 1 | publicURL: "jitsi.example.com" 2 | prosody: 3 | scaleUp: false 4 | custom: 5 | contInit: 6 | _10_config: | 7 | # Custom prosody /etc/cont-init.d/10-config 8 | defaults: 9 | _prosody_cfg_lua: | 10 | # Custom prosody /defaults/prosody.cfg.lua 11 | _saslauthd_conf: | 12 | # Custom prosody /defaults/saslauthd.conf 13 | _jitsi_meet_cfg_lua: | 14 | # Custom prosody /defaults/conf.d/jitsi-meet.cfg.lua 15 | jicofo: 16 | custom: 17 | contInit: 18 | _10_config: | 19 | # Custom jicofo /etc/cont-init.d/10-config 20 | defaults: 21 | _jicofo_conf: | 22 | # Custom jicofo /defaults/jicofo.conf 23 | _logging_properties: | 24 | # Custom jicofo /defaults/logging.properties 25 | web: 26 | custom: 27 | contInit: 28 | _10_config: | 29 | # Custom web /etc/cont-init.d/10-config 30 | defaults: 31 | _default: | 32 | # Custom web /defaults/default 33 | _ffdhe2048_txt: | 34 | # Custom web /defaults/ffdhe2048.txt 35 | _interface_config_js: | 36 | # Custom web /defaults/interface_config.js 37 | _meet_conf: | 38 | # Custom web /defaults/meet.conf 39 | _nginx_conf: | 40 | # Custom web /defaults/nginx.conf 41 | _settings_config_js: | 42 | # Custom web /defaults/settings-config.js 43 | _ssl_conf: | 44 | # Custom web /defaults/ssl.conf 45 | _system_config_js: | 46 | # Custom web /defaults/system-config.js 47 | 48 | -------------------------------------------------------------------------------- /files/grafana_dashboards/README.md: -------------------------------------------------------------------------------- 1 | # Dashboards 2 | 3 | For version tracking, we put here the link to the origin place, where the dashboard is from: 4 | - https://github.com/systemli/prometheus-jitsi-meet-exporter/tree/54fbedad4e4c605f72ad88fecf4c6d9df88eed1d/dashboards 5 | -------------------------------------------------------------------------------- /templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.web.ingress.enabled }} 3 | {{- range $host := .Values.web.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.web.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.web.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "jitsi-meet.web.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.web.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "jitsi-meet.web.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "jitsi-meet.web.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.web.service.port }} 17 | {{- else if contains "ClusterIP" .Values.web.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "jitsi-meet.name" . }},app.kubernetes.io/component=web,app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "jitsi-meet.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "jitsi-meet.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "jitsi-meet.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "jitsi-meet.labels" -}} 38 | helm.sh/chart: {{ include "jitsi-meet.chart" . }} 39 | {{ include "jitsi-meet.selectorLabels" . }} 40 | {{- if .Chart.AppVersion }} 41 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 42 | {{- end }} 43 | app.kubernetes.io/managed-by: {{ .Release.Service }} 44 | {{- end -}} 45 | 46 | {{/* 47 | Selector labels 48 | */}} 49 | {{- define "jitsi-meet.selectorLabels" -}} 50 | app.kubernetes.io/name: {{ include "jitsi-meet.name" . }} 51 | app.kubernetes.io/instance: {{ .Release.Name }} 52 | {{- end -}} 53 | 54 | {{/* 55 | Create the name of the service account to use 56 | */}} 57 | {{- define "jitsi-meet.serviceAccountName" -}} 58 | {{- if .Values.serviceAccount.create -}} 59 | {{ default (include "jitsi-meet.fullname" .) .Values.serviceAccount.name }} 60 | {{- else -}} 61 | {{ default "default" .Values.serviceAccount.name }} 62 | {{- end -}} 63 | {{- end -}} 64 | 65 | {{/* 66 | https://github.com/helm/helm/issues/4535 67 | */}} 68 | {{- define "call-nested" }} 69 | {{- $dot := index . 0 }} 70 | {{- $subchart := index . 1 }} 71 | {{- $template := index . 2 }} 72 | {{- include $template (dict "Chart" (dict "Name" $subchart) "Values" (index $dot.Values $subchart) "Release" $dot.Release "Capabilities" $dot.Capabilities) }} 73 | {{- end }} 74 | 75 | {{- define "jitsi-meet.xmpp.domain" -}} 76 | {{- if .Values.xmpp.domain -}} 77 | {{ .Values.xmpp.domain }} 78 | {{- else -}} 79 | {{- if .Values.global.clusterDomain -}} 80 | {{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }} 81 | {{- else -}} 82 | {{ .Release.Namespace }}.svc 83 | {{- end -}} 84 | {{- end -}} 85 | {{- end -}} 86 | 87 | {{- define "jitsi-meet.xmpp.server" -}} 88 | {{- if .Values.prosody.server -}} 89 | {{ .Values.prosody.server }} 90 | {{- else -}} 91 | {{- if .Values.global.clusterDomain -}} 92 | {{ include "call-nested" (list . "prosody" "prosody.fullname") }}.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }} 93 | {{- else -}} 94 | {{ include "call-nested" (list . "prosody" "prosody.fullname") }}.{{ .Release.Namespace }}.svc 95 | {{- end -}} 96 | {{- end -}} 97 | {{- end -}} 98 | 99 | 100 | {{- define "jitsi-meet.publicURL" -}} 101 | {{- if .Values.publicURL }} 102 | {{- .Values.publicURL -}} 103 | {{- else -}} 104 | {{- if .Values.web.ingress.tls -}}https://{{- else -}}http://{{- end -}} 105 | {{- if .Values.web.ingress.tls -}} 106 | {{- (.Values.web.ingress.tls|first).hosts|first -}} 107 | {{- else if .Values.web.ingress.hosts -}} 108 | {{- (.Values.web.ingress.hosts|first).host -}} 109 | {{ required "You need to define a publicURL or some value for ingress" .Values.publicURL }} 110 | {{- end -}} 111 | {{- end -}} 112 | {{- end -}} 113 | -------------------------------------------------------------------------------- /templates/common-configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common 5 | labels: 6 | {{- include "jitsi-meet.labels" . | nindent 4 }} 7 | data: 8 | ENABLE_AUTH: {{ ternary "1" "0" .Values.enableAuth | quote }} 9 | ENABLE_GUESTS: {{ ternary "1" "0" .Values.enableGuests | quote }} 10 | PUBLIC_URL: {{ include "jitsi-meet.publicURL" . }} 11 | XMPP_DOMAIN: {{ include "jitsi-meet.xmpp.domain" . }} 12 | XMPP_MUC_DOMAIN: {{ .Values.xmpp.mucDomain | default (printf "muc.%s" (include "jitsi-meet.xmpp.domain" .)) }} 13 | XMPP_AUTH_DOMAIN: {{ .Values.xmpp.authDomain | default (printf "auth.%s" (include "jitsi-meet.xmpp.domain" .)) }} 14 | XMPP_GUEST_DOMAIN: {{ .Values.xmpp.guestDomain | default (printf "guest.%s" (include "jitsi-meet.xmpp.domain" .)) }} 15 | XMPP_HIDDEN_DOMAIN: {{ .Values.xmpp.hiddenDomain | default (printf "hidden.%s" (include "jitsi-meet.xmpp.domain" .)) }} 16 | XMPP_INTERNAL_MUC_DOMAIN: {{ .Values.xmpp.internalMucDomain | default (printf "internal-muc.%s" (include "jitsi-meet.xmpp.domain" .)) }} 17 | {{- if or .Values.websockets.colibri.enabled }} 18 | ENABLE_COLIBRI_WEBSOCKET: 'true' 19 | # TODO: rework into a proper regex or dynamic name list 20 | ENABLE_COLIBRI_WEBSOCKET_UNSAFE_REGEX: '1' 21 | {{- else }} 22 | ENABLE_SCTP: 'true' 23 | ENABLE_COLIBRI_WEBSOCKET: 'false' 24 | JVB_PREFER_SCTP: 'true' 25 | {{- end }} 26 | {{- if .Values.websockets.xmpp.enabled }} 27 | ENABLE_XMPP_WEBSOCKET: 'true' 28 | {{- else }} 29 | ENABLE_XMPP_WEBSOCKET: 'false' 30 | {{- end }} 31 | {{- if .Values.jibri.enabled }} 32 | {{- if .Values.jibri.recording }} 33 | ENABLE_RECORDING: "true" 34 | ENABLE_FILE_RECORDING_SERVICE_SHARING: "true" 35 | {{- end }} 36 | {{- if .Values.jibri.livestreaming }} 37 | ENABLE_LIVESTREAMING: "true" 38 | {{- end }} 39 | {{- end }} 40 | TZ: '{{ .Values.tz }}' 41 | {{- range $key, $value := .Values.extraCommonEnvs }} 42 | {{- if not (kindIs "invalid" $value) }} 43 | {{ $key }}: {{ tpl $value $ | quote }} 44 | {{- end }} 45 | {{- end }} 46 | {{- if .Values.octo.enabled }} 47 | ENABLE_OCTO: "1" 48 | TESTING_OCTO_PROBABILITY: "1" 49 | DEPLOYMENTINFO_REGION: "all" 50 | DEPLOYMENTINFO_USERREGION: "all" 51 | {{- end }} 52 | -------------------------------------------------------------------------------- /templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.web.ingress.enabled -}} 2 | {{- $fullName := include "jitsi-meet.web.fullname" . -}} 3 | {{- $svcPort := .Values.web.service.port -}} 4 | {{- $kubeVersion := .Capabilities.KubeVersion.GitVersion -}} 5 | {{- if semverCompare ">=1.19-0" $kubeVersion -}} 6 | apiVersion: networking.k8s.io/v1 7 | {{- else if semverCompare ">=1.14-0" $kubeVersion -}} 8 | apiVersion: networking.k8s.io/v1beta1 9 | {{- else -}} 10 | apiVersion: extensions/v1beta1 11 | {{- end }} 12 | kind: Ingress 13 | metadata: 14 | name: {{ $fullName }} 15 | labels: 16 | {{- include "jitsi-meet.web.labels" . | nindent 4 }} 17 | {{- if or .Values.web.ingress.annotations (and .Values.web.ingress.ingressClassName (semverCompare "<1.19-0" $kubeVersion)) }} 18 | annotations: 19 | {{- if and .Values.web.ingress.ingressClassName (semverCompare "<1.19-0" $kubeVersion) }} 20 | kubernetes.io/ingress.class: {{ .Values.web.ingress.ingressClassName }} 21 | {{- end }} 22 | {{- with .Values.web.ingress.annotations }} 23 | {{- toYaml . | nindent 4 }} 24 | {{- end }} 25 | {{- end }} 26 | spec: 27 | {{- if and .Values.web.ingress.ingressClassName (semverCompare ">=1.19-0" $kubeVersion) }} 28 | ingressClassName: {{ .Values.web.ingress.ingressClassName }} 29 | {{- end }} 30 | {{- if .Values.web.ingress.tls }} 31 | tls: 32 | {{- range .Values.web.ingress.tls }} 33 | - hosts: 34 | {{- range .hosts }} 35 | - {{ . | quote }} 36 | {{- end }} 37 | secretName: {{ .secretName }} 38 | {{- end }} 39 | {{- end }} 40 | rules: 41 | {{- range .Values.web.ingress.hosts }} 42 | - host: {{ .host | quote }} 43 | http: 44 | paths: 45 | {{- range .paths }} 46 | - path: {{ . }} 47 | pathType: Prefix 48 | backend: 49 | {{ if semverCompare ">=1.19-0" $kubeVersion }} 50 | service: 51 | name: {{ $fullName }} 52 | port: 53 | {{ if kindIs "float64" $svcPort }} 54 | number: {{ $svcPort }} 55 | {{ else }} 56 | name: {{ $svcPort }} 57 | {{ end }} 58 | {{ else }} 59 | serviceName: {{ $fullName }} 60 | servicePort: {{ $svcPort }} 61 | {{ end }} 62 | {{- end }} 63 | {{- end }} 64 | {{- end }} 65 | -------------------------------------------------------------------------------- /templates/jibri/_helper.tpl: -------------------------------------------------------------------------------- 1 | 2 | {{- define "jitsi-meet.jibri.fullname" -}} 3 | {{ include "jitsi-meet.fullname" . }}-jibri 4 | {{- end -}} 5 | 6 | {{- define "jitsi-meet.jibri.labels" -}} 7 | {{ include "jitsi-meet.labels" . }} 8 | app.kubernetes.io/component: jibri 9 | {{- end -}} 10 | 11 | {{- define "jitsi-meet.jibri.selectorLabels" -}} 12 | {{ include "jitsi-meet.selectorLabels" . }} 13 | app.kubernetes.io/component: jibri 14 | {{- end -}} 15 | 16 | {{- define "jitsi-meet.jibri.secret" -}} 17 | {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jibri 18 | {{- end -}} 19 | -------------------------------------------------------------------------------- /templates/jibri/configmap.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.jibri.enabled }} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ include "jitsi-meet.jibri.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.jibri.labels" . | nindent 4 }} 8 | data: 9 | XMPP_SERVER: '{{ include "jitsi-meet.xmpp.server" . }}' 10 | JIBRI_BREWERY_MUC: '{{ .Values.jibri.breweryMuc }}' 11 | JIBRI_RECORDING_DIR: '{{ .Values.jibri.recordingDir | default "/data/recordings" }}' 12 | JIBRI_FINALIZE_RECORDING_SCRIPT_PATH: "/config/finalize.sh" 13 | JIBRI_STRIP_DOMAIN_JID: muc 14 | DISPLAY: ":0" 15 | JIBRI_SINGLE_USE_MODE: {{ .Values.jibri.singleUseMode | default false | quote }} 16 | {{- range $key, $value := .Values.jibri.extraEnvs }} 17 | {{- if not (kindIs "invalid" $value) }} 18 | {{ $key }}: {{ tpl $value $ | quote }} 19 | {{- end }} 20 | {{- end }} 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /templates/jibri/configmaps-cont-init.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.jibri.fullname" . }}-cont-inits 5 | labels: 6 | {{- include "jitsi-meet.jibri.labels" . | nindent 4 }} 7 | data: 8 | 10-config: | 9 | {{- if .Values.jibri.custom.contInit._10_config }} 10 | {{- .Values.jibri.custom.contInit._10_config | nindent 4 }} 11 | {{- else }} 12 | # Using jibri /etc/cont-init.d/10-config from container image 13 | {{ end }} 14 | 15 | -------------------------------------------------------------------------------- /templates/jibri/configmaps-defaults.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.jibri.fullname" . }}-defaults 5 | labels: 6 | {{- include "jitsi-meet.jibri.labels" . | nindent 4 }} 7 | data: 8 | jibri.conf: | 9 | {{- if .Values.jibri.custom.defaults._jibri_conf }} 10 | {{- .Values.jibri.custom.defaults._jibri_conf | nindent 4 }} 11 | {{- else }} 12 | # Using jibri /default/jibri.conf from container image 13 | {{ end }} 14 | logging.properties: | 15 | {{- if .Values.jibri.custom.defaults._logging_properties }} 16 | {{- .Values.jibri.custom.defaults._logging_properties | nindent 4 }} 17 | {{- else }} 18 | # Using jibri /default/logging.properties from container image 19 | {{ end }} 20 | autoscaler-sidecar.config: | 21 | {{- if .Values.jibri.custom.defaults._jibri_autoscaler_sidecar_config }} 22 | {{- .Values.jibri.custom.defaults._jibri_autoscaler_sidecar_config | nindent 4 }} 23 | {{- else }} 24 | # Using jibri /default/autoscaler-sidecar.config from container image 25 | {{ end }} 26 | xorg-video-dummy.conf: | 27 | {{- if .Values.jibri.custom.defaults._xorg_video_dummy_conf }} 28 | {{- .Values.jibri.custom.defaults._xorg_video_dummy_conf | nindent 4 }} 29 | {{- else }} 30 | # Using jibri /default/xorg-video-dummy.conf from container image 31 | {{ end }} 32 | 33 | -------------------------------------------------------------------------------- /templates/jibri/configmaps-other.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.jibri.fullname" . }}-other 5 | labels: 6 | {{- include "jitsi-meet.jibri.labels" . | nindent 4 }} 7 | data: 8 | finalize.sh: | 9 | {{- if .Values.jibri.custom.other._finalize_sh }} 10 | {{- .Values.jibri.custom.other._finalize_sh | nindent 4 }} 11 | {{- else }} 12 | # Not using a custom finalize.sh 13 | {{ end }} 14 | -------------------------------------------------------------------------------- /templates/jibri/deployment.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.jibri.enabled (not .Values.jibri.useExternalJibri) }} 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: {{ include "jitsi-meet.jibri.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.jibri.labels" . | nindent 4 }} 8 | {{- with .Values.jibri.annotations }} 9 | annotations: 10 | {{ toYaml . | nindent 4 }} 11 | {{- end }} 12 | spec: 13 | replicas: {{ .Values.jibri.replicaCount | default 1 }} 14 | {{- if .Values.jibri.strategy }} 15 | strategy: {{- toYaml .Values.jibri.strategy | nindent 4 }} 16 | {{- end }} 17 | selector: 18 | matchLabels: 19 | {{- include "jitsi-meet.jibri.selectorLabels" . | nindent 6 }} 20 | template: 21 | metadata: 22 | labels: 23 | {{- include "jitsi-meet.jibri.selectorLabels" . | nindent 8 }} 24 | {{- range $label, $value := mergeOverwrite .Values.global.podLabels .Values.jibri.podLabels }} 25 | {{ $label }}: {{ $value }} 26 | {{- end }} 27 | annotations: 28 | checksum/config: {{ include (print $.Template.BasePath "/jibri/configmap.yaml") . | sha256sum }} 29 | checksum/secret: {{ include (print $.Template.BasePath "/jibri/xmpp-secret.yaml") . | sha256sum }} 30 | {{- range $annotation, $value := mergeOverwrite .Values.global.podAnnotations .Values.jibri.podAnnotations }} 31 | {{ $annotation }}: {{ $value | quote }} 32 | {{- end }} 33 | spec: 34 | {{- with .Values.imagePullSecrets }} 35 | imagePullSecrets: 36 | {{- toYaml . | nindent 8 }} 37 | {{- end }} 38 | serviceAccountName: {{ include "jitsi-meet.serviceAccountName" . }} 39 | containers: 40 | - name: {{ .Chart.Name }} 41 | securityContext: 42 | capabilities: 43 | add: ["SYS_ADMIN"] 44 | image: "{{ .Values.jibri.image.repository }}:{{ default .Chart.AppVersion .Values.jibri.image.tag }}" 45 | imagePullPolicy: {{ pluck "pullPolicy" .Values.jibri.image .Values.image | first }} 46 | ports: 47 | - name: http-internal 48 | containerPort: 3333 49 | - name: http-api 50 | containerPort: 2222 51 | {{- with default .Values.jibri.livenessProbe .Values.jibri.livenessProbeOverride }} 52 | livenessProbe: 53 | {{- toYaml . | nindent 10 }} 54 | {{- end }} 55 | {{- with default .Values.jibri.readinessProbe .Values.jibri.readinessProbeOverride }} 56 | readinessProbe: 57 | {{- toYaml . | nindent 10 }} 58 | {{- end }} 59 | 60 | envFrom: 61 | - secretRef: 62 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jibri 63 | - configMapRef: 64 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common 65 | - configMapRef: 66 | name: {{ include "jitsi-meet.jibri.fullname" . }} 67 | 68 | {{- if (gt (int .Values.jibri.replicaCount) 1) }} 69 | # Set Jibri Instance ID based on pod name: 70 | env: 71 | - name: JIBRI_INSTANCE_ID 72 | valueFrom: 73 | fieldRef: 74 | fieldPath: metadata.name 75 | {{- end }} 76 | 77 | resources: 78 | {{- toYaml .Values.jibri.resources | nindent 12 }} 79 | 80 | volumeMounts: 81 | - name: config 82 | mountPath: /config 83 | {{- if .Values.jibri.custom.contInit._10_config }} 84 | - name: custom-cont-inits 85 | mountPath: /etc/cont-init.d/10-config 86 | subPath: 10-config 87 | {{- end }} 88 | {{- if .Values.jibri.custom.defaults._jibri_conf }} 89 | - name: custom-defaults 90 | mountPath: /defaults/jibri.conf 91 | subPath: jibri.conf 92 | {{- end }} 93 | {{- if .Values.jibri.custom.defaults._logging_properties }} 94 | - name: custom-defaults 95 | mountPath: /defaults/logging.properties 96 | subPath: logging.properties 97 | {{- end }} 98 | {{- if .Values.jibri.custom.defaults._autoscaler_sidecar_config }} 99 | - name: custom-defaults 100 | mountPath: /defaults/autoscaler-sidecar.config 101 | subPath: autoscaler-sidecar.config 102 | {{- end }} 103 | {{- if .Values.jibri.custom.defaults._xorg_video_dummy_conf }} 104 | - name: custom-defaults 105 | mountPath: /defaults/xorg-video-dummy.conf 106 | subPath: xorg-video-dummy.conf 107 | {{- end }} 108 | {{- if .Values.jibri.custom.other._finalize_sh }} 109 | - name: custom-other 110 | mountPath: /config/finalize.sh 111 | subPath: finalize.sh 112 | {{- end }} 113 | - name: jibri-data 114 | mountPath: /data 115 | {{- if .Values.jibri.shm.enabled }} 116 | - name: dev-shm 117 | mountPath: /dev/shm 118 | {{- end }} 119 | 120 | volumes: 121 | - name: config 122 | emptyDir: {} 123 | - name: custom-cont-inits 124 | configMap: 125 | defaultMode: 493 126 | name: {{ include "jitsi-meet.jibri.fullname" . }}-cont-inits 127 | items: 128 | - key: 10-config 129 | path: 10-config 130 | - name: custom-defaults 131 | configMap: 132 | name: {{ include "jitsi-meet.jibri.fullname" . }}-defaults 133 | items: 134 | - key: jibri.conf 135 | path: jibri.conf 136 | - key: logging.properties 137 | path: logging.properties 138 | - key: autoscaler-sidecar.config 139 | path: autoscaler-sidecar.config 140 | - key: xorg-video-dummy.conf 141 | path: xorg-video-dummy.conf 142 | - name: custom-other 143 | configMap: 144 | defaultMode: 493 145 | name: {{ include "jitsi-meet.jibri.fullname" . }}-other 146 | - name: jibri-data 147 | {{- if .Values.jibri.persistence.enabled }} 148 | persistentVolumeClaim: 149 | claimName: {{ .Values.jibri.persistence.existingClaim | default (include "jitsi-meet.jibri.fullname" .) }} 150 | {{- else }} 151 | emptyDir: {} 152 | {{- end }} 153 | {{- if .Values.jibri.shm.enabled }} 154 | - name: dev-shm 155 | {{- if .Values.jibri.shm.useHost }} 156 | hostPath: 157 | path: /dev/shm 158 | {{- else }} 159 | emptyDir: 160 | medium: Memory 161 | sizeLimit: {{ .Values.jibri.shm.size | default "2Gi" | quote }} 162 | {{- end }} 163 | {{- end }} 164 | {{- with .Values.jibri.nodeSelector }} 165 | nodeSelector: 166 | {{- toYaml . | nindent 8 }} 167 | {{- end }} 168 | {{- with .Values.jibri.affinity }} 169 | affinity: 170 | {{- toYaml . | nindent 8 }} 171 | {{- end }} 172 | {{- with .Values.jibri.tolerations }} 173 | tolerations: 174 | {{- toYaml . | nindent 8 }} 175 | {{- end }} 176 | {{- end }} 177 | -------------------------------------------------------------------------------- /templates/jibri/persistentvolumeclaim.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.jibri.enabled .Values.jibri.persistence.enabled (not .Values.jibri.persistence.existingClaim) (not .Values.jibri.useExternalJibri) }} 2 | apiVersion: v1 3 | kind: PersistentVolumeClaim 4 | metadata: 5 | name: {{ include "jitsi-meet.jibri.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.jibri.labels" . | nindent 4 }} 8 | namespace: {{ .Release.Namespace }} 9 | spec: 10 | accessModes: 11 | - ReadWriteOnce 12 | - ReadWriteMany 13 | resources: 14 | requests: 15 | storage: {{ .Values.jibri.persistence.size | quote }} 16 | {{- with .Values.jibri.persistence.storageClassName }} 17 | storageClassName: {{ . | quote }} 18 | {{- end }} 19 | {{- end -}} 20 | -------------------------------------------------------------------------------- /templates/jibri/service.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.jibri.enabled (not .Values.jibri.useExternalJibri) }} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: {{ include "jitsi-meet.jibri.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.jibri.labels" . | nindent 4 }} 8 | spec: 9 | type: ClusterIP 10 | ports: 11 | - name: http-internal 12 | port: 3333 13 | targetPort: 3333 14 | protocol: TCP 15 | - name: http-api 16 | port: 2222 17 | targetPort: 2222 18 | protocol: TCP 19 | selector: 20 | {{- include "jitsi-meet.jibri.selectorLabels" . | nindent 4 }} 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /templates/jibri/xmpp-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jibri 5 | labels: 6 | {{- include "jitsi-meet.jibri.labels" . | nindent 4 }} 7 | type: Opaque 8 | data: 9 | {{- if .Values.jibri.enabled }} 10 | JIBRI_XMPP_USER: '{{ .Values.jibri.xmpp.user | b64enc }}' 11 | JIBRI_XMPP_PASSWORD: '{{ default (randAlphaNum 10) .Values.jibri.xmpp.password | b64enc }}' 12 | JIBRI_RECORDER_USER: '{{ .Values.jibri.recorder.user | b64enc }}' 13 | JIBRI_RECORDER_PASSWORD: '{{ default (randAlphaNum 10) .Values.jibri.recorder.password | b64enc }}' 14 | {{- end }} 15 | -------------------------------------------------------------------------------- /templates/jicofo/_helper.tpl: -------------------------------------------------------------------------------- 1 | 2 | {{- define "jitsi-meet.jicofo.fullname" -}} 3 | {{ include "jitsi-meet.fullname" . }}-jicofo 4 | {{- end -}} 5 | 6 | {{- define "jitsi-meet.jicofo.labels" -}} 7 | {{ include "jitsi-meet.labels" . }} 8 | app.kubernetes.io/component: jicofo 9 | {{- end -}} 10 | 11 | {{- define "jitsi-meet.jicofo.selectorLabels" -}} 12 | {{ include "jitsi-meet.selectorLabels" . }} 13 | app.kubernetes.io/component: jicofo 14 | {{- end -}} 15 | 16 | {{- define "jitsi-meet.jicofo.secret" -}} 17 | {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jicofo 18 | {{- end -}} 19 | -------------------------------------------------------------------------------- /templates/jicofo/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.jicofo.fullname" . }} 5 | labels: 6 | {{- include "jitsi-meet.jicofo.labels" . | nindent 4 }} 7 | data: 8 | JVB_BREWERY_MUC: '{{ .Values.jvb.breweryMuc }}' 9 | XMPP_SERVER: '{{ include "jitsi-meet.xmpp.server" . }}' 10 | JICOFO_ENABLE_REST: '1' 11 | {{- if .Values.jibri.enabled }} 12 | JIBRI_BREWERY_MUC: '{{ .Values.jibri.breweryMuc }}' 13 | JIBRI_PENDING_TIMEOUT: '{{ .Values.jibri.timeout }}' 14 | {{- end }} 15 | {{- if .Values.jigasi.enabled }} 16 | JIGASI_BREWERY_MUC: '{{ .Values.jigasi.breweryMuc }}' 17 | JIGASI_SIP_URI: "available" 18 | {{- end }} 19 | {{- range $key, $value := .Values.jicofo.extraEnvs }} 20 | {{- if not (kindIs "invalid" $value) }} 21 | {{ $key }}: {{ tpl $value $ | quote }} 22 | {{- end }} 23 | {{- end }} 24 | {{- if .Values.octo.enabled }} 25 | ENABLE_OCTO: "1" 26 | OCTO_BRIDGE_SELECTION_STRATEGY: "SplitBridgeSelectionStrategy" 27 | {{- end }} 28 | -------------------------------------------------------------------------------- /templates/jicofo/configmaps-cont-init.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.jicofo.fullname" . }}-cont-inits 5 | labels: 6 | {{- include "jitsi-meet.jicofo.labels" . | nindent 4 }} 7 | data: 8 | 10-config: | 9 | {{- if .Values.jicofo.custom.contInit._10_config }} 10 | {{- .Values.jicofo.custom.contInit._10_config | nindent 4 }} 11 | {{- else }} 12 | # Using jicofo /etc/cont-init.d/10-config from container image 13 | {{ end }} 14 | 15 | -------------------------------------------------------------------------------- /templates/jicofo/configmaps-defaults.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.jicofo.fullname" . }}-defaults 5 | labels: 6 | {{- include "jitsi-meet.jicofo.labels" . | nindent 4 }} 7 | data: 8 | jicofo.conf: | 9 | {{- if .Values.jicofo.custom.defaults._jicofo_conf }} 10 | {{- .Values.jicofo.custom.defaults._jicofo_conf | nindent 4 }} 11 | {{- else }} 12 | # Using jicofo /default/jicofo.conf from container image 13 | {{ end }} 14 | logging.properties: | 15 | {{- if .Values.jicofo.custom.defaults._logging_properties }} 16 | {{- .Values.jicofo.custom.defaults._logging_properties | nindent 4 }} 17 | {{- else }} 18 | # Using jicofo /default/logging.properties from container image 19 | {{ end }} 20 | -------------------------------------------------------------------------------- /templates/jicofo/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ include "jitsi-meet.jicofo.fullname" . }} 5 | labels: 6 | {{- include "jitsi-meet.jicofo.labels" . | nindent 4 }} 7 | {{- with .Values.jicofo.annotations }} 8 | annotations: 9 | {{ toYaml . | nindent 4 }} 10 | {{- end }} 11 | spec: 12 | replicas: {{ .Values.jicofo.replicaCount }} 13 | selector: 14 | matchLabels: 15 | {{- include "jitsi-meet.jicofo.selectorLabels" . | nindent 6 }} 16 | template: 17 | metadata: 18 | labels: 19 | {{- include "jitsi-meet.jicofo.selectorLabels" . | nindent 8 }} 20 | {{- range $label, $value := mergeOverwrite .Values.global.podLabels .Values.jicofo.podLabels }} 21 | {{ $label }}: {{ $value }} 22 | {{- end }} 23 | annotations: 24 | checksum/config: {{ include (print $.Template.BasePath "/jicofo/configmap.yaml") . | sha256sum }} 25 | checksum/secret: {{ include (print $.Template.BasePath "/jicofo/xmpp-secret.yaml") . | sha256sum }} 26 | {{- range $annotation, $value := mergeOverwrite .Values.global.podAnnotations .Values.jicofo.podAnnotations }} 27 | {{ $annotation }}: {{ $value | quote }} 28 | {{- end }} 29 | spec: 30 | {{- with .Values.imagePullSecrets }} 31 | imagePullSecrets: 32 | {{- toYaml . | nindent 8 }} 33 | {{- end }} 34 | serviceAccountName: {{ include "jitsi-meet.serviceAccountName" . }} 35 | securityContext: 36 | {{- toYaml .Values.jicofo.podSecurityContext | nindent 8 }} 37 | volumes: 38 | - name: config 39 | emptyDir: {} 40 | - name: custom-cont-inits 41 | configMap: 42 | defaultMode: 493 43 | name: {{ include "jitsi-meet.jicofo.fullname" . }}-cont-inits 44 | items: 45 | - key: 10-config 46 | path: 10-config 47 | - name: custom-defaults 48 | configMap: 49 | name: {{ include "jitsi-meet.jicofo.fullname" . }}-defaults 50 | items: 51 | - key: jicofo.conf 52 | path: jicofo.conf 53 | - key: logging.properties 54 | path: logging.properties 55 | containers: 56 | - name: {{ .Chart.Name }} 57 | securityContext: 58 | {{- toYaml .Values.jicofo.securityContext | nindent 12 }} 59 | image: "{{ .Values.jicofo.image.repository }}:{{ default .Chart.AppVersion .Values.jicofo.image.tag }}" 60 | imagePullPolicy: {{ pluck "pullPolicy" .Values.jicofo.image .Values.image | first }} 61 | envFrom: 62 | - secretRef: 63 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jicofo 64 | - configMapRef: 65 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common 66 | - configMapRef: 67 | name: {{ include "jitsi-meet.jicofo.fullname" . }} 68 | {{- if .Values.global.releaseSecretsOverride.enabled }} 69 | {{- range .Values.global.releaseSecretsOverride.extraEnvFrom }} 70 | - {{ tpl (toYaml . ) $ | indent 12 | trim }} 71 | {{- end }} 72 | {{- end }} 73 | ports: 74 | - name: http 75 | containerPort: 80 76 | protocol: TCP 77 | {{- with .Values.jicofo.livenessProbe }} 78 | livenessProbe: 79 | {{- toYaml . | nindent 12 }} 80 | {{- end }} 81 | {{- with .Values.jicofo.readinessProbe }} 82 | readinessProbe: 83 | {{- toYaml . | nindent 12 }} 84 | {{- end }} 85 | resources: 86 | {{- toYaml .Values.jicofo.resources | nindent 12 }} 87 | volumeMounts: 88 | # to support readOnlyRootFilesystem 89 | - name: config 90 | mountPath: /config 91 | {{- if .Values.jicofo.custom.contInit._10_config }} 92 | - name: custom-cont-inits 93 | mountPath: /etc/cont-init.d/10-config 94 | subPath: 10-config 95 | {{- end }} 96 | {{- if .Values.jicofo.custom.defaults._jicofo_conf }} 97 | - name: custom-defaults 98 | mountPath: /defaults/jicofo.conf 99 | subPath: jicofo.conf 100 | {{- end }} 101 | {{- if .Values.jicofo.custom.defaults._logging_properties }} 102 | - name: custom-defaults 103 | mountPath: /defaults/logging.properties 104 | subPath: logging.properties 105 | {{- end }} 106 | {{- if .Values.jicofo.metrics.enabled }} 107 | - name: metrics 108 | image: "{{ .Values.jicofo.metrics.image.repository }}:{{ .Values.jicofo.metrics.image.tag }}" 109 | imagePullPolicy: {{ pluck "pullPolicy" .Values.jicofo.metrics.image .Values.image | first }} 110 | ports: 111 | - name: metrics 112 | containerPort: 9996 113 | protocol: TCP 114 | readinessProbe: 115 | httpGet: 116 | path: / 117 | port: 9996 118 | initialDelaySeconds: 3 119 | periodSeconds: 5 120 | resources: 121 | {{- toYaml .Values.jicofo.metrics.resources | nindent 12 }} 122 | {{- end }} 123 | {{- with .Values.jicofo.nodeSelector }} 124 | nodeSelector: 125 | {{- toYaml . | nindent 8 }} 126 | {{- end }} 127 | {{- with .Values.jicofo.affinity }} 128 | affinity: 129 | {{- toYaml . | nindent 8 }} 130 | {{- end }} 131 | {{- with .Values.jicofo.tolerations }} 132 | tolerations: 133 | {{- toYaml . | nindent 8 }} 134 | {{- end }} 135 | -------------------------------------------------------------------------------- /templates/jicofo/podmonitor.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.jicofo.metrics.enabled }} 2 | apiVersion: monitoring.coreos.com/v1 3 | kind: PodMonitor 4 | metadata: 5 | name: {{ include "jitsi-meet.jicofo.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.jicofo.labels" . | nindent 4 }} 8 | spec: 9 | selector: 10 | matchLabels: 11 | {{- include "jitsi-meet.jicofo.selectorLabels" . | nindent 6 }} 12 | podMetricsEndpoints: 13 | - port: metrics 14 | {{- end }} -------------------------------------------------------------------------------- /templates/jicofo/xmpp-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jicofo 5 | labels: 6 | {{- include "jitsi-meet.jicofo.labels" . | nindent 4 }} 7 | type: Opaque 8 | data: 9 | JICOFO_AUTH_USER: '{{ b64enc "focus" }}' 10 | JICOFO_AUTH_PASSWORD: '{{ default (randAlphaNum 10) .Values.jicofo.xmpp.password | b64enc }}' 11 | JICOFO_COMPONENT_SECRET: '{{ default (randAlphaNum 10) .Values.jicofo.xmpp.componentSecret | b64enc }}' 12 | -------------------------------------------------------------------------------- /templates/jigasi/_helper.tpl: -------------------------------------------------------------------------------- 1 | 2 | {{- define "jitsi-meet.jigasi.fullname" -}} 3 | {{ include "jitsi-meet.fullname" . }}-jigasi 4 | {{- end -}} 5 | 6 | {{- define "jitsi-meet.jigasi.labels" -}} 7 | {{ include "jitsi-meet.labels" . }} 8 | app.kubernetes.io/component: jigasi 9 | {{- end -}} 10 | 11 | {{- define "jitsi-meet.jigasi.selectorLabels" -}} 12 | {{ include "jitsi-meet.selectorLabels" . }} 13 | app.kubernetes.io/component: jigasi 14 | {{- end -}} 15 | 16 | {{- define "jitsi-meet.jigasi.secret" -}} 17 | {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jigasi 18 | {{- end -}} 19 | -------------------------------------------------------------------------------- /templates/jigasi/configmap.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.jigasi.enabled }} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ include "jitsi-meet.jigasi.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.jigasi.labels" . | nindent 4 }} 8 | data: 9 | JIGASI_BREWERY_MUC: '{{ .Values.jigasi.breweryMuc }}' 10 | XMPP_SERVER: '{{ include "jitsi-meet.xmpp.server" . }}' 11 | {{- range $key, $value := .Values.jigasi.extraEnvs }} 12 | {{- if not (kindIs "invalid" $value) }} 13 | {{ $key }}: {{ tpl $value $ | quote }} 14 | {{- end }} 15 | {{- end }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /templates/jigasi/deployment.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.jigasi.enabled (not .Values.jigasi.useExternalJigasi) }} 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: {{ include "jitsi-meet.jigasi.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.jigasi.labels" . | nindent 4 }} 8 | {{- with .Values.jigasi.annotations }} 9 | annotations: 10 | {{ toYaml . | nindent 4 }} 11 | {{- end }} 12 | spec: 13 | replicas: {{ .Values.jigasi.replicaCount | default 1 }} 14 | selector: 15 | matchLabels: 16 | {{- include "jitsi-meet.jigasi.selectorLabels" . | nindent 6 }} 17 | template: 18 | metadata: 19 | labels: 20 | {{- include "jitsi-meet.jigasi.selectorLabels" . | nindent 8 }} 21 | {{- range $label, $value := mergeOverwrite .Values.global.podLabels .Values.jigasi.podLabels }} 22 | {{ $label }}: {{ $value }} 23 | {{- end }} 24 | annotations: 25 | checksum/config: {{ include (print $.Template.BasePath "/jigasi/configmap.yaml") . | sha256sum }} 26 | checksum/secret: {{ include (print $.Template.BasePath "/jigasi/xmpp-secret.yaml") . | sha256sum }} 27 | {{- range $annotation, $value := mergeOverwrite .Values.global.podAnnotations .Values.jigasi.podAnnotations }} 28 | {{ $annotation }}: {{ $value | quote }} 29 | {{- end }} 30 | spec: 31 | {{- with .Values.imagePullSecrets }} 32 | imagePullSecrets: 33 | {{- toYaml . | nindent 8 }} 34 | {{- end }} 35 | serviceAccountName: {{ include "jitsi-meet.serviceAccountName" . }} 36 | securityContext: 37 | {{- toYaml .Values.jigasi.podSecurityContext | nindent 8 }} 38 | initContainers: 39 | - name: init-prosody 40 | image: busybox:1.36 41 | command: 42 | - sh 43 | - -c 44 | - | 45 | echo "Waiting for Prosody on port 5280"; 46 | while ! nc -z -w 1 {{ include "jitsi-meet.xmpp.server" . }} 5280; do 47 | sleep 1; 48 | done; 49 | echo ">> Prosody is available" 50 | containers: 51 | - name: {{ .Chart.Name }} 52 | securityContext: 53 | {{- toYaml .Values.jigasi.securityContext | nindent 12 }} 54 | image: "{{ .Values.jigasi.image.repository }}:{{ default .Chart.AppVersion .Values.jigasi.image.tag }}" 55 | imagePullPolicy: {{ pluck "pullPolicy" .Values.jigasi.image .Values.image | first }} 56 | envFrom: 57 | - secretRef: 58 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jigasi 59 | - configMapRef: 60 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common 61 | - configMapRef: 62 | name: {{ include "jitsi-meet.jigasi.fullname" . }} 63 | {{- if .Values.global.releaseSecretsOverride.enabled }} 64 | {{- range .Values.global.releaseSecretsOverride.extraEnvFrom }} 65 | - {{ tpl (toYaml . ) $ | indent 12 | trim }} 66 | {{- end }} 67 | {{- end }} 68 | env: 69 | - name: JIGASI_ENABLE_REST 70 | value: "1" 71 | {{- with .Values.jigasi.livenessProbe }} 72 | livenessProbe: 73 | {{- toYaml . | nindent 12 }} 74 | {{- end }} 75 | {{- with .Values.jigasi.readinessProbe }} 76 | readinessProbe: 77 | {{- toYaml . | nindent 12 }} 78 | {{- end }} 79 | resources: 80 | {{- toYaml .Values.jigasi.resources | nindent 12 }} 81 | 82 | {{- with .Values.jigasi.nodeSelector }} 83 | nodeSelector: 84 | {{- toYaml . | nindent 8 }} 85 | {{- end }} 86 | {{- with .Values.jigasi.affinity }} 87 | affinity: 88 | {{- toYaml . | nindent 8 }} 89 | {{- end }} 90 | {{- with .Values.jigasi.tolerations }} 91 | tolerations: 92 | {{- toYaml . | nindent 8 }} 93 | {{- end }} 94 | {{- end }} 95 | -------------------------------------------------------------------------------- /templates/jigasi/xmpp-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jigasi 5 | labels: 6 | {{- include "jitsi-meet.jigasi.labels" . | nindent 4 }} 7 | type: Opaque 8 | data: 9 | {{- if .Values.jigasi.enabled }} 10 | JIGASI_XMPP_USER: '{{ .Values.jigasi.xmpp.user | b64enc }}' 11 | JIGASI_XMPP_PASSWORD: '{{ default (randAlphaNum 10) .Values.jigasi.xmpp.password | b64enc }}' 12 | {{- end }} 13 | -------------------------------------------------------------------------------- /templates/jvb/_helper.tpl: -------------------------------------------------------------------------------- 1 | 2 | {{- define "jitsi-meet.jvb.fullname" -}} 3 | {{ include "jitsi-meet.fullname" . }}-jvb 4 | {{- end -}} 5 | 6 | {{- define "jitsi-meet.jvb.labels" -}} 7 | {{ include "jitsi-meet.labels" . }} 8 | app.kubernetes.io/component: jvb 9 | {{- end -}} 10 | 11 | {{- define "jitsi-meet.jvb.selectorLabels" -}} 12 | {{ include "jitsi-meet.selectorLabels" . }} 13 | app.kubernetes.io/component: jvb 14 | {{- end -}} 15 | 16 | {{- define "jitsi-meet.jvb.secret" -}} 17 | {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jvb 18 | {{- end -}} 19 | -------------------------------------------------------------------------------- /templates/jvb/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.jvb.fullname" . }} 5 | labels: 6 | {{- include "jitsi-meet.jvb.labels" . | nindent 4 }} 7 | data: 8 | JVB_BREWERY_MUC: '{{ .Values.jvb.breweryMuc }}' 9 | JVB_PORT: '{{ .Values.jvb.UDPPort }}' 10 | JVB_STUN_SERVERS: '{{.Values.jvb.stunServers }}' 11 | JVB_TCP_HARVESTER_DISABLED: '1' 12 | XMPP_SERVER: '{{ include "jitsi-meet.xmpp.server" . }}' 13 | {{- range $key, $value := .Values.jvb.extraEnvs }} 14 | {{- if not (kindIs "invalid" $value) }} 15 | {{ $key }}: {{ tpl $value $ | quote }} 16 | {{- end }} 17 | {{- end }} 18 | COLIBRI_REST_ENABLED: 'true' 19 | {{- if .Values.octo.enabled }} 20 | ENABLE_OCTO: "1" 21 | JVB_OCTO_BIND_PORT: "4096" 22 | JVB_OCTO_REGION: "all" 23 | {{- end }} 24 | -------------------------------------------------------------------------------- /templates/jvb/configmap_grafana_dashboards.yaml: -------------------------------------------------------------------------------- 1 | {{- if and (.Values.jvb.metrics.enabled) .Values.jvb.metrics.grafanaDashboards.enabled }} 2 | --- 3 | apiVersion: v1 4 | kind: ConfigMap 5 | metadata: 6 | name: {{ include "jitsi-meet.fullname" . }}-grafana-dashboards 7 | labels: 8 | {{- include "jitsi-meet.labels" . | nindent 4 }} 9 | {{- with .Values.jvb.metrics.grafanaDashboards.labels }} 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | annotations: 13 | {{- toYaml .Values.jvb.metrics.grafanaDashboards.annotations | nindent 4 }} 14 | data: 15 | {{- (.Files.Glob "files/grafana_dashboards/*.json").AsConfig | nindent 2 }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /templates/jvb/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ include "jitsi-meet.jvb.fullname" . }} 5 | labels: 6 | {{- include "jitsi-meet.jvb.labels" . | nindent 4 }} 7 | {{- with .Values.jvb.annotations }} 8 | annotations: 9 | {{ toYaml . | nindent 4 }} 10 | {{- end }} 11 | spec: 12 | replicas: {{ .Values.jvb.replicaCount }} 13 | selector: 14 | matchLabels: 15 | {{- include "jitsi-meet.jvb.selectorLabels" . | nindent 6 }} 16 | {{- if .Values.jvb.useHostPort }} 17 | strategy: 18 | type: Recreate 19 | {{- end }} 20 | template: 21 | metadata: 22 | labels: 23 | {{- include "jitsi-meet.jvb.selectorLabels" . | nindent 8 }} 24 | {{- range $label, $value := mergeOverwrite .Values.global.podLabels .Values.jvb.podLabels }} 25 | {{ $label }}: {{ $value }} 26 | {{- end }} 27 | annotations: 28 | checksum/config: {{ include (print $.Template.BasePath "/jvb/configmap.yaml") . | sha256sum }} 29 | checksum/secret: {{ include (print $.Template.BasePath "/jvb/xmpp-secret.yaml") . | sha256sum }} 30 | {{- if and .Values.jvb.metrics.enabled .Values.jvb.metrics.prometheusAnnotations }} 31 | prometheus.io/port: "9888" 32 | prometheus.io/scrape: "true" 33 | {{- end }} 34 | {{- range $annotation, $value := mergeOverwrite .Values.global.podAnnotations .Values.jvb.podAnnotations }} 35 | {{ $annotation }}: {{ $value | quote }} 36 | {{- end }} 37 | spec: 38 | {{- with .Values.imagePullSecrets }} 39 | imagePullSecrets: 40 | {{- toYaml . | nindent 8 }} 41 | {{- end }} 42 | serviceAccountName: {{ include "jitsi-meet.serviceAccountName" . }} 43 | securityContext: 44 | {{- toYaml .Values.jvb.podSecurityContext | nindent 8 }} 45 | {{- if .Values.jvb.useHostNetwork }} 46 | hostNetwork: true 47 | dnsPolicy: ClusterFirstWithHostNet 48 | {{- end }} 49 | containers: 50 | - name: {{ .Chart.Name }} 51 | securityContext: 52 | {{- toYaml .Values.jvb.securityContext | nindent 12 }} 53 | image: "{{ .Values.jvb.image.repository }}:{{ default .Chart.AppVersion .Values.jvb.image.tag }}" 54 | imagePullPolicy: {{ pluck "pullPolicy" .Values.jvb.image .Values.image | first }} 55 | envFrom: 56 | - secretRef: 57 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jvb 58 | - configMapRef: 59 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common 60 | - configMapRef: 61 | name: {{ include "jitsi-meet.jvb.fullname" . }} 62 | {{- if .Values.global.releaseSecretsOverride.enabled }} 63 | {{- range .Values.global.releaseSecretsOverride.extraEnvFrom }} 64 | - {{ tpl (toYaml . ) $ | indent 12 | trim }} 65 | {{- end }} 66 | {{- end }} 67 | env: 68 | {{- if or .Values.jvb.useNodeIP .Values.jvb.publicIPs }} 69 | - name: DOCKER_HOST_ADDRESS 70 | {{- if .Values.jvb.publicIPs }} 71 | value: {{ first .Values.jvb.publicIPs | quote }} 72 | {{- else }} 73 | valueFrom: 74 | fieldRef: 75 | fieldPath: status.hostIP 76 | {{- end }} 77 | - name: JVB_ADVERTISE_IPS 78 | {{- if .Values.jvb.publicIPs }} 79 | value: {{ .Values.jvb.publicIPs | join "," | quote }} 80 | {{- else }} 81 | valueFrom: 82 | fieldRef: 83 | fieldPath: status.hostIP 84 | {{- end }} 85 | {{- else }} 86 | {{- fail "(jvb.publicIPs | jvb.useNodeIP) Please set an external IP addresses for JVB(s) or enable the Node IP autodetection!" }} 87 | {{- end }} 88 | {{- if .Values.websockets.colibri.enabled }} 89 | - name: JVB_WS_SERVER_ID 90 | valueFrom: 91 | fieldRef: 92 | fieldPath: status.podIP 93 | {{- end }} 94 | {{- if .Values.octo.enabled }} 95 | - name: JVB_OCTO_BIND_ADDRESS 96 | valueFrom: 97 | fieldRef: 98 | fieldPath: status.podIP 99 | - name: JVB_OCTO_RELAY_ID 100 | valueFrom: 101 | fieldRef: 102 | fieldPath: status.podIP 103 | {{- end }} 104 | ports: 105 | - name: rtp-udp 106 | containerPort: {{ .Values.jvb.UDPPort }} 107 | {{- if .Values.jvb.useHostPort }} 108 | hostPort: {{ .Values.jvb.UDPPort }} 109 | {{- end }} 110 | protocol: UDP 111 | {{- if .Values.websockets.colibri.enabled }} 112 | - name: colibri-ws-tcp 113 | containerPort: 9090 114 | protocol: TCP 115 | {{- end }} 116 | {{- if .Values.octo.enabled }} 117 | - name: octo 118 | containerPort: 4096 119 | protocol: TCP 120 | {{- end }} 121 | {{- with .Values.jvb.livenessProbe }} 122 | livenessProbe: 123 | {{- toYaml . | nindent 12 }} 124 | {{- end }} 125 | {{- with .Values.jvb.readinessProbe }} 126 | readinessProbe: 127 | {{- toYaml . | nindent 12 }} 128 | {{- end }} 129 | resources: 130 | {{- toYaml .Values.jvb.resources | nindent 12 }} 131 | {{- with .Values.jvb.extraVolumeMounts }} 132 | volumeMounts: 133 | {{- toYaml . | nindent 10 }} 134 | {{- end }} 135 | 136 | {{- if .Values.jvb.metrics.enabled }} 137 | - name: metrics 138 | image: {{ .Values.jvb.metrics.image.repository }}:{{ .Values.jvb.metrics.image.tag }} 139 | imagePullPolicy: {{ .Values.jvb.metrics.image.pullPolicy }} 140 | securityContext: 141 | runAsUser: 10001 142 | command: 143 | - /prometheus-jitsi-meet-exporter 144 | - -videobridge-url 145 | - http://localhost:8080/colibri/stats 146 | ports: 147 | - containerPort: 9888 148 | name: tcp-metrics 149 | protocol: TCP 150 | readinessProbe: 151 | httpGet: 152 | path: /health 153 | port: 9888 154 | initialDelaySeconds: 3 155 | periodSeconds: 5 156 | resources: 157 | {{- toYaml .Values.jvb.metrics.resources | nindent 12 }} 158 | {{- end }} 159 | 160 | {{- with .Values.jvb.nodeSelector }} 161 | nodeSelector: 162 | {{- toYaml . | nindent 8 }} 163 | {{- end }} 164 | {{- if or .Values.jvb.useHostPort .Values.jvb.affinity }} 165 | affinity: 166 | {{- if .Values.jvb.affinity }} 167 | {{- toYaml .Values.jvb.affinity | nindent 8 }} 168 | {{- else }} 169 | podAntiAffinity: 170 | requiredDuringSchedulingIgnoredDuringExecution: 171 | - labelSelector: 172 | matchExpressions: 173 | - key: app.kubernetes.io/component 174 | operator: In 175 | values: 176 | - jvb 177 | topologyKey: "kubernetes.io/hostname" 178 | {{- end }} 179 | {{- end }} 180 | {{- with .Values.jvb.tolerations }} 181 | tolerations: 182 | {{- toYaml . | nindent 8 }} 183 | {{- end }} 184 | {{- with .Values.jvb.extraVolumes }} 185 | volumes: 186 | {{- toYaml . | nindent 8 }} 187 | {{- end }} 188 | -------------------------------------------------------------------------------- /templates/jvb/metrics-prometheus.yaml: -------------------------------------------------------------------------------- 1 | {{- if and (.Values.jvb.metrics.enabled) (.Values.jvb.metrics.serviceMonitor.enabled) }} 2 | apiVersion: monitoring.coreos.com/v1 3 | kind: ServiceMonitor 4 | metadata: 5 | name: {{ template "jitsi-meet.jvb.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.jvb.labels" . | nindent 4 }} 8 | {{- with .Values.jvb.metrics.serviceMonitor.selector }} 9 | {{- toYaml . | nindent 4 }} 10 | {{- end }} 11 | spec: 12 | endpoints: 13 | - port: tcp-metrics 14 | path: /metrics 15 | {{- with .Values.jvb.metrics.serviceMonitor.honorLabels }} 16 | honorLabels: {{ . }} 17 | {{- end }} 18 | {{- with .Values.jvb.metrics.serviceMonitor.interval }} 19 | interval: {{ . }} 20 | {{- end }} 21 | selector: 22 | matchLabels: 23 | {{- include "jitsi-meet.jvb.labels" . | nindent 6 }} 24 | namespaceSelector: 25 | matchNames: 26 | - {{ .Release.Namespace }} 27 | {{- end -}} 28 | -------------------------------------------------------------------------------- /templates/jvb/metrics-service.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.jvb.metrics.enabled }} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: {{ include "jitsi-meet.jvb.fullname" . }}-metrics 6 | labels: 7 | {{- include "jitsi-meet.jvb.labels" . | nindent 4 }} 8 | spec: 9 | type: ClusterIP 10 | ports: 11 | - port: 9888 12 | protocol: TCP 13 | name: tcp-metrics 14 | selector: 15 | {{- include "jitsi-meet.jvb.selectorLabels" . | nindent 4 }} 16 | {{- end }} 17 | -------------------------------------------------------------------------------- /templates/jvb/service.yaml: -------------------------------------------------------------------------------- 1 | {{- if or (and (kindIs "invalid" .Values.jvb.service.enabled) (not (or .Values.jvb.useHostPort .Values.jvb.useHostNetwork))) .Values.jvb.service.enabled }} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: {{ include "jitsi-meet.jvb.fullname" . }} 6 | annotations: 7 | {{- range $key, $value := .Values.jvb.service.annotations }} 8 | {{ $key }}: {{ $value | quote }} 9 | {{- end }} 10 | labels: 11 | {{- include "jitsi-meet.jvb.labels" . | nindent 4 }} 12 | spec: 13 | type: {{ .Values.jvb.service.type }} 14 | {{- with .Values.jvb.service.loadBalancerIP }} 15 | loadBalancerIP: {{ . }} 16 | {{- end }} 17 | {{- with .Values.jvb.service.ipFamilyPolicy }} 18 | ipFamilyPolicy: {{ . }} 19 | {{- end }} 20 | ports: 21 | - port: {{ default 10000 .Values.jvb.UDPPort }} 22 | {{- if and .Values.jvb.nodePort (or (eq .Values.jvb.service.type "NodePort") (eq .Values.jvb.service.type "LoadBalancer")) }} 23 | nodePort: {{ .Values.jvb.nodePort }} 24 | {{- end }} 25 | protocol: UDP 26 | name: rtp-udp 27 | {{- with .Values.jvb.service.extraPorts }} 28 | {{ toYaml . | indent 4 | trim }} 29 | {{- end }} 30 | {{- with .Values.jvb.service.loadBalancerClass }} 31 | loadBalancerClass: {{ . }} 32 | {{ end }} 33 | {{- with .Values.jvb.service.externalIPs }} 34 | externalIPs: 35 | {{ toYaml . | indent 2 | trim }} 36 | {{- end }} 37 | externalTrafficPolicy: {{ .Values.jvb.service.externalTrafficPolicy }} 38 | selector: 39 | {{- include "jitsi-meet.jvb.selectorLabels" . | nindent 4 }} 40 | {{- end }} 41 | -------------------------------------------------------------------------------- /templates/jvb/xmpp-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jvb 5 | labels: 6 | {{- include "jitsi-meet.jvb.labels" . | nindent 4 }} 7 | type: Opaque 8 | data: 9 | JVB_AUTH_USER: '{{ .Values.jvb.xmpp.user | b64enc }}' 10 | JVB_AUTH_PASSWORD: '{{ default (randAlphaNum 10) .Values.jvb.xmpp.password | b64enc }}' 11 | -------------------------------------------------------------------------------- /templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create -}} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | name: {{ include "jitsi-meet.serviceAccountName" . }} 6 | labels: 7 | {{- include "jitsi-meet.labels" . | nindent 4 }} 8 | {{- with .Values.serviceAccount.annotations }} 9 | annotations: 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- end -}} 13 | -------------------------------------------------------------------------------- /templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "jitsi-meet.web.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "jitsi-meet.web.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "jitsi-meet.web.fullname" . }}:{{ .Values.web.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /templates/transcriber/_helper.tpl: -------------------------------------------------------------------------------- 1 | 2 | {{- define "jitsi-meet.transcriber.fullname" -}} 3 | {{ include "jitsi-meet.fullname" . }}-transcriber 4 | {{- end -}} 5 | 6 | {{- define "jitsi-meet.transcriber.labels" -}} 7 | {{ include "jitsi-meet.labels" . }} 8 | app.kubernetes.io/component: transcriber 9 | {{- end -}} 10 | 11 | {{- define "jitsi-meet.transcriber.selectorLabels" -}} 12 | {{ include "jitsi-meet.selectorLabels" . }} 13 | app.kubernetes.io/component: transcriber 14 | {{- end -}} 15 | 16 | {{- define "jitsi-meet.transcriber.secret" -}} 17 | {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-transcriber 18 | {{- end -}} 19 | -------------------------------------------------------------------------------- /templates/transcriber/configmap.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.transcriber.enabled }} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ include "jitsi-meet.transcriber.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.transcriber.labels" . | nindent 4 }} 8 | data: 9 | XMPP_SERVER: '{{ include "jitsi-meet.xmpp.server" . }}' 10 | {{- with .Values.transcriber.whisper.customService }} 11 | JIGASI_TRANSCRIBER_CUSTOM_SERVICE: {{ . | quote }} 12 | {{- end }} 13 | {{- with .Values.transcriber.whisper.url }} 14 | JIGASI_TRANSCRIBER_WHISPER_URL: {{ . | quote }} 15 | {{- end }} 16 | {{- range $key, $value := .Values.transcriber.extraEnvs }} 17 | {{- if not (kindIs "invalid" $value) }} 18 | {{ $key }}: {{ tpl $value $ | quote }} 19 | {{- end }} 20 | {{- end }} 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /templates/transcriber/deployment.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.transcriber.enabled (not .Values.transcriber.useExternalTranscriber) }} 2 | apiVersion: apps/v1 3 | kind: Deployment 4 | metadata: 5 | name: {{ include "jitsi-meet.transcriber.fullname" . }} 6 | labels: 7 | {{- include "jitsi-meet.transcriber.labels" . | nindent 4 }} 8 | {{- with .Values.transcriber.annotations }} 9 | annotations: 10 | {{ toYaml . | nindent 4 }} 11 | {{- end }} 12 | spec: 13 | replicas: {{ .Values.transcriber.replicaCount | default 1 }} 14 | selector: 15 | matchLabels: 16 | {{- include "jitsi-meet.transcriber.selectorLabels" . | nindent 6 }} 17 | template: 18 | metadata: 19 | labels: 20 | {{- include "jitsi-meet.transcriber.selectorLabels" . | nindent 8 }} 21 | {{- range $label, $value := mergeOverwrite .Values.global.podLabels .Values.transcriber.podLabels }} 22 | {{ $label }}: {{ $value }} 23 | {{- end }} 24 | annotations: 25 | checksum/config: {{ include (print $.Template.BasePath "/transcriber/configmap.yaml") . | sha256sum }} 26 | checksum/secret: {{ include (print $.Template.BasePath "/transcriber/xmpp-secret.yaml") . | sha256sum }} 27 | {{- range $annotation, $value := mergeOverwrite .Values.global.podAnnotations .Values.transcriber.podAnnotations }} 28 | {{ $annotation }}: {{ $value | quote }} 29 | {{- end }} 30 | spec: 31 | {{- with .Values.imagePullSecrets }} 32 | imagePullSecrets: 33 | {{- toYaml . | nindent 8 }} 34 | {{- end }} 35 | serviceAccountName: {{ include "jitsi-meet.serviceAccountName" . }} 36 | securityContext: 37 | {{- toYaml .Values.transcriber.podSecurityContext | nindent 8 }} 38 | initContainers: 39 | - name: init-prosody 40 | image: busybox:1.36 41 | command: 42 | - sh 43 | - -c 44 | - | 45 | echo "Waiting for Prosody on port 5280"; 46 | while ! nc -z -w 1 {{ include "jitsi-meet.xmpp.server" . }} 5280; do 47 | sleep 1; 48 | done; 49 | echo ">> Prosody is available" 50 | containers: 51 | - name: {{ .Chart.Name }}-transcriber 52 | securityContext: 53 | {{- toYaml .Values.transcriber.securityContext | nindent 12 }} 54 | image: "{{ .Values.transcriber.image.repository }}:{{ default .Chart.AppVersion .Values.transcriber.image.tag }}" 55 | imagePullPolicy: {{ pluck "pullPolicy" .Values.transcriber.image .Values.image | first }} 56 | envFrom: 57 | - secretRef: 58 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-transcriber 59 | - secretRef: 60 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-jigasi 61 | - configMapRef: 62 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common 63 | - configMapRef: 64 | name: {{ include "jitsi-meet.transcriber.fullname" . }} 65 | {{- if .Values.global.releaseSecretsOverride.enabled }} 66 | {{- range .Values.global.releaseSecretsOverride.extraEnvFrom }} 67 | - {{ tpl (toYaml .) $ | indent 12 | trim }} 68 | {{- end }} 69 | {{- end }} 70 | env: 71 | - name: ENABLE_TRANSCRIPTIONS 72 | value: "1" 73 | - name: JIGASI_MODE 74 | value: "transcriber" 75 | - name: JIGASI_ENABLE_REST 76 | value: "1" 77 | {{- with .Values.transcriber.livenessProbe }} 78 | livenessProbe: 79 | {{- toYaml . | nindent 12 }} 80 | {{- end }} 81 | {{- with .Values.transcriber.readinessProbe }} 82 | readinessProbe: 83 | {{- toYaml . | nindent 12 }} 84 | {{- end }} 85 | resources: 86 | {{- toYaml .Values.transcriber.resources | nindent 12 }} 87 | volumeMounts: 88 | {{- if .Values.transcriber.persistence.enabled }} 89 | - name: transcriber-data 90 | mountPath: /tmp/transcripts 91 | {{- end }} 92 | volumes: 93 | - name: transcriber-data 94 | {{- if .Values.transcriber.persistence.enabled }} 95 | persistentVolumeClaim: 96 | claimName: {{ .Values.transcriber.persistence.existingClaim | default (include "jitsi-meet.transcriber.fullname" .) }} 97 | {{- else }} 98 | emptyDir: {} 99 | {{- end }} 100 | 101 | {{- with .Values.transcriber.nodeSelector }} 102 | nodeSelector: 103 | {{- toYaml . | nindent 8 }} 104 | {{- end }} 105 | {{- with .Values.transcriber.affinity }} 106 | affinity: 107 | {{- toYaml . | nindent 8 }} 108 | {{- end }} 109 | {{- with .Values.transcriber.tolerations }} 110 | tolerations: 111 | {{- toYaml . | nindent 8 }} 112 | {{- end }} 113 | {{- end }} 114 | -------------------------------------------------------------------------------- /templates/transcriber/pvc-transcriber.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.transcriber.persistence.enabled (not .Values.transcriber.persistence.existingClaim) }} 2 | apiVersion: v1 3 | kind: PersistentVolumeClaim 4 | metadata: 5 | name: {{ include "jitsi-meet.transcriber.fullname" . }} 6 | labels: 7 | app.kubernetes.io/name: jitsi-transcriber 8 | spec: 9 | accessModes: 10 | - ReadWriteMany 11 | storageClassName: {{ .Values.transcriber.persistence.storageClass | quote }} 12 | resources: 13 | requests: 14 | storage: {{ .Values.transcriber.persistence.size | default "10Gi" }} 15 | {{- end }} 16 | 17 | -------------------------------------------------------------------------------- /templates/transcriber/xmpp-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-transcriber 5 | type: Opaque 6 | data: 7 | {{- if .Values.transcriber.enabled }} 8 | JIGASI_TRANSCRIBER_USER: {{ .Values.transcriber.xmpp.user | b64enc | quote }} 9 | JIGASI_TRANSCRIBER_PASSWORD: {{ default (randAlphaNum 10) .Values.transcriber.xmpp.password | b64enc | quote }} 10 | {{- if not .Values.jigasi.enabled }} 11 | JIGASI_XMPP_USER: {{ .Values.jigasi.xmpp.user | b64enc | quote }} 12 | JIGASI_XMPP_PASSWORD: {{ default (randAlphaNum 10) .Values.jigasi.xmpp.password | b64enc | quote }} 13 | {{- end }} 14 | {{- end }} 15 | 16 | -------------------------------------------------------------------------------- /templates/web/_helper.tpl: -------------------------------------------------------------------------------- 1 | 2 | {{- define "jitsi-meet.web.fullname" -}} 3 | {{ include "jitsi-meet.fullname" . }}-web 4 | {{- end -}} 5 | 6 | {{- define "jitsi-meet.web.labels" -}} 7 | {{ include "jitsi-meet.labels" . }} 8 | app.kubernetes.io/component: web 9 | {{- end -}} 10 | 11 | {{- define "jitsi-meet.web.selectorLabels" -}} 12 | {{ include "jitsi-meet.selectorLabels" . }} 13 | app.kubernetes.io/component: web 14 | {{- end -}} 15 | 16 | -------------------------------------------------------------------------------- /templates/web/configmap-conffiles.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.web.fullname" . }}-conffiles 5 | labels: 6 | {{- include "jitsi-meet.web.labels" . | nindent 4 }} 7 | data: 8 | custom-config.js: | 9 | {{- if .Values.web.custom.configs._custom_config_js }} 10 | {{- .Values.web.custom.configs._custom_config_js | nindent 4 }} 11 | {{- else }} 12 | # Not providing /config/custom-config.js 13 | {{ end }} 14 | custom-interface_config.js: | 15 | {{- if .Values.web.custom.configs._custom_interface_config_js }} 16 | {{- .Values.web.custom.configs._custom_interface_config_js | nindent 4 }} 17 | {{- else }} 18 | # Not providing /config/custom-interface_config.js 19 | {{ end }} 20 | default: | 21 | {{- if .Values.web.custom.defaults._default }} 22 | {{- .Values.web.custom.defaults._default | nindent 4 }} 23 | {{- else }} 24 | # Using web /defaults/default from container image 25 | {{ end }} 26 | ffdhe2048.txt: | 27 | {{- if .Values.web.custom.defaults._ffdhe2048_txt }} 28 | {{- .Values.web.custom.defaults._ffdhe2048_txt | nindent 4 }} 29 | {{- else }} 30 | # Using web /defaults/ffdhe2048.txt from container image 31 | {{ end }} 32 | interface_config.js: | 33 | {{- if .Values.web.custom.defaults._interface_config_js }} 34 | {{- .Values.web.custom.defaults._interface_config_js | nindent 4 }} 35 | {{- else }} 36 | # Using web /defaults/interface_config.js from container image 37 | {{ end }} 38 | meet.conf: | 39 | {{- if .Values.web.custom.defaults._meet_conf }} 40 | {{- .Values.web.custom.defaults._meet_conf | nindent 4 }} 41 | {{- else }} 42 | # Using web /defaults/meet.conf from container image 43 | {{ end }} 44 | nginx.conf: | 45 | {{- if .Values.web.custom.defaults._nginx_conf }} 46 | {{- .Values.web.custom.defaults._nginx_conf | nindent 4 }} 47 | {{- else }} 48 | # Using web /defaults/nginx.conf from container image 49 | {{ end }} 50 | settings-config.js: | 51 | {{- if .Values.web.custom.defaults._settings_config_js }} 52 | {{- .Values.web.custom.defaults._settings_config_js | nindent 4 }} 53 | {{- else }} 54 | # Using web /defaults/settings-config.js from container image 55 | {{ end }} 56 | ssl.conf: | 57 | {{- if .Values.web.custom.defaults._ssl_conf }} 58 | {{- .Values.web.custom.defaults._ssl_conf | nindent 4 }} 59 | {{- else }} 60 | # Using web /defaults/ssl.conf from container image 61 | {{ end }} 62 | system-config.js: | 63 | {{- if .Values.web.custom.defaults._system_config_js }} 64 | {{- .Values.web.custom.defaults._system_config_js | nindent 4 }} 65 | {{- else }} 66 | # Using web /defaults/system-config.js from container image 67 | {{ end }} 68 | -------------------------------------------------------------------------------- /templates/web/configmap-init.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.web.fullname" . }}-init 5 | labels: 6 | {{- include "jitsi-meet.web.labels" . | nindent 4 }} 7 | data: 8 | 10-config: | 9 | {{- if .Values.web.custom.contInit._10_config }} 10 | {{- .Values.web.custom.contInit._10_config | nindent 4 }} 11 | {{- else }} 12 | # Using web /etc/cont-init.d/10-config from container image 13 | {{ end }} 14 | -------------------------------------------------------------------------------- /templates/web/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "jitsi-meet.web.fullname" . }} 5 | labels: 6 | {{- include "jitsi-meet.web.labels" . | nindent 4 }} 7 | data: 8 | DISABLE_HTTPS: {{ ternary "0" "1" .Values.web.httpsEnabled | quote }} 9 | ENABLE_HTTP_REDIRECT: {{ ternary "1" "0" .Values.web.httpRedirect | quote }} 10 | JICOFO_AUTH_USER: focus 11 | XMPP_BOSH_URL_BASE: 'http://{{ include "jitsi-meet.xmpp.server" . }}:{{ index .Values.prosody.service.ports "bosh-insecure" }}' 12 | {{- if .Values.web.resolverIP }} 13 | NGINX_RESOLVER: {{ .Values.web.resolverIP }} 14 | {{- end }} 15 | {{- range $key, $value := .Values.web.extraEnvs }} 16 | {{- if not (kindIs "invalid" $value) }} 17 | {{ $key }}: {{ tpl $value $ | quote }} 18 | {{- end }} 19 | {{- end }} 20 | -------------------------------------------------------------------------------- /templates/web/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ include "jitsi-meet.web.fullname" . }} 5 | labels: 6 | {{- include "jitsi-meet.web.labels" . | nindent 4 }} 7 | {{- with .Values.web.annotations }} 8 | annotations: 9 | {{ toYaml . | nindent 4 }} 10 | {{- end }} 11 | spec: 12 | replicas: {{ .Values.web.replicaCount }} 13 | selector: 14 | matchLabels: 15 | {{- include "jitsi-meet.web.selectorLabels" . | nindent 6 }} 16 | template: 17 | metadata: 18 | labels: 19 | {{- include "jitsi-meet.web.selectorLabels" . | nindent 8 }} 20 | {{- range $label, $value := mergeOverwrite .Values.global.podLabels .Values.web.podLabels }} 21 | {{ $label }}: {{ $value }} 22 | {{- end }} 23 | annotations: 24 | checksum/config: {{ include (print $.Template.BasePath "/web/configmap.yaml") . | sha256sum }} 25 | {{- range $annotation, $value := mergeOverwrite .Values.global.podAnnotations .Values.web.podAnnotations }} 26 | {{ $annotation }}: {{ $value | quote }} 27 | {{- end }} 28 | spec: 29 | {{- with .Values.imagePullSecrets }} 30 | imagePullSecrets: 31 | {{- toYaml . | nindent 8 }} 32 | {{- end }} 33 | serviceAccountName: {{ include "jitsi-meet.serviceAccountName" . }} 34 | securityContext: 35 | {{- toYaml .Values.web.podSecurityContext | nindent 8 }} 36 | containers: 37 | - name: {{ .Chart.Name }} 38 | securityContext: 39 | {{- toYaml .Values.web.securityContext | nindent 12 }} 40 | image: "{{ .Values.web.image.repository }}:{{ default .Chart.AppVersion .Values.web.image.tag }}" 41 | imagePullPolicy: {{ pluck "pullPolicy" .Values.web.image .Values.image | first }} 42 | envFrom: 43 | - configMapRef: 44 | name: {{ include "jitsi-meet.web.fullname" . }} 45 | - configMapRef: 46 | name: {{ include "call-nested" (list . "prosody" "prosody.fullname") }}-common 47 | {{- if .Values.global.releaseSecretsOverride.enabled }} 48 | {{- range .Values.global.releaseSecretsOverride.extraEnvFrom }} 49 | - {{ tpl (toYaml . ) $ | indent 12 | trim }} 50 | {{- end }} 51 | {{- end }} 52 | ports: 53 | - name: http 54 | containerPort: 80 55 | protocol: TCP 56 | - name: https 57 | containerPort: 443 58 | protocol: TCP 59 | {{- with .Values.web.livenessProbe }} 60 | livenessProbe: 61 | {{- toYaml . | nindent 12 }} 62 | {{- end }} 63 | {{- with .Values.web.readinessProbe }} 64 | readinessProbe: 65 | {{- toYaml . | nindent 12 }} 66 | {{- end }} 67 | resources: 68 | {{- toYaml .Values.web.resources | nindent 12 }} 69 | volumeMounts: 70 | - name: config 71 | mountPath: /config 72 | {{- if .Values.web.custom.contInit._10_config }} 73 | - name: custom-init 74 | mountPath: /etc/cont-init.d/10-config 75 | subPath: 10-config 76 | {{- end }} 77 | {{- if .Values.web.custom.configs._custom_config_js }} 78 | - name: custom-conffiles 79 | mountPath: /config/custom-config.js 80 | subPath: custom-config.js 81 | {{- end }} 82 | {{- if .Values.web.custom.configs._custom_interface_config_js }} 83 | - name: custom-conffiles 84 | mountPath: /config/custom-interface_config.js 85 | subPath: custom-interface_config.js 86 | {{- end }} 87 | {{- if .Values.web.custom.defaults._default }} 88 | - name: custom-conffiles 89 | mountPath: /defaults/default 90 | subPath: default 91 | {{- end }} 92 | {{- if .Values.web.custom.defaults._ffdhe2048_txt }} 93 | - name: custom-conffiles 94 | mountPath: /defaults/ffdhe2048.txt 95 | subPath: ffdhe2048.txt 96 | {{- end }} 97 | {{- if .Values.web.custom.defaults._interface_config_js }} 98 | - name: custom-conffiles 99 | mountPath: /defaults/interface_config.js 100 | subPath: interface_config.js 101 | {{- end }} 102 | {{- if .Values.web.custom.defaults._meet_conf }} 103 | - name: custom-conffiles 104 | mountPath: /defaults/meet.conf 105 | subPath: meet.conf 106 | {{- end }} 107 | {{- if .Values.web.custom.defaults._nginx_conf }} 108 | - name: custom-conffiles 109 | mountPath: /defaults/nginx.conf 110 | subPath: nginx.conf 111 | {{- end }} 112 | {{- if .Values.web.custom.defaults._settings_config_js }} 113 | - name: custom-conffiles 114 | mountPath: /defaults/settings-config.js 115 | subPath: settings-config.js 116 | {{- end }} 117 | {{- if .Values.web.custom.defaults._ssl_conf }} 118 | - name: custom-conffiles 119 | mountPath: /defaults/ssl.conf 120 | subPath: ssl.conf 121 | {{- end }} 122 | {{- if .Values.web.custom.defaults._system_config_js }} 123 | - name: custom-conffiles 124 | mountPath: /defaults/system-config.js 125 | subPath: system-config.js 126 | {{- end }} 127 | {{- if .Values.transcriber.persistence.enabled }} 128 | - name: transcriber-data 129 | mountPath: /usr/share/jitsi-meet/transcripts 130 | readOnly: true 131 | {{- end }} 132 | {{- with .Values.web.extraVolumeMounts }} 133 | {{- toYaml . | nindent 10 }} 134 | {{- end }} 135 | 136 | {{- with .Values.web.nodeSelector }} 137 | nodeSelector: 138 | {{- toYaml . | nindent 8 }} 139 | {{- end }} 140 | {{- with .Values.web.affinity }} 141 | affinity: 142 | {{- toYaml . | nindent 8 }} 143 | {{- end }} 144 | {{- with .Values.web.tolerations }} 145 | tolerations: 146 | {{- toYaml . | nindent 8 }} 147 | {{- end }} 148 | volumes: 149 | - name: config 150 | emptyDir: {} 151 | - name: custom-init 152 | configMap: 153 | defaultMode: 493 154 | name: {{ include "jitsi-meet.web.fullname" . }}-init 155 | items: 156 | - key: 10-config 157 | path: 10-config 158 | - name: custom-conffiles 159 | configMap: 160 | name: {{ include "jitsi-meet.web.fullname" . }}-conffiles 161 | items: 162 | - key: custom-config.js 163 | path: custom-config.js 164 | - key: custom-interface_config.js 165 | path: custom-interface_config.js 166 | - key: default 167 | path: default 168 | - key: ffdhe2048.txt 169 | path: ffdhe2048.txt 170 | - key: interface_config.js 171 | path: interface_config.js 172 | - key: meet.conf 173 | path: meet.conf 174 | - key: nginx.conf 175 | path: nginx.conf 176 | - key: settings-config.js 177 | path: settings-config.js 178 | - key: ssl.conf 179 | path: ssl.conf 180 | - key: system-config.js 181 | path: system-config.js 182 | - name: transcriber-data 183 | {{- if .Values.transcriber.persistence.enabled }} 184 | persistentVolumeClaim: 185 | claimName: {{ .Values.transcriber.persistence.existingClaim | default (include "jitsi-meet.transcriber.fullname" .) }} 186 | {{- else }} 187 | emptyDir: {} 188 | {{- end }} 189 | {{- with .Values.web.extraVolumes }} 190 | {{- toYaml . | nindent 6 }} 191 | {{- end }} 192 | -------------------------------------------------------------------------------- /templates/web/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "jitsi-meet.web.fullname" . }} 5 | annotations: 6 | {{- range $key, $value := .Values.web.service.annotations }} 7 | {{ $key }}: {{ $value | quote }} 8 | {{- end }} 9 | 10 | labels: 11 | {{- include "jitsi-meet.web.labels" . | nindent 4 }} 12 | spec: 13 | type: {{ .Values.web.service.type }} 14 | ports: 15 | - port: {{ .Values.web.service.port }} 16 | protocol: TCP 17 | name: http 18 | {{- if .Values.web.service.nodePort }} 19 | nodePort: {{ index .Values.web.service.nodePort }} 20 | {{- end }} 21 | {{- with .Values.web.service.externalIPs }} 22 | externalIPs: 23 | {{ toYaml . | indent 2 | trim }} 24 | {{- end }} 25 | selector: 26 | {{- include "jitsi-meet.web.selectorLabels" . | nindent 4 }} 27 | -------------------------------------------------------------------------------- /values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for jitsi-meet. 2 | # This is a YAML-formatted file. 3 | # Declare variables to be passed into your templates. 4 | 5 | global: 6 | # Set your cluster's DNS domain here. 7 | # "cluster.local" should work for most environments. 8 | # Set to "" to disable the use of FQDNs (default in older chart versions). 9 | clusterDomain: cluster.local 10 | podLabels: {} 11 | podAnnotations: {} 12 | releaseSecretsOverride: 13 | enabled: false 14 | #Support environment variables from pre-created secrets, such as 1Password operator 15 | #extraEnvFrom: 16 | # - secretRef: 17 | # name: '{{ include "prosody.fullname" . }}-overrides' 18 | # optional: true 19 | 20 | imagePullSecrets: [] 21 | nameOverride: "" 22 | fullnameOverride: "" 23 | 24 | enableAuth: false 25 | enableGuests: true 26 | # Where Jitsi Web UI is made available 27 | # such as jitsi.example.com 28 | publicURL: "" 29 | 30 | tz: Europe/Amsterdam 31 | 32 | image: 33 | pullPolicy: IfNotPresent 34 | 35 | ## WebSocket configuration: 36 | # 37 | # Both Colibri and XMPP WebSockets are disabled by default, 38 | # since some LoadBalancer / Reverse Proxy setups can't pass 39 | # WebSocket connections properly, which might result in breakage 40 | # for some clients. 41 | # 42 | # Enable both Colibri and XMPP WebSockets to replicate the current 43 | # upstream `meet.jit.si` setup. Keep both disabled to replicate 44 | # older setups which might be more compatible in some cases. 45 | websockets: 46 | ## Colibri (JVB signalling): 47 | colibri: 48 | enabled: false 49 | ## XMPP (Prosody signalling): 50 | xmpp: 51 | enabled: false 52 | 53 | web: 54 | replicaCount: 1 55 | image: 56 | repository: jitsi/web 57 | 58 | ## Override the image-provided configuration files: 59 | # See https://github.com/jitsi/docker-jitsi-meet/tree/master/web/rootfs 60 | custom: 61 | contInit: 62 | _10_config: "" 63 | defaults: 64 | _default: "" 65 | _ffdhe2048_txt: "" 66 | _interface_config_js: "" 67 | _meet_conf: "" 68 | _nginx_conf: "" 69 | _settings_config_js: "" 70 | _ssl_conf: "" 71 | _system_config_js: "" 72 | configs: 73 | _custom_interface_config_js: "" 74 | _custom_config_js: "" 75 | 76 | extraEnvs: {} 77 | service: 78 | type: ClusterIP 79 | port: 80 80 | ## If you want to expose the Jitsi Web service directly 81 | # (bypassing the Ingress Controller), use this: 82 | # 83 | # type: NodePort 84 | # nodePort: 30580 85 | # port: 80 86 | externalIPs: [] 87 | ## Annotations to be added to the service (if LoadBalancer is used) 88 | # An example below is needed for GKE IAP enablement 89 | annotations: {} 90 | # beta.cloud.google.com/backend-config: backend-config-iap 91 | 92 | ingress: 93 | enabled: false 94 | # ingressClassName: "nginx-ingress-0" 95 | annotations: {} 96 | # kubernetes.io/tls-acme: "true" 97 | hosts: 98 | - host: jitsi.local 99 | paths: ['/'] 100 | tls: [] 101 | # - secretName: jitsi-web-certificate 102 | # hosts: 103 | # - jitsi.local 104 | 105 | # Useful for ingresses that don't support http-to-https redirect by themself, (namely: GKE), 106 | httpRedirect: false 107 | 108 | # When tls-termination by the ingress is not wanted, enable this and set web.service.type=Loadbalancer 109 | httpsEnabled: false 110 | 111 | ## Resolver IP for nginx. 112 | # 113 | # Starting with version `stable-8044`, the web container can 114 | # auto-detect the nameserver from /etc/resolv.conf. 115 | # Use this option if you want to override the nameserver IP. 116 | # 117 | # resolverIP: 10.43.0.10 118 | 119 | livenessProbe: 120 | httpGet: 121 | path: / 122 | port: 80 123 | readinessProbe: 124 | httpGet: 125 | path: / 126 | port: 80 127 | 128 | podLabels: {} 129 | podAnnotations: {} 130 | podSecurityContext: {} 131 | # fsGroup: 2000 132 | 133 | securityContext: {} 134 | # capabilities: 135 | # drop: 136 | # - ALL 137 | # readOnlyRootFilesystem: true 138 | # runAsNonRoot: true 139 | # runAsUser: 1000 140 | 141 | resources: {} 142 | # We usually recommend not to specify default resources and to leave this as a conscious 143 | # choice for the user. This also increases chances charts run on environments with little 144 | # resources, such as Minikube. If you do want to specify resources, uncomment the following 145 | # lines, adjust them as necessary, and remove the curly braces after 'resources:'. 146 | # limits: 147 | # cpu: 100m 148 | # memory: 128Mi 149 | # requests: 150 | # cpu: 100m 151 | # memory: 128Mi 152 | 153 | nodeSelector: {} 154 | 155 | tolerations: [] 156 | 157 | affinity: {} 158 | 159 | jicofo: 160 | replicaCount: 1 161 | image: 162 | repository: jitsi/jicofo 163 | 164 | ## Override the image-provided configuration files: 165 | # See https://github.com/jitsi/docker-jitsi-meet/tree/master/jicofo/rootfs 166 | custom: 167 | contInit: 168 | _10_config: "" 169 | defaults: 170 | _jicofo_conf: "" 171 | _logging_properties: "" 172 | 173 | xmpp: 174 | password: 175 | componentSecret: 176 | 177 | livenessProbe: 178 | tcpSocket: 179 | port: 8888 180 | 181 | readinessProbe: 182 | tcpSocket: 183 | port: 8888 184 | 185 | podLabels: {} 186 | podAnnotations: {} 187 | podSecurityContext: {} 188 | securityContext: {} 189 | resources: {} 190 | nodeSelector: {} 191 | tolerations: [] 192 | affinity: {} 193 | extraEnvs: {} 194 | 195 | metrics: 196 | enabled: false 197 | image: 198 | repository: prayagsingh/prometheus-jicofo-exporter 199 | tag: "1.3.2" 200 | resources: {} 201 | 202 | jvb: 203 | replicaCount: 1 204 | image: 205 | repository: jitsi/jvb 206 | 207 | xmpp: 208 | user: jvb 209 | password: 210 | 211 | ## Set public IP addresses to be advertised by JVB. 212 | # You can specify your nodes' IP addresses, 213 | # or IP addresses of proxies/LoadBalancers used for your 214 | # Jitsi Meet installation. Or both! 215 | # 216 | # Note that only the first IP address will be used for legacy 217 | # `DOCKER_HOST_ADDRESS` environment variable. 218 | # 219 | # publicIPs: 220 | # - 1.2.3.4 221 | # - 5.6.7.8 222 | ## Alternative option: auto-detect Node's external IP address. 223 | # Recommended for OCTO setups (with either NodePort service 224 | # or hostPort enabled) where every JVB pod should announce it's 225 | # own IP address only. 226 | useNodeIP: false 227 | ## Use a STUN server to help some users punch through some 228 | # especially nasty NAT setups. Usually makes sense for P2P calls. 229 | stunServers: 'meet-jit-si-turnrelay.jitsi.net:443' 230 | ## Try to use the hostPort feature: 231 | # (might not be supported by some clouds or CNI engines) 232 | useHostPort: false 233 | ## Use host's network namespace: 234 | # (not recommended, but might help for some cases) 235 | useHostNetwork: false 236 | ## UDP transport port: 237 | UDPPort: 10000 238 | ## Use a pre-defined external port for NodePort or LoadBalancer service, 239 | # if needed. Will allocate a random port from allowed range if unset. 240 | # (Default NodePort range for K8s is 30000-32767) 241 | # nodePort: 10000 242 | service: 243 | enabled: 244 | type: ClusterIP 245 | externalTrafficPolicy: Cluster 246 | externalIPs: [] 247 | ## Optional: Specifies the LoadBalancer controller to use (since K8s v1.24). 248 | # If left empty (null), the default cluster controller will be used. 249 | # Example values: "service.k8s.aws/nlb", "loxilb.io/loxilb" 250 | # loadBalancerClass: null 251 | ## If type is set to LoadBalancer and the cluster is dual stack, ipFamilyPolicy can be set to enable dual stack 252 | # addressing for the service. 253 | # ipFamilyPolicy: PreferDualStack 254 | ## Annotations to be added to the service (if LoadBalancer is used) 255 | # An example below is needed for DigitalOcean managed k8s setups 256 | # with a LoadBalancer service, so that DO's external LB can perform 257 | # health checks on JVB. 258 | annotations: {} 259 | # service.beta.kubernetes.io/do-loadbalancer-healthcheck-port: "8080" 260 | # service.beta.kubernetes.io/do-loadbalancer-healthcheck-protocol: "tcp" 261 | ## Add extra ports to the service. 262 | # An example below is needed for DigitalOcean managed k8s setups. 263 | extraPorts: [] 264 | # - name: http-healthcheck 265 | # port: 8080 266 | # protocol: TCP 267 | 268 | breweryMuc: jvbbrewery 269 | 270 | livenessProbe: 271 | httpGet: 272 | path: /about/health 273 | port: 8080 274 | readinessProbe: 275 | httpGet: 276 | path: /about/health 277 | port: 8080 278 | 279 | podLabels: {} 280 | podAnnotations: {} 281 | podSecurityContext: {} 282 | securityContext: {} 283 | resources: {} 284 | nodeSelector: {} 285 | tolerations: [] 286 | affinity: {} 287 | extraEnvs: {} 288 | 289 | metrics: 290 | enabled: false 291 | image: 292 | repository: docker.io/systemli/prometheus-jitsi-meet-exporter 293 | tag: 1.2.3 294 | pullPolicy: IfNotPresent 295 | 296 | resources: 297 | requests: 298 | cpu: 10m 299 | memory: 16Mi 300 | limits: 301 | cpu: 20m 302 | memory: 32Mi 303 | 304 | prometheusAnnotations: false 305 | serviceMonitor: 306 | enabled: true 307 | selector: 308 | release: prometheus-operator 309 | interval: 10s 310 | # honorLabels: false 311 | 312 | grafanaDashboards: 313 | enabled: false 314 | labels: 315 | grafana_dashboard: "1" 316 | annotations: {} 317 | 318 | octo: 319 | enabled: false 320 | 321 | jigasi: 322 | ## Enabling Jigasi will allow regular SIP clients to join Jitsi meetings 323 | enabled: false 324 | 325 | ## Use external Jigasi installation. 326 | ## This setting skips the creation of Jigasi Deployment altogether, 327 | ## instead creating just the config secret and enabling services. 328 | ## Defaults to disabled (use bundled Jigasi). 329 | useExternalJigasi: false 330 | 331 | replicaCount: 1 332 | image: 333 | repository: jitsi/jigasi 334 | 335 | breweryMuc: jigasibrewery 336 | 337 | ## Jigasi XMPP user credentials 338 | xmpp: 339 | user: jigasi 340 | password: 341 | 342 | livenessProbe: 343 | httpGet: 344 | path: /about/health 345 | port: 8788 346 | httpHeaders: 347 | - name: Accept 348 | value: application/json 349 | readinessProbe: 350 | httpGet: 351 | path: /about/health 352 | port: 8788 353 | httpHeaders: 354 | - name: Accept 355 | value: application/json 356 | 357 | podLabels: {} 358 | podAnnotations: {} 359 | podSecurityContext: {} 360 | securityContext: {} 361 | resources: {} 362 | nodeSelector: {} 363 | tolerations: [] 364 | affinity: {} 365 | extraEnvs: {} 366 | 367 | transcriber: 368 | ## Enabling Transcriber will allow nearly real-time transcription. 369 | enabled: false 370 | 371 | ## Use external Transcriber installation. 372 | ## This setting skips the creation of Transcriber Deployment altogether, 373 | ## instead creating just the config secret and enabling services. 374 | ## Defaults to disabled (use bundled Trabsciber). 375 | useExternalTranscriber: false 376 | 377 | replicaCount: 1 378 | image: 379 | repository: jitsi/jigasi 380 | 381 | breweryMuc: jigasibrewery 382 | 383 | ## Transcriber XMPP user credentials 384 | xmpp: 385 | user: transcriber 386 | password: "" 387 | 388 | persistence: 389 | enabled: false 390 | # storageClass: "" 391 | # size: 10Gi 392 | # existingClaim: "" 393 | 394 | whisper: 395 | customService: "" 396 | url: "" 397 | 398 | livenessProbe: 399 | httpGet: 400 | path: /about/health 401 | port: 8788 402 | httpHeaders: 403 | - name: Accept 404 | value: application/json 405 | readinessProbe: 406 | httpGet: 407 | path: /about/health 408 | port: 8788 409 | httpHeaders: 410 | - name: Accept 411 | value: application/json 412 | 413 | podLabels: {} 414 | podAnnotations: {} 415 | podSecurityContext: {} 416 | securityContext: {} 417 | resources: {} 418 | nodeSelector: {} 419 | tolerations: [] 420 | affinity: {} 421 | extraEnvs: {} 422 | 423 | jibri: 424 | ## Enabling Jibri will allow users to record 425 | ## and/or stream their meetings (e.g. to YouTube). 426 | enabled: false 427 | 428 | ## Use external Jibri installation. 429 | ## This setting skips the creation of Jibri Deployment altogether, 430 | ## instead creating just the config secret 431 | ## and enabling recording/streaming services. 432 | ## Defaults to disabled (use bundled Jibri). 433 | useExternalJibri: false 434 | 435 | ## Enable single-use mode for Jibri. 436 | ## With this setting enabled, every Jibri instance 437 | ## will become "expired" after being used once (successfully or not) 438 | ## and cleaned up (restarted) by Kubernetes. 439 | ## 440 | ## Note that detecting expired Jibri, restarting and registering it 441 | ## takes some time, so you'll have to make sure you have enough 442 | ## instances at your disposal. 443 | ## You might also want to make LivenessProbe fail faster. 444 | singleUseMode: false 445 | 446 | ## Enable recording service. 447 | ## Set this to true/false to enable/disable local recordings. 448 | ## Defaults to enabled (allow local recordings). 449 | recording: true 450 | 451 | ## Enable livestreaming service. 452 | ## Set this to true/false to enable/disable live streams. 453 | ## Defaults to disabled (livestreaming is forbidden). 454 | livestreaming: false 455 | 456 | ## Enable multiple Jibri instances. 457 | ## If enabled (i.e. set to 2 or more), each Jibri instance 458 | ## will get an ID assigned to it, based on pod name. 459 | ## Multiple replicas are recommended for single-use mode. 460 | replicaCount: 1 461 | 462 | ## Enable persistent storage for local recordings. 463 | ## If disabled, jibri pod will use a transient 464 | ## emptyDir-backed storage instead. 465 | persistence: 466 | enabled: false 467 | size: 4Gi 468 | ## Set this to existing PVC name if you have one. 469 | existingClaim: 470 | storageClassName: 471 | 472 | shm: 473 | ## Set to true to enable "/dev/shm" mount. 474 | ## May be required by built-in Chromium. 475 | enabled: false 476 | ## If "true", will use host's shared memory dir, 477 | ## and if "false" — an emptyDir mount. 478 | # useHost: false 479 | # size: 2Gi 480 | 481 | ## Configure the update strategy for Jibri deployment. 482 | ## This may be useful depending on your persistence settings, 483 | ## e.g. when you use ReadWriteOnce PVCs. 484 | ## Default strategy is "RollingUpdate", which keeps 485 | ## the old instances up until the new ones are ready. 486 | # strategy: 487 | # type: RollingUpdate 488 | 489 | image: 490 | repository: jitsi/jibri 491 | 492 | podLabels: {} 493 | podAnnotations: {} 494 | resources: {} 495 | 496 | breweryMuc: jibribrewery 497 | timeout: 90 498 | 499 | ## jibri XMPP user credentials: 500 | xmpp: 501 | user: jibri 502 | password: 503 | 504 | ## recorder XMPP user credentials: 505 | recorder: 506 | user: recorder 507 | password: 508 | 509 | livenessProbe: 510 | initialDelaySeconds: 5 511 | periodSeconds: 5 512 | failureThreshold: 3 513 | exec: 514 | command: 515 | - /bin/bash 516 | - "-c" 517 | - >- 518 | curl -sq localhost:2222/jibri/api/v1.0/health 519 | | jq '"\(.status.health.healthStatus) \(.status.busyStatus)"' 520 | | grep -qP 'HEALTHY (IDLE|BUSY)' 521 | 522 | readinessProbe: 523 | initialDelaySeconds: 5 524 | periodSeconds: 5 525 | failureThreshold: 3 526 | exec: 527 | command: 528 | - /bin/bash 529 | - "-c" 530 | - >- 531 | curl -sq localhost:2222/jibri/api/v1.0/health 532 | | jq '"\(.status.health.healthStatus) \(.status.busyStatus)"' 533 | | grep -qP 'HEALTHY (IDLE|BUSY)' 534 | 535 | nodeSelector: {} 536 | tolerations: [] 537 | affinity: {} 538 | extraEnvs: {} 539 | 540 | ## Override the image-provided configuration files: 541 | # See https://github.com/jitsi/docker-jitsi-meet/tree/master/jibri/rootfs 542 | custom: 543 | contInit: 544 | _10_config: "" 545 | defaults: 546 | _autoscaler_sidecar_config: "" 547 | _jibri_conf: "" 548 | _logging_properties: "" 549 | _xorg_video_dummy_conf: "" 550 | other: 551 | _finalize_sh: "" 552 | 553 | serviceAccount: 554 | # Specifies whether a service account should be created 555 | create: true 556 | # Annotations to add to the service account 557 | annotations: {} 558 | # The name of the service account to use. 559 | # If not set and create is true, a name is generated using the fullname template 560 | name: 561 | 562 | xmpp: 563 | domain: meet.jitsi 564 | authDomain: 565 | mucDomain: 566 | internalMucDomain: 567 | guestDomain: 568 | hiddenDomain: 569 | 570 | extraCommonEnvs: {} 571 | 572 | prosody: 573 | enabled: true 574 | useExternalProsody: false 575 | server: 576 | extraEnvFrom: 577 | - secretRef: 578 | name: '{{ include "prosody.fullname" . }}-jibri' 579 | - secretRef: 580 | name: '{{ include "prosody.fullname" . }}-jicofo' 581 | - secretRef: 582 | name: '{{ include "prosody.fullname" . }}-jigasi' 583 | - secretRef: 584 | name: '{{ include "prosody.fullname" . }}-transcriber' 585 | - secretRef: 586 | name: '{{ include "prosody.fullname" . }}-jvb' 587 | - configMapRef: 588 | name: '{{ include "prosody.fullname" . }}-common' 589 | image: 590 | repository: jitsi/prosody 591 | tag: stable-10590 592 | 593 | # service: 594 | # ports: 595 | # If Prosody c2s in needed on private net outside the cluster 596 | # xmppc2snodePort: 30522 597 | 598 | ## Override the image-provided configuration files: 599 | # See https://github.com/jitsi/docker-jitsi-meet/tree/master/prosody/rootfs 600 | custom: 601 | contInit: 602 | _10_config: "" 603 | defaults: 604 | _prosody_cfg_lua: "" 605 | _saslauthd_conf: "" 606 | _jitsi_meet_cfg_lua: "" 607 | 608 | extraVolumes: [] 609 | # - name: prosody-modules 610 | # configMap: 611 | # name: prosody-modules 612 | 613 | extraVolumeMounts: [] 614 | # - name: prosody-modules 615 | # subPath: mod_measure_client_presence.lua 616 | # mountPath: /prosody-plugins-custom/mod_measure_client_presence.lua 617 | --------------------------------------------------------------------------------