# Classic Element Server Suite Documentation LTS 24.10 # Introduction to Element Server Suite What is Element Server Suite and how does it work? Element Server Suite provides an enterprise-grade secure communications platform. It can be deployed to either your own environment or in our Element Cloud. Element Server Suite includes the Element Matrix Server, which provides a host of security and privacy features, including: - Built on the Matrix open communications standard. - Provides end-to-end encrypted messaging, voice, and video through a consumer style messenger with the power of a collaboration tool. - Delivers data sovereignty. - Affords a high degree of flexibility that can be tailored to many use cases. - Allows secure federation within a single organization or across a supply chain or ecosystem. - Receives regular security and feature updates Further, we also offer Enterprise Support, giving you access to experts in federated, secure communications. This should give you confidence to deploy our platform for your most critical secure communications needs. Given the flexibility afforded by this platform, there are a number of moving parts to configure. This documentation will step you through configuring and deploying Element Enterprise On-Premise. The first question you'll face is how you want to deploy! ### Deploying Element Server Suite **Support for Standalone and Kubernetes deployments****.** Element Enterprise On-Premise can be deployed both to a full Kubernetes (a lightweight container orchestration platform) installation or onto a standalone server based on a single-node Kubernetes installation. One key benefit of going with a full Kubernetes installation is that you can add more resources and nodes to a cluster as you need them, whereas you are capped at one node with our standalone server. In the case of our standalone server installation, we deploy to `microk8s` (a smaller lightweight distribution of Kubernetes), which we then use for deploying our Element application. ### Versions Element Server Suite comes in two subscriptions, with differing feature sets. - **Enterprise Edition****.** The paid version of our Element Server Suite. See below for all supported components. Follow this documentation to get started. - **Enterprise Edition with Airgapped Support****.** The paid version of our Element Server Suite, including an airgapped archive to support non-connected installation. Follow the documentation for how to extract and setup your install for airgapped. ### Components Element Server Suite comprises of the following components: #### Core Components - **Synapse****.** The homeserver itself. - **Element Web****.** The Element Web client. - **Integrator****.** Our integration manager. - **Synapse Admin UI****.** Our Element Enterprise Administrator Dashboard. #### Optional Components - **PostgreSQL****.** Our database. Only optional if you already have a separate PostgreSQL database, which is required for a multiple node setup. Use an external DB if you have more than 300 users. - **GroupSync****.** Our group sync software - **AdminBot****.** Our bot for admin tasks. - **AuditBot****.** Our bot that provides auditing capability. - **Hookshot****.** Our integrations with gitlab, github, jira, and custom webhooks. - **Hydrogen****.** A light weight alternative chat client. ##### VOIP - **Jitsi****.** Our VoIP platform for group conferencing. - **Coturn****.** TURN server. Required if deploying VoIP. - **Element Call****.** Our new VoIP platform for group conferencing - **SFU****.** Element Call LiveKit component for scalable conferencing ##### Monitoring - **Prometheus****.** Provides metrics about the application and platform. - **Grafana****.** Graphs metrics to make them consumable. ##### Bridges - **Telegram Bridge****.** Bridge to connect Element to Telegram. - **Teams Bridge****.** Bridge to connect Element to MS Teams. - **XMPP Bridge****.** Bridge to connect Element to XMPP. - **IRC Bridge****.** Bridge to connect Element to IRC. - **SIP Bridge****.** Bridge to connect Element to SIP. ### Architecture This document gives an overview of our secure communications platform architecture: [](https://ems-docs.element.io/uploads/images/gallery/2025-02/1000001285.jpg)
[](https://ems-docs.element.io/uploads/images/gallery/2024-06/image-1718104050635.png) | [](https://ems-docs.element.io/uploads/images/gallery/2024-06/image-1718104154385.png) |
Please note that Ubuntu 24.04 LTS is only supported on ESS LTS 24.10 and later. For earlier versions, while configuration can be generated, deployment will fail.
LTS ESS Version | Supported Ubuntus | Supported Enterprise Linux (RHEL, Rocky, etc) | General Python Version requirements |
---|---|---|---|
23.10 | 20.04, 22.04 | 8, 9 | Python 3.8-3.10 |
24.04 | 20.04, 22.04 | 8, 9 | Python 3.9-3.11 |
24.10 | 22.04, 24.04 | 8, 9 | Python 3.10-3.12 |
Element Server Suite 24.04 currently only supports up to Python 3.11
- **Ubuntu****.** - Ubuntu Server 20.04 - Ubuntu Server 22.04Federation | 1 - 500 Users | 501 - 2500 Users | 2501 - 10,000 Users |
---|---|---|---|
**Closed** | 2 CPU 2000 MiB RAM | 6 CPU 5650 MiB RAM | 10 CPU 8150 MiB RAM |
**Limited** | 2 CPU 2000 MiB RAM | 6 CPU 5650 MiB RAM | 10 CPU 8150 MiB RAM |
**Open** | 5 CPU 4500 MiB RAM | 9 CPU 8150 MiB RAM | 15 CPU 11650 MiB RAM |
Federation | 1 - 500 Users | 501 - 2500 Users | 2501 - 10,000 Users |
---|---|---|---|
**Closed** | 1 CPU 4 GiB RAM | 2 CPU 12 GiB RAM | 4 CPU 16 GiB RAM |
**Limited** | 2 CPU 6 GiB RAM | 4 CPU 18 GiB RAM | 8 CPU 28 GiB RAM |
**Open** | 3 CPU 8 GiB RAM | 5 CPU 24 GiB RAM | 10 CPU 32 GiB RAM |
If you already have PostgreSQL, the installation requires that the database is setup with a locale of `C` and use `UTF8` encoding
See [Synapse Postgres Setup Docs](https://element-hq.github.io/synapse/latest/postgres.html#set-up-database) for further details. Once setup, or if you have this already, make note of the database name, user, and password as you will need these when configuring ESS via the installater GUI. #### Kubernetes Environment Prerequisites Before beginning the installation of a Kubernetes deployment, there are a few things that must be prepared to ensure a successful deployment and functioning installation. ##### PostgreSQL Before you can begin with the installation you must have a PostgreSQL database instance available. The installer does not manage databases itself.The database you use must be set to a locale of `C` and use `UTF8` encoding
Look at the [Synapse Postgres Setup Docs](https://element-hq.github.io/synapse/latest/postgres.html#set-up-database) for further details as they relate to Synapse. If the locale / encoding are incorrect, Synapse will fail to initialize the database and get stuck in a `CrashLoopBackoff` cycle. Please make note of the database hostname, database name, user, and password as you will need these to begin the installation. For testing and evaluation purposes, you can deploy PostgreSQL to k8s before you begin the installation process:For testing and evaluation purposes only - Element cannot guarantee production readiness with these sample configurations.
Requires [Helm](https://helm.sh/docs/intro/install/) installed locally If you do not have a database present, it is possible to deploy PostgreSQL to your Kubernetes cluster. This is great for testing and *can* work great in a production environment, but only for those with a high degree of comfort with PostgreSQL as well as the trade offs involved with k8s-managed databases. There are many different ways to do this depending on your organization's preferences - as long as it can create an instance / database with the required locale and encoding it will work just fine. For a simple non-production deployment, we will demonstrate deployment of the [bitnami/postgresql](https://github.com/bitnami/charts/tree/main/bitnami/postgresql) into your cluster using [Helm](https://helm.sh/docs/intro/install/). You can add the `bitnami` repo with a few commands: ```bash helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update helm search repo bitnami/postgresql ~/Desktop NAME CHART VERSION APP VERSION DESCRIPTION bitnami/postgresql 12.5.7 15.3.0 PostgreSQL (Postgres) is an open source object-... bitnami/postgresql-ha 11.7.5 15.3.0 This PostgreSQL cluster solution includes the P... ``` Next, you'll need to create a `values.yaml` file to configure your PostgreSQL instance. This example is enough to get started, but please consult the chart's [README](https://github.com/bitnami/charts/tree/main/bitnami/postgresql#readme) and [values.yaml](https://github.com/bitnami/charts/blob/main/bitnami/postgresql/values.yaml) for a list of full parameters and options. ```yaml auth: # This is the necessary configuration you will need for the Installer, minus the hostname database: "synapse" username: "synapse" password: "PleaseChangeMe!" primary: initdb: # This ensures that the initial database will be created with the proper collation settings args: "--lc-collate=C --lc-ctype=C" persistence: enabled: true # Set this value if you need to use a non-default StorageClass for your database's PVC # storageClass: "" size: 20Gi # Optional - resource requests / requirements # These are sufficient for a 10 - 20 user server resources: requests: cpu: 500m memory: 512Mi limits: memory: 2Gi ``` This example `values.yaml` file is enough to get you started for testing purposes, but things such as TLS configuration, backups, HA and maintenance tasks are outside of the scope of the installer and this document. Next, pick a namespace to deploy it to - this can be the same as the Installer's target namespace if you desire. For this example we'll use the `postgresql` namespace. Then it's just a single Helm command to install: ```bash # format: # helm install --create-namespace -nFor testing and evaluation purposes only - Element cannot guarantee production readiness with these sample configurations.
Requires [Helm](https://helm.sh/docs/intro/install/) installed locally Similar to the PostgreSQL quick start example, this requires [Helm](https://helm.sh/docs/intro/install/) The [kubernetes/ingress-nginx](https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx) chart is an easy way to get a cluster outfitted with Ingress capabilities. In an environment where LoadBalancer services are handled transparently, such as in a simple test k3s environment with `svclb` enabled there's a minimal amount of configuration. This example `values.yaml` file will create an IngressClass named `nginx` that will be used by default for any `Ingress` objects in the cluster. ```yaml controller: ingressClassResource: name: nginx default: true enabled: true ``` However, depending on your cloud provider / vendor (i.e. AWS ALB, Google Cloud Load Balancing etc) the configuration for this can vary widely. There are several example configurations for many cloud providers in the chart's [README](https://github.com/kubernetes/ingress-nginx/tree/main/charts/ingress-nginx#configuration) You can see what your resulting HTTP / HTTPS IP address for this ingress controller by examining the service it creates - for example, in my test environment I have an installed release of the `ingress-nginx` chart called `k3s` under the `ingress-nginx` namespace, so I can run the following: ```bash # format: # kubectl get service -nYour airgapped machine will still require access to airgapped linux repositories depending on your OS. If using Red Hat Enterprise Linux, you will also need access to the [EPEL Repository](https://docs.fedoraproject.org/en-US/epel/) in your airgapped environment.
If you are going to be installing into an airgapped environment, you will need a subscription including airgapped access and to then download the airgapped dependencies `element-enterprise-installer-airgapped-**Disclaimer:** This tool is intended for guidance only and should be used alongside expert judgment to ensure accurate results. For professional assistance with sizing, please contact our team to arrange a sizing workshop.
Upon loading this address for the first time, you may be greeted with a message informing you that your connection isn't private, this is due to the installer initially using a self-signed certificate. Once you have completed deployment, the installer will use a certificate you specify or the certficate supplied for the admin domain on the [Domains Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/domains-section). To proceed, click 'Advanced' then 'Continue', exact wording may vary across browsers.
[](https://ems-docs.element.io/uploads/images/gallery/2023-02/not-private.png) #### The Installer With the installer running, you will initially be presented with a 'Welcome to Element!' screen, from here you can click the 'Let's Go!' button to start configuring your ESS deployment. The installer has a number of sections to work through to configure your config before starting deployment, below will detail each section and what you can configure. You can click on any sections' header, or the provided link below it, to visit that sections' detailed breakdown page which runs through what each specific option in that section does - however do please note that not all setups will require changing from the default settings. #### [Host Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/host-section). The first section of the ESS installer GUI is the Host section, here you will configure essential details of how ESS will be installed including; deployment type; subscription credentials; PostgreSQL to use; and whether or not your setup is airgapped. [](https://ems-docs.element.io/uploads/images/gallery/2023-08/host-page1.png) For detailed guidance / details on each config option, check the [Detailed Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/host-section). Specifically for airgapped deployments, see the [Airgapped](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/host-section#bkmrk-airgapped) notes. ##### Standalone Deployment Ensure `Standalone` is selected, then if you are using LetsEncrypt for your certificates, you will want to make sure that you select `Setup Cert Manager` and enter an email address for LetsEncrypt to associate with your certificates. If you are using custom certificates or electing to manage SSL certificates yourself, then you will want to select `Skip Cert Manager`. Provide your EMS Image Store Username and Token associated with your subscription, which you can find at [https://ems.element.io/on-premise/subscriptions](https://ems.element.io/on-premise/subscriptions). By default, microk8s will set up persistent volumes in `/data/element-deployment` and will allow 20GB of space to do this; ESS will configure the default DNS resolvers to Google (8.8.8.8 and 8.8.4.4); and a PostgreSQL database will be created for you. These defaults are suitable for most setups however change as needed i.e. if you need to use your company's DNS servers. If you elect to setup your own PostgreSQL database, make sure it is configured per the [Requirements and Recommendations](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/requirements-and-recommendations#bkmrk-postgresql). ##### Kubernetes Deployment Ensure `Kubernetes Application` is selected, then specify the Kubernetes context name for which you are deploying into. You can use `kubectl config view` to see which contexts you have access to. You can opt to skip the update setup or the operator setup, but unless you know why you are doing that, you should leave those options as default. Provide your EMS Image Store Username and Token associated with your subscription, which you can find at [https://ems.element.io/on-premise/subscriptions](https://ems.element.io/on-premise/subscriptions). ##### Airgapped If you are installing in an airgapped environment, you'll either need to authenticate against your own container repository or download the airgapped package alongside the gui installer. If you choose our airgapped package, extract this somewhere on your system and enter the path to the extracted directory. ```bash user@airgapped:~$ cd /home/user/Downloads/ user@airgapped:~/Downloads$ ls -l total 7801028 -rwxr-xr-x 1 user user 129101654 Nov 7 15:51 element-installer-enterprise-edition-If you're running in Standalone mode, and opted for the installer deployed postgres, you will not see this section.
[](https://ems-docs.element.io/uploads/images/gallery/2023-08/database.png) Make sure you've read the [Requirements and Recommendations](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/requirements-and-recommendations) page so your environment is ready for installation. Specifically for PostgreSQL, ensure you have followed the guidance specific to your deployment: - [Standalone Deployment PostgreSQL Requirements](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/requirements-and-recommendations#bkmrk-postgresql) - [Kubernetes Deployment PostgreSQL Requirements](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/requirements-and-recommendations#bkmrk-postgresql-1) On this page you simply need to specify the database name, the database host name, the port to connect to, the SSL mode to use, and finally, the username and password to connect with. Once you have completed this section, simply click continue.For Standalone Deployments, if your database is installed on the same server you are installing ESS to, esnure that the servers' public IP address is used. As the container is not sharing the host network namespace, entering `127.0.0.1` will resolve to the container itself and cause the installation failure.
For detailed guidance / details on each config option, check the [Detailed Database Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/database-section) #### [Media Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/media-section). The fifth section of the ESS installer GUI is the Media section, here you will configure where media will be saved as well as the maximum media upload size. [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722519803209.png) You can opt to use either a Persistent Volume Claim (default) or if you wish to use an S3 bucket. Selecting S3 will then require you to provide your S3 connection details and authentication credentials. You will also be able to adjust the maximum media upload size for your homeserver. For detailed guidance / details on each config option, check the [Detailed Media Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/media-section) #### [Cluster Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/cluster-section). The sixth section of the ESS installer GUI is the Cluster section, here you will configure settings specific to the cluster in which Element Deployment will run on top of. [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722520830048.png) On standard setups, no options need configuring here so you can click continue. For setups where on the certificates section, you uploaded certificates signed by you own private Certificate Authority, you will need to upload it's certificate in PEM encoded format. This should be a full chain certificate, like those upload in the Certificates section, including the Root Certificate Authority as well as any Intermediate Certificate Authorities. If you are in an environment where you have self-signed certificates, you will want to disable TLS verification, by clicking `Advanced` and then scrolling down and unchecking `Verify TLS`. Please bear in mind that disabling TLS verification and using self-signed certificates is not recommended for production deployments. If your host names are not DNS resolvable, you need to use host aliases and this can be set up here. You will also click "Advanced" and scroll down to the "Host Aliases" section in "k8s". In here, you will click "Add Host Aliases" and then you will specify an IP and host names that resolve to that IP: [](https://ems-docs.element.io/uploads/images/gallery/2023-08/hostaliases.png) For detailed guidance / details on each config option, check the [Detailed Cluster Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/cluster-section) ##### Kubernetes Deployment If you are not using OpenShift, you will need to set `Force UID GID` and `Set Sec Comp` to `Enable` under the section `Security Context` so that it looks like: [](https://ems-docs.element.io/uploads/images/gallery/2023-05/seccontext-enable.png) If you are using OpenShift, you should leave the values of `Force UID GID` and `Set Sec Comp` set to `Auto`. #### [Synapse Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section). #### Authentication Section. For first-time installation, it is recommended to leave the defaults on this page and reconfigure as required following a successful deployment. #### Matrix Authentication Service. For first-time installation, it is recommended to leave the defaults on this page and reconfigure as required following a successful deployment. Please note, however, that you will need to provide the Fully-Qualified Domain Name (FQDN) for the Matrix Authentication Service (MAS) and confirm the TLS configuration. [](https://ems-docs.element.io/uploads/images/gallery/2025-01/image-1736265453886.png) #### [Synapse Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section). The seventh section of the ESS installer GUI is the Synapse section, here you will configure settings specific to your homeserver. [](https://ems-docs.element.io/uploads/images/gallery/2023-08/synapse-page.png)While there are lots of options that can be configured in the section, it is generally recommended to complete the first-time setup before toggling on additional features i.e. Delegated Authentication, Data Retention etc. Re-running the installer and configuring these individually after first-time setup is recommend to make troubleshooting easier should something in this section be mis-configured.
Generally speaking, for first-time setup the default options here can be left as-is, as they can be altered as needed post-deployment. Simply click continue to advance, however see below for details on some options you may wish to alter. The first setting that you will come to is our built in performance profiles. Select the appropriate answers for `Monthly Active Users` and `Federation Type` to apply our best practices based on years of running Matrix homeservers.Setting of `Monthly Active Users`aka MAU and `Federation Type` within the Profile section does not directly set the maximum monthly active users or open/close Federation. These options will simply auto-configure the number of underlying pods deployed to handle the advised values. You will be able to directly configure your desired maximum MAU and Federation in dedicated sections.
The next setting that you will see is whether you want to auto accept invites. The default of `Manual` will fit most use cases, but you are welcome to change this value. The next setting is the maximum number of monthly active users (MAU) that you have purchased for your server. Your server will not allow you to go past this value. If you set this higher than your purchased MAU and you go over your purchased MAU, you will need to true up with Element to cover the cost of the unpaid users. The next setting concerns registration. A server with open registration on the open internet can become a target, so we default to closed registration. You will notice that there is a setting called `Custom` and this requires explicit custom settings in the additional configuration section. Unless instructed by Element, you will not need the `Custom` option and should instead pick `Closed` or `Open` depending on your needs. After this, you will see that the installer has generated a random admin password for you. You will want to use the eye icon to view the password and copy this down as you will use this with the user `onprem-admin-donotdelete` to log into the admin panel after installation. [](https://ems-docs.element.io/uploads/images/gallery/2023-08/synapse-page2.png) Continuing, we see telemetry. You should leave this enabled as you are required to report MAU to Element. In the event that you are installing into an enviroment without internet access, you may disable this so that it does not continue to try talking to Element. That said, you are still required to generate an MAU report at regular intervals and share that with Element. For more information on the data that Element collects, please see: [What Telemetry Data is Collected by Element?](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section#bkmrk-what-telemetry-data-) As mentioned above, there are a lot of options that can be configured here, it is recommended to run through the detailed guidance / details on each config option available on the [Detailed Synapse Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section) ##### [Delegated Auth](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section-delegated-auth). A sub-section of the Synapse section is Delegated Authentication, which allows deferring to OIDC, SAML and LDAP Identity Providers for authentication. It is not recommended to set this up on first-time install, however should you wish please refer to the dedicated [Detailed Delegated Auth Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section-delegated-auth) page. [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722522903330.png) ##### [Federation](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section-federation). A sub-section of the Synapse section is Federation, found under `Advanced`, which allows configuration of how your homeserver should federate with other homeservers. It is not recommended to set this up on first-time install, however should you wish please refer to the dedicated [Detailed Federation Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section-federation) page. [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722523174484.png) #### [Element Web Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/element-web-section). The eighth section of the ESS installer GUI is the Element Web section, here you can configure settings specific to the deployed Element Web client. First almost all setups, nothing needs to be configured, simply click continue. For airgapped environments you should click `Advanced` then enable `Use Own URL for Sharing Links`: [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722523623991.png) For detailed guidance / details on each config option, check the [Detailed Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/element-web-section) #### [Homeserver Admin Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/homeserver-admin-section). The ninth section of the ESS installer GUI is the Homeserver Admin section, here you can configure settings specific to the deployed Admin Console. [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722524205280.png) Unless advised by Element, you will not need to configure anything in this section, you will be able to access the homeserver admin via the admin domain specified in the Domains section, logging in with the built-in default Synapse Admin user `onprem-admin-donotdelete` whose password is defined in the Synapse section.If you have enabled Delegated Authentication, the built-in Synapse Admin user `onprem-admin-donotdelete` will be unable to login unless `Allow Local Users Login` has been set to `Enabled`. See the [Delegated Authentication](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/homeserver-admin-section#bkmrk-delegated-authentica) notes for how to promote a user from your Identity Provider to Synapse Admin
For detailed guidance / details on each config option, check the [Detailed Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/homeserver-admin-section) #### [Integrator Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/integrator-section). The final section of the ESS installer GUI when running for the first-time is the Integrator section, here you can configure settings specific to the integrator which is used to send messages to external services. [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722524274161.png) On first-time setup only PostgreSQL will need to be configured for Standalone Deployments where you are using an external PostgreSQL or Kubernetes Deployments where an external PostgreSQL is required. For Standalone Deployments where the installer is deploying PostgreSQL for you, you will not need to configure anything. For detailed guidance / details on each config option, check the [Detailed Section Overview](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/integrator-section) #### The Installation Screen After all sections you will finally be ready to begin the installation, simply click Install to begin. [](https://ems-docs.element.io/uploads/images/gallery/2023-08/installscreen.png) Depending on your OS setup, you may notice the installer hang, or directly ask for a password. Simply go back to the terminal where you are running the installer, you will see that you are being asked for the sudo password: [](https://ems-docs.element.io/uploads/images/gallery/2023-08/installstart.png) [](https://ems-docs.element.io/uploads/images/gallery/2023-02/sudoask.png) Provide your sudo password and the installation will continue. You will know the installer has finished when you see the Play Recap, as long as nothing failed the install was a success.For Standalone Deployments, when running the installer for the first-time, you will be prompted to log out and back in again to allow Linux group membership changes to be refreshed. It is advised to simply cancel the running installer `CTRL + C` then reboot i.e. `sudo reboot now`. Then re-run the installer, return to the Installation Screen and click Install again. You will only have to perform this step once per server.
#### Verifying Your Installation Once the installation has finished, it can take as much as 15 minutes on a first run for everything to be configured and set up. You can use: ```bash watch kubectl get pods -n element-onprem ``` This will show the status of all pods, simply wait until all pods have come up and stablised showing as `Ready`. You can also keep track of the `Current Deployment Status` on the Installation Screen, once fully ready you should see: [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722525932639.png) #### What's Next? Once your installation has been verified you should stop the running installer with `CTRL + C` then re-run it. You should notice instead of an IP you are given a URL matching the Synapse Admin domain you configured on the Domains section but on port `8443`. When the installer detects a successful installation, it will change from the first-time run interface to the Admin Console UI. Here you can: - Run through any section previously configured and adjust your settings - Access a new section called `Integrations` to setup additional components like Bridges, VOIP, Monitoring etc. - Use the Admin tab to administer your homeserver (also deployed without requiring running the installer at the Synapse Admin Domain) [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722598587776.png) Check out the [Post-Installation Essentials](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/post-installation-essentials) for additional information and resources. ##### Core Component Sections You already run through all these sections, however you may wish to dive deeper into each to fine-tune your configuration as required. You can find detailed breakdowns of each config option for these sections in the [Installation of Core Components](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/chapter/installation-of-core-components) chapter, as well more advanced options detailed within the [Advanced Configuration](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/chapter/advanced-configuration) chapter. ##### The Integrations Section This new section allows you to install new integrations to your deployment, you can find detailed installation instructions for each integration in the [Integrations](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/chapter/integrations) chapter. [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722599074625.png) You can find a full list of integrations available from the [Introduction to Element Server Suite](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/introduction-to-element-server-suite#bkmrk-components) page. ### Reconfiguring an existing Installation Simply re-run the installer and run through any sections you wish to adjust your config on. Make sure to hit `Save` at the bottom of any changed sections, then hit `Deploy` and `Start Deployment`[](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722596949967.png) | [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722596962079.png) |
If upgrading from an older LTS to a newer one, it is highly recommended to first upgrade to the latest version of the LTS you are currently running. Then perform another upgrade to the latest version of the next LTS.
Next, download the latest version of the installer, transfer it to the device where your `.element-enterprise-server` configuration exists and make it executable using `chmod +x`.When you first run a new version of the installer, your config may be upgraded. It is highly recommended to make a backup of your config directory. See [Where are the Installer Configuration Files](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/post-installation-essentials#bkmrk-where-are-the-instal) for more information.
On first run of a new version of the installer, your config may be upgraded, once this is complete you will be able to access the installer UI. Simply go through all sections within the installer, **re-confirm all options**1 (making sure to save any changes / click save on any pages that do not have it greyed out), then hit Deploy. 1 Changes to how specific settings are configured may not automatically be upgraded as part of this step. To avoid issues, it is highly recommended to run through each section of the installer and hit the `Save` button on each. #### Performing upgrades with GroupSync installed If you have the GroupSync integration installed, please ensure you enable `Dry Run` mode. [](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722597927265.png) Once deployment is complete, you can confirm via the GroupSync pod logs that everything is running as expected: ```bash # Confirm the GroupSync Pod Name kubectl get pods -n element-onprem | grep group # Replace POD_NAME in the command below kubectl logs POD_NAME -n element-onprem ``` If everything looks as expected, please re-deploy with `Dry Run` disabled to resume GroupSync functionality. # Post-Installation Essentials You've installed Element Server Suite, what do you need to know? Check here for some essentials. ### End-User Documentation After completing the installation you can share our [User Guide PDF](https://static.element.io/pdfs/element-user-guide.pdf) to help orient and onboard your users to Element! Or visit the [Element Support](https://ems-docs.element.io/books/element-support) book. ### Where are the Installer Configuration Files Everything that you have configured via the Element Server Suite installer is saved to configuration files placed in the `.element-enterprise-server` directory, found in the home directory of the user who ran the installer. In this directory, you will find a subdirectory called `config` that contains the actual configuration files - keep these backed up. ### Running the Installer unattended It is possible to run the installer without using the GUI provided that you have a valid set of configuration files in the `.element-enterprise-server/config` directory. Using this method, you could use the GUI as a configuration editor and then take the resulting configuration and modify it as needed for further installations. This method also makes it possible to set things up once and then run future updates without having to use the GUI. See the [Running the installer unattended](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/automating-ess-deployment#bkmrk-running-the-installe) section from the [Automating ESS Deployment](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/automating-ess-deployment) doc. ### Manually creating your first user It is highly recommended to use the Admin Console to create new users, you can see the [Using the Admin Tab](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/using-the-admin-tab) page for more details, specifically the [Adding Users](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/using-the-admin-tab#bkmrk-adding-users) section. [](https://ems-docs.element.io/uploads/images/gallery/2023-11/image-1699362765678.png) However you can also create users from your terminal, by running the following command: ```bash $ kubectl --namespace element-onprem exec --stdin --tty \ first-element-deployment-synapse-main-0 \ -- register_new_matrix_user --config /config/rendered/instance.yaml New user localpart: your_username Password: Confirm password: Make admin [no]: yes Sending registration request... Success! ``` Make sure to enter `yes` on `Make admin` if you wish to use this user on the installer or standalone Admin page. Please note, you should be using the [Admin page](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/using-the-admin-tab) or the [Synapse Admin API](https://ems-docs.element.io/books/element-support/page/getting-started-using-the-admin-api) instead of `kubectl`/`register_new_matrix_user` to create subsequent users. ### Standalone Deployment `microk8s` Specifics #### Cleaning up images cache The installer, from version 24.02, comes with the tool `crictl` which lets you interact with microk8s containerd daemon. After upgrading, once all pods are running, you might want to run the following command to clean-up old images : ```bash ~/.element-enterprise-server/installer/.install-env/bin/crictl -r unix:///var/snap/microk8s/common/run/containerd.sock rmi --prune ``` #### Upgrading microk8s ##### Prior to versions 24.04.05 Upgrading microk8s rely on uninstalling, rebooting the machine, and reinstalling ESS on the new version. It thus involves a downtime. To upgrade microk8s, please run the installer with : `./Initial configuration options specific to the installer, including how ESS should be deployed.
An example of the cluster.yml
config generated when selecting Standalone, note that no specific flag is used within the config to specify selecting between Standalone or Kubernetes. If you choose to manually configure ESS bypassing the GUI, ensure only config options specific to how you wish to deploy are provided.
Once you have deployed for the first time, you cannot enable / disable Legacy Auth. Ensure if you require SAML delegated authentication, or wish to use the GroupSync integration, you enable Legacy Authentication prior to deployment.
If you forget your token and hit 'Refresh' in the EMS Control Panel, you will need to ensure you redeploy your instance with the new token - otherwise subsequent deployments will fail.
[](https://ems-docs.element.io/uploads/images/gallery/2024-08/image-1722600415206.png)Hello World!
"; } ```The below example is for demonstration purposes only, you should follow the linked guidance before adding extra configuration.
For example, if you wanted to replace the standard 404 error page, you could do this using both [`custom-http-errors`](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#custom-http-errors) and [`server-snippet`](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#server-snippet). To configure via the installer, simply add the specify `custom-http-errors` as the `Name` and click `Add to Nginx Extra Configuration`, then provide the required value in the newly created field: [](https://ems-docs.element.io/uploads/images/gallery/2024-02/image-1708078830743.png) Repeat for `server-snippet`: [](https://ems-docs.element.io/uploads/images/gallery/2024-02/image-1708078877553.png)The above example is used to explain how to configure the Nginx Extra Configuration, and so is for demonstration purposes only, it is not recommended to use this example config. Ideally your web server should manage traffic that would otherwise hit a 404 being served by ESS.
#### PostgreSQL in Cluster [](https://ems-docs.element.io/uploads/images/gallery/2024-04/image-1714496148674.png)An example of the cluster.yml
config generated when selecting Kubernetes, note that no specific flag is used within the config to specify selecting between Standalone or Kubernetes. If you choose to manually configure ESS bypassing the GUI, ensure only config options specific to how you wish to deploy are provided.
![]() |
![]() |
Your airgapped machine will still require access to airgapped linux repositories depending on your OS. If using Red Hat Enterprise Linux, you will also need access to the EPEL repository in your airgapped environment.
### Host Admin [](https://ems-docs.element.io/uploads/images/gallery/2024-04/image-1714496264422.png)Configure the domains ESS should use for the main components deployed by ESS.
The domain names configured via the UI in this section will be saved to your deployment.yml
under each of the components' k8s: ingress:
configuration.
Configure and/or provide the certificates that should be used for each domain served by ESS.
Certificate details configured via the UI in this section will be saved to your deployment.yml
under each of the components' k8s: ingress:
configuration with the cert contents (if manually uploaded) being saved to a secrets.yml
in Base64.
Configuration options for how ESS can communicate with your PostgreSQL database.
All settings configured via the UI in this section will be saved to your deployment.yml
, with the contents of secrets being saved to secrets.yml
. You will find specific configuration examples in each section.
By default, if you do not change any settings on this page, defaults will be added to your configuration file/s (see example below).
Configuration options relating to how Media uploaded to your homeserver is handled by ESS.
All settings configured via the UI in this section will be saved to your deployment.yml
, with the contents of secrets being saved to secrets.yml
. You will find specific configuration examples in each section.
By default, if you do not change any settings on this page, defaults will be added to your configuration file/s (see example below).
A detailed look at Delegated Authentication options available and setup examples.
This is a new section introduced in LTS 24.10 which replaces the previous Delegated Authentication options found within the Synapse section. Your previous configuration will be upgraded on first-run of the newer LTS.
In the Authentication section you will find options to configure settings specific to Authentication. Regardless of if you are using the Matrix Authentication Server, or have enabled Legacy Auth, the settings on this page will remain the same. However please note, MAS does not support delegated authentication with SAML or GroupSync - if you wish to enable either of these you will need to return to the Host section and enable [Legacy Auth](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/host-section#bkmrk-legacy-auth).All settings configured via the UI in this section will be saved to your deployment.yml
, with the contents of secrets being saved to secrets.yml
. You will find specific configuration examples in each section.
By default, if you do not change any settings on this page, defaults will be added to your configuration file/s (see example below).
The Matrix Authentication Service does not support configuring Backchannel Logout. You can only configure Backchannel logout if you have enabled Legacy Auth
from the Host Section.
The Matrix Authentication Service does not support SAML and it is recommended to switch to OIDC. You can only enable SAML authentication if you have enabled Legacy Auth
from the Host Section.
Settings specific to the environment which you are deploying ESS into such as CA.
All settings configured via the UI in this section will be saved to your deployment.yml
, with the contents of secrets being saved to secrets.yml
. You will find specific configuration examples in each section.
It is highly discouraged from enabling support for DNS Federation Delegation, a significant number of features across ESS components are configured via .well-known
files deployed by WellKnownDelegation
. Enabling this will prevent those features from working so you may have a degraded experience.
The Synapse configuration options for your Matrix Homeserver incl. registration & encryption.
All settings configured via the UI in this section will be saved to your deployment.yml
, with the contents of secrets being saved to secrets.yml
. You will find specific configuration examples in each section.
By default, if you do not change any settings on this page, defaults will be added to your configuration file/s (see example below).
Open or Closed registration will not affect the creation of new Matrix Accounts via Delegated Authentication. New users via Delegated Authentication i.e. LDAP, SAML or OIDC, who have yet to login to the homeserver and technically do not yet have a created Matrix ID, will still have one created when they successfully authenticate regardless of if registration is Closed.
#### Admin Password [](https://ems-docs.element.io/uploads/images/gallery/2024-02/image-1707395849132.png)If you are experiencing issues with accessing the Admin Console following a wipe and reinstall, ensure you do not have the previous install credentials cached. You can clear them via your browsers' settings, then refresh the page (you will be provided with a new link via the Installer CLI) to resolve.
### Log Unlike with most other sections, logging values set here are analogous to creating a `It is not advised to leave your Logging Level at anything other than the default, as more verbose logging may expose information that should otherwise not be accessible. When sharing logs, remember to redact any sensitive information you do not wish to share.
#### Sentry DSN [](https://ems-docs.element.io/uploads/images/gallery/2024-02/image-1707396003419.png)This option will only affect rooms created after it is set and will not affect rooms created by other servers.
- `auto_all` - Automatically enables encryption for all rooms created on the local server if all present integrations support it. - `auto_invite` - Automatically enables encryption for private rooms and private messages if all present integrations support it. - `forced_all` - Enforces encryption for all rooms created on the local server, regardless of the integrations supporting encryption. - `forced_invite` - Enforces encryption for private rooms and private messages, regardless of the integrations supporting encryption. - `not_set` - Does not enforce encryption, leaving room encryption configuration choice to room admins. #### Password Policy [`password_config`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#password_config) [](https://ems-docs.element.io/uploads/images/gallery/2024-02/image-1707243135026.png)You may notice that despite this not being enabled, users are required when registering to set secure passwords when doing do via the Element Web client. This is because the client itself enforces secure passwords, this setting is required should you wish to ensure all accounts have enforces password requirements, as other Matrix clients may not themselves enforce secure passwords.
### Telemetry [](https://ems-docs.element.io/uploads/images/gallery/2024-01/image-1706547000728.png)Enabling or disabling URL previews can impact the amount of information displayed in the chat interface, and it can also have privacy implications as fetching URL previews involves making requests to external servers to retrieve metadata.
#### Default Blacklist When enabling URL Preview, a default blacklist using [`url_preview_ip_range_blacklist`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#url_preview_ip_range_blacklist) is configured for all private networks (see ranged below) to avoid leaking information by asking for preview of links pointing to private paths of the infrastructure. While this blacklist cannot be changed, you can whitelist specific ranges using [IP Range Allowed](#bkmrk-ip-range-allowed).We strongly advise against including any config not configurable via the UI as it will most likely interfere with settings automatically computed by the updater. Additional configuration options are not supported so we encourage you to first raise your requirements to Support where we can best advise on them.
An `Additional Config` section, which allows including config not currently configurable via the UI from the [Configuration Manual](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html), is available under the 'Advanced' section of this page. See the dedicated page on additional Synapse configuration, [Synapse Section: Additional Config](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section-additional-config) # Synapse Section: FederationDetailed information on configuring homeserver Federation including Trusted Key Servers.
Federation is the process by which users on different servers can participate in the same room. For this to work, all servers participating in a room must be able to talk to each other. When Federation is `Open`, you will not need to configure anything further, however to privately federate you will need to make use of the `Federation` section found under `Advanced`. [](https://ems-docs.element.io/uploads/images/gallery/2024-01/image-1706542780463.png) ## How do I turn Federation On / Off? How Federation is enabled is automatic based on how you configure it within this Federation section. By default Federation is enabled, to close Federation simply enable the Allow List without adding any allowed servers. ### Federation Profile At the top of the [Synapse Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section#bkmrk-federation-type) you can configure a Federation Type. This Profile section specifically configures the performance profile of your deployed homeserver. As such, setting this to `Open` will automatically configure [Synapse Workers](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section-workers) for Federation Endpoints to better support an openly federating server. This should not be confused with the Federation section detailed in this document. [](https://ems-docs.element.io/uploads/images/gallery/2024-05/image-1715244469299.png)
Previous setups may have used the Synapse Additional config. Configuration of Federation settings via Additional Config, that are in conflict with any set via the UI, will not override the UI set values. As such, we do not advise including them or any related settings within the Additional Config as they are of increased risk to causing issues with your deployment and are not supported.
## Client Minimum TLS Version [`federation_client_minimum_tls_version`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#federation_client_minimum_tls_version) [](https://ems-docs.element.io/uploads/images/gallery/2024-01/image-1706544124637.png) Allows you to choose the minimum TLS version that will be used for outbound federation requests. Defaults to "1.2". Configurable to "1.2" or "1.3".Setting this value higher than "1.2" will prevent federation to most of the public Matrix network: only configure it to "1.3" if you have an entirely private federation setup and you can ensure TLS 1.3 support.
## Certificate Autorities Secret Keys [](https://ems-docs.element.io/uploads/images/gallery/2024-01/image-1706543999452.png) Configure when you are federating between homeservers' whose certificates are signed by different Certificate Authorities, click the `Add Certificate Authorities Secret Keys` / `Add More Certificate Authorities Secret Keys` button to reveal the option to upload your CA certificate.Uploaded certificates should be PEM encoded and include the full chain of intermediate CAs and the root CA. You can simply concatenate these files prior to uploading.
## Trusted Key Servers [`trusted_key_servers`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#trusted_key_servers) [](https://ems-docs.element.io/uploads/images/gallery/2024-01/image-1706544582026.png) Used to specify the trusted servers to download signing keys from. When synapse needs to fetch a signing key, each server is tried in parallel. Normally, the connection to the key server is validated via TLS certificates. Verify keys provide additional security by making synapse check that the response is signed by that key. Click `Add Trusted Key Servers` / `Add More Trusted Key Servers` to add a new key server, then provide the homeservers' federated server name, i.e. the base domain of the homeserver you with to federate with. Under `Verify Keys` for the server, you will need to provide it's `Key ID` and `Public Key`. ### Getting a Homeservers' `Key ID` and `Public Key` from your browser Simply access the Synapse endpoint `GET /_matrix/key/v2/server`. You must use the domain where your Synapse is exposed, this might be different than the domain you have in your Matrix IDs. For example `https://matrix.yourcomapany.com/_matrix/key/v2/server`. For the element.io homeserver,We recommend also firewalling your federation listener to limit inbound federation traffic as early as possible, rather than relying purely on this application-layer restriction.
This does not stop a server from joining rooms that servers not on the whitelist are in. As such, this option is really only useful to establish a "private federation", where a group of servers all whitelist each other and have the same whitelist.
Please also note that by default an [`ip_range_blacklist`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#ip_range_blacklist) is configured to block all private IP address ranges. If your servers require communicating on any of the below ranges, you will need to configure [`ip_range_whitelist`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#ip_range_whitelist). See [Allowing Private Federation via `ip_range_whitelist`](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/synapse-section-additional-config) for information on configuring this. # Element Web SectionConfiguration options relating to the deployed Element Web instance provided by ESS.
All settings configured via the UI in this section will be saved to your deployment.yml
, with the contents of secrets being saved to secrets.yml
. You will find specific configuration examples in each section.
By default, if you do not change any settings on this page, default Element Web pod CPU and Memory requirements will be added to your configuration file/s (see example below).
Configuration options relating to the deployed Homeserver Admin instance provided by ESS.
All settings configured via the UI in this section will be saved to your deployment.yml
, with the contents of secrets being saved to secrets.yml
. You will find specific configuration examples in each section.
By default, if you do not change any settings on this page, default Homeserver Admin pod CPU and Memory requirements will be added to your configuration file/s (see example below).
Configuration options relating to the Integrator provided by ESS.
All settings configured via the UI in this section will be saved to your deployment.yml
, with the contents of secrets being saved to secrets.yml
. You will find specific configuration examples in each section.
By default, if you do not change any settings on this page, defaults will be added to your configuration file/s (see example below).
It is not advised to leave your Logging Level at anything other than the default, as more verbose logging may expose information that should otherwise not be accessible. When sharing logs, remember to redact any sensitive information you do not wish to share.
#### Structured [](https://ems-docs.element.io/uploads/images/gallery/2024-06/image-1718018012799.png)[](https://ems-docs.element.io/uploads/images/gallery/2023-04/OGQscreenshot-2023-04-28-at-14-05-43.png) The distinguished name can be displayed by selecting `View`/`Advanced Features` in the Active Directory console and then, right-clicking on the object, selecting `Properties`/`Attributes Editor`. The DN is `OU=Demo corp,DC=olivier,DC=sales-demos,DC=element,DC=io`. - `Mapping attribute for room name`: LDAP attribute used to give an internal ID to the space (visible when setting the log in debug mode) - `Mapping attribute for username`: LDAP attribute like `sAMAccountName` used to map the localpart of the mxid against the value of this attribute.
If `@bob:my-domain.org` is the mxid, `bob` is the localpart and groupsync expects to match this value in the LDAP attribute `sAMAccountName`. - `LDAP Bind DN`: the distinguished name of the LDAP account with read access. - `Check interval in seconds`: the frequency Group sync refreshes the space mapping in Element. - `LDAP Filter`: an [LDAP filter](https://ldap.com/ldap-filters/) to filter out objects under the LDAP Base DN. **The filter must be able to capture Users, Groups and OUs used in the space mapping.** - `LDAP URI`: the URI of your LDAP server. - `LDAP Bind Password`: the password of the LDAP account with read access. ### MS Graph (Azure AD) - You need to create an `App registration`. You'll need the `Tenant ID` of the organization, the `Application (client ID)` and a secret generated from `Certificates & secrets` on the app. - For the bridge to be able to operate correctly, navigate to API permissions and ensure it has access to Group.Read.All, GroupMember.Read.All and User.Read.All. Ensure that these are Application permissions (rather than Delegated). - Remember to grant the admin consent for those. - To use MSGraph source, select MSGraph as your source. - `msgraph_tenant_id`: This is the "Tenant ID" from your Azure Active Directory Overview - `msgraph_client_id`: Register your app in "App registrations". This will be its "Application (client) ID" - `msgraph_client_secret` : Go to "Certificates & secrets", and click on "New client secret". This will be the "Value" of the created secret (not the "Secret ID"). ## Space Mapping The space mapping mechanism allows us to configure spaces that Group Sync will maintain, beyond the ones that you can create manually. It is optional – the configuration can be skipped but if you enable Group Sync, you have to edit the Space mapping by clicking on the `EDIT` button and rename the `(unnamed space)`to something meaningful.
You can then map an external ID (the LDAP distinguished name) against a power level. Every user belonging to this external ID is granted the power level set in the interface. This external ID that can be any LDAP object like an OrgUnit, a Group or a Security Group. **The external ID is case-sensitive**
A power level 0 is a default user that can write messages, react to messages and delete his own messages.
A power level 50 is a moderator that can creates rooms, delete messages from members.
A power level 100 is an administrator but since GroupSync manages spaces, invitations to the rooms, it does not make sense to map a group against a power level 100.
Custom power levels other than 0 and 50 are not supported yet. ## Users allowed in every GroupSync room
This is useful for things like auditbot if Audibot has been enabled.
Patterns listed here will be wrapped in ^ and $ before matching. ## Defaults Rooms
You may remember you set an alias prefix in the Miscellaneous section above. If you wish to fully customise the format of aliases of bridged rooms you should remove that `alias_prefix:` line. However the only benefit to this would be to add a suffix to the Matrix Room alias so is not recommended.
- `enabled:` Set to `true` to allow users to use the `!join` command to join any allowed IRC Channel, defaults to `false` - `createAlias:` Set to `false` if you do not want an alias to be created for any new Matrix rooms created using `!join`, defaults to `true` - `published:` Set to `false` to prevent the created Matrix room via `!join` from being published to the public room list, defaults to `true` - `useHomeserverDirectory:` Set to `true` to publish room to your Homeservers' directory instead of one created for the IRC Bridge, defaults to `false` - `joinRule:` Set to `"invite"` so only users with an invite can join the created room, otherwise this defaults to `"public"`, so anyone can join the room - `whitelist:` Only used if `joinRule:` is set to `invite`, populate with a list of Matrix User IDs that the IRC bot will send invites to in response to a `!join` - `federate:` Set to `false` so only users on the homeserver attached to the bridge to be able to use these rooms, defaults to `true` - `aliasTemplate:` Only used if `createAlias:` is set to `true`. Set to specify the alias for newly created rooms from the `!join` command, defaults to `"#irc_$CHANNEL"` - You should not include this line if you do not need to add a suffix to your Matrix Room alias. Using `alias_prefix:`, this will default to `#PREFIX_CHANNEL_NAME:HOMESERVER` - If you are specifying this line, you can use the following variables within the alias: - `$SERVER` => The IRC server address (e.g. `"irc.example.com"`) - `$CHANNEL` => The IRC channel (e.g. `"#python"`), this must be used within the alias - `exclude:` Provide a comma-separated list of IRC Channels within `[]` that should be prevented from being mapped under any circumstances In addition you could also specify the below, though it is unlikely you should need to specify the exact Matrix Room Version to use. - `roomVersion:` Set to specify the desired Matrix Room Version, if unspecified, no specific room version is requested. - If the homeserver doesn't support the room version then the request will fail. ```yml dynamicChannels: enabled: true createAlias: true published: true useHomeserverDirectory: true joinRule: invite federate: true aliasTemplate: "#irc_$CHANNEL" whitelist: - "@foo:example.com" - "@bar:example.com" exclude: ["#foo", "#bar"] ``` ##### Exclude users from using the bridge Using the `excludedUsers:` configuration you can specify Regex to identify users to be kicked from any IRC Bridged rooms. - `regex:` Set this to any Regex that should match on users' Matrix User IDs - `kickReason:` Set to specify the reason provided to users when kicked from IRC Bridged rooms ```yml excludedUsers: - regex: "@.*:evilcorp.com" kickReason: "We don't like Evilcorp" ``` ##### Syncing Matrix and IRC Membership lists To manage and control how Matrix and IRC membership lists are synced you will need to include `membershipLists:` within your config. - `enabled:` Set to `true` to enable the syncing of membership lists between IRC and Matrix, defaults to `false` - This can have a significant effect on performance on startup as the lists are synced - `floodDelayMs:` Syncing membership lists at startup can result in hundreds of members to process all at once. This timer drip feeds membership entries at the specified rate, defaults to `10000` (10 Seconds) Within `membershipLists:` are the following sections, `global:`, `rooms:`, `channels:` and `ignoreIdleUsersOnStartup:`. For `global:`, `rooms:`, `channels:` you can specify `initial:`, `incremental:` and `requireMatrixJoined:` which all default to `false`. You can configure settings globally, using `global:`, or specific to Matrix Rooms with `rooms:` or IRC Channels via `channels:`. - What does setting `initial:` to `true` do? - For `ircToMatrix:` this gets a snapshot of all real IRC users on a channel (via NAMES) and joins their virtual matrix clients to the room - For `matrixToIrc:` this gets a snapshot of all real Matrix users in the room and joins all of them to the mapped IRC channel on startupYou may remember you set a user name prefix in the Miscellaneous section above. If you wish to fully customise the format of your IRC users' Matrix User IDs you should remove that `users_prefix:` line. However the only benefit to this would be to add a suffix to the Matrix User ID so is not recommended.
- `userTemplate:` Specify the template Matrix User ID that IRC users will appear as, it must start with an `@` and feature `$NICK` within, `$SERVER` is usable - You should not include this line if you do not need to add a suffix to your IRC users' Matrix IDs. Using `users_prefix:`, this will default to `@PREFIX_NICKNAME:HOMESERVER` - `displayName:` Specify the Display Name of IRC Users that appear within Matrix, it must contain `$NICK within`, `$SERVER` is usable - `joinAttempts:` Specify the number of tries a client can attempt to join a room before the request is discarded. Set to `-1` to never retry or `0` to never give up, defaults to `-1` ```yml matrixClients: userTemplate: "@irc_$NICK" displayName: "$NICK" joinAttempts: -1 ``` ##### Configuring how Matrix users appear in IRC As part of the bridge Matrix users and their messages will appear in IRC as IRC users, you will be able to perform IRC actions on them like any other user. You can configure how this functions using `ircClients:`. - `nickTemplate:` Set this to the template how Matrix users' IRC client nick name is set, defaults to `"$DISPLAY[m]"` - You can use the following variables within the template, you must use at least one of these. - $LOCALPART => The user ID localpart (e.g. `"alice"` in `@alice:localhost`) - $USERID => The user ID (e.g. `@alice:localhost`) - $DISPLAY => The display name of this user, with excluded characters (e.g. space) removed. - If the user has no display name, this falls back to $LOCALPART. - `allowNickChanges:` Set to `true` to allow users to use the `!nick` command to change their nick on the server - `maxClients:` Set the max number of IRC clients that will connect - If the limit is reached, the client that spoke the longest time ago will be disconnected and replaced, defaults to `30` - `idleTimeout:` Set the maximum amount of time in seconds that a client can exist without sending another message before being disconnected. - Use `0` to not apply an idle timeout, defaults to `172800` (48 hours) - This value is ignored if this IRC server is mirroring matrix membership lists to IRC. - `reconnectIntervalMs:` Set the number of millseconds to wait between consecutive reconnections if a client gets disconnected. - Set to `0` to disable scheduling i.e. it will be scheduled immediately, defaults to `5000` (5 seconds) - `concurrentReconnectLimit:` Set the number of concurrent reconnects if a user has been disconnected unexpectedly - Set this to a reasonably high number so that bridges are not waiting an eternity to reconnect all its clients if we see a massive number of disconnect. - Set to 0 to immediately try to reconnect all users, defaults to `50` - `lineLimit:` Set the number of lines of text to allow being sent as from matrix to IRC, defaults to `3` - If the number of lines that would be sent is > lineLimit, the text will instead be uploaded to Matrix and the resulting URI is treated as a file. A link will be sent to the IRC instead to avoid spamming IRC. - `realnameFormat:` Set to either `"mxid"` or `"reverse-mxid"` to define the format used for the IRC realname. - `kickOn:` - `channelJoinFailure:` Set to `true` to kick a Matrix user from a bridged room if they fail to join the IRC channel - `ircConnectionFailure:` Set to `true` to kick a Matrix user from ALL rooms if they are unable to get connected to IRC - `userQuit:` Set to `true` to kick a Matrix user from ALL rooms if they choose to QUIT the IRC network You can also optionally configure the following, they do not need to be included in your config if you are not changing their default values. - `ipv6:` - `only:` Set to `true` to force IPv6 for outgoing connections, defaults to `false` - `userModes:` Specify the required IRC User Mode to set when connecting, e.g. `"RiG"` to set `+R`, `+i` and `+G`, defaults to `""` (No User Modes) - `pingTimeoutMs:` Set the minimum time to wait between connection attempts if the bridge is disconnected due to throttling. - `pingRateMs:` Set the rate at which to send pings to the IRCd if the client is being quiet for a while. - Whilst IRCd *should* sending pings to the bridge to keep the connection alive, sometimes it doesn't and ends up ping timing out the bridge. ```yml ircClients: nickTemplate: "$DISPLAY[m]" allowNickChanges: true maxClients: 30 # ipv6: # only: false idleTimeout: 10800 reconnectIntervalMs: 5000 concurrentReconnectLimit: 50 lineLimit: 3 realnameFormat: "mxid" # pingTimeoutMs: 600000 # pingRateMs: 60000 kickOn: channelJoinFailure: true ircConnectionFailure: true userQuit: true ``` ### Deploying the IRC Bridge Once you have make the required changes to your `Bridge.yml` configuration, make sure you find and click the `Save` button at the bottom of the IRC Bridge configuration page to ensure your changes are updated. [](https://ems-docs.element.io/uploads/images/gallery/2023-08/image-1692624783061.png) You will then need to re-Deploy for any changes to take effect, as above ensure all changes made are saved then click `Deploy`. [](https://ems-docs.element.io/uploads/images/gallery/2023-08/image-1692624827468.png) ## Using the Bridge For usage of the IRC Bridge via it's bot user see [Using the Matrix IRC Bridge](https://ems-docs.element.io/books/element-support/page/using-the-matrix-irc-bridge) documentation, or for end user focused documentation see [Using the Matrix IRC Bridge as an End User](https://ems-docs.element.io/books/element-support/page/using-the-matrix-irc-bridge-as-an-end-user). If you have setup mapping of rooms in your `Bridge.yml`, some rooms will already be connected IRC, users need only join the bridged room and start messaging. IRC users should see Matrix users in the Channel and be able to communicate with them like any other IRC user. # Setting Up the SIP Bridge # Configuring SIP bridge ## Basic config From the Installer's Integrations page, click "Install" under "SIP Bridge" For the provided sipbridge.yml, please see the following documentation: - `postgres_create_in_cluster`: `true` to create the postgres db into the k8s cluster. On a standalone deployment, it is necessary to define the `postgres_data_path`. - `postgres_fqdn`: The fqdn of the postgres server. If using `postgres_create_in_cluster`, you can choose the name of the workload. - `postgres_data_path`: "/mnt/data/sipbridge-postgres" - `postgres_port`: 5432 - `postgres_user`: The user to connect to the db. - `postgres_db`: The name of the db. - `postgres_password`: A password to connect to the db. - `port_type`: `HostPort` or `NodePort` depending on which kind of deployment you want to use. On standalone deployment, we advise you to use `HostPort` mode. - `port`: The port on which to configure the SIP protocol. On `NodePort` mode, it should be in kubernetes range: - `enable_tcp`: `true` to enable TCP SIP. - `pstn_gateway`: The hostname of the PSTN Gateway. - `external_address`: The external address of the SIP Bridge - `proxy` : The address of the SIP Proxy - `user_agent`: A user agent for the sip bridge. - `user_avatar`: An MXC url to the sip bridge avatar. Don't define it if you have not uploaded any avatar. - `encryption_key`: A 32 character long secret used for encryption. Generate this with `pwgen 32 1` # Setting Up the XMPP Bridge ## Configuring the XMPP Bridge The XMPP bridge relies on the xmpp "component" feature. It is an equivalent of matrix application services. You need to configure an XMPP Component on an XMPP Server that the bridge will use to bridge matrix and xmpp user. ### On the hosting machine From the Installer's Integrations page, click "Install" under "XMPP Bridge". ### Examples In all the examples below the following are set: - The `domain_name` is your homeserver domain ( the part after : in your MXID ) : `example.com` - XMPP Server FQDN: xmpp.example.com - XMPP External Component/`xmpp_domain`: `matrix.xmpp.example.com` #### Prosody Example If you are configuring prosody, you need the following component configuration (for the sample xmpp server, `matrix.xmpp.example.com`): ``` Component "matrix.xmpp.example.com" ssl = { certificate = "/etc/prosody/certs/tls.crt"; key = "/etc/prosody/certs/tls.key"; } component_secret = "eeb8choosaim3oothaeGh0aequiop4ji" ``` And then with that configured, you would pass the following into `xmpp.yml`: ``` xmpp_service: xmpp://xmpp.example.com:5347 xmpp_domain: "matrix.xmpp.example.com" # external component subdomain xmpp_component_password: eeb8choosaim3oothaeGh0aequiop4ji # xmpp component password ``` Note: We've used `pwgen 32 1` to generate the `component_secret`. #### Joining an XMPP Room Once you have the XMPP bridge up, you need to map an XMPP room to a Matrix ID. For example, if the room on XMPP is named: `#welcome@conference.xmpp.example.com`, where `conference` is the FQDN of the component hosting rooms for your XMPP instance, then on Matrix, you would join: ``` #_xmpp_welcome_conference.xmpp.example.com:example.com ``` So you can simply send the following command in your Element client to jump into the XMPP room via Matrix ``` /join #_xmpp_welcome_conference.xmpp.example.com:example.com ``` #### Joining a Matrix room from XMPP If the Element/Matrix room is public you should be able to query the room list at the external component server address (Ex: `matrix.xmpp.example.com`) The Matrix room at alias `#roomname:example.com` maps to `#roomname#example.com@matrix.xmpp.example.com` on the XMPP server `xmpp.example.com` if your `xmpp_domain: matrix.xmpp.example.com` **Note:** If the Matrix room has users with the same name as yor XMPP account, you will need to edit you XMPP nickname to be unique in the room | Element | | XMPP | |------| ---- | ------ | |#**roomname**:element.local (native Matrix room)| → | #**roomname**#element.local@element.xmpp.example.com (bridged into XMPP)| |#_xmpp\_**roomname**_conference.xmpp.example.com:element.local (bridged into Matrix/Element) | ← | #**roomname**@conference.xmpp.example.com (native XMPP room) | ## Using the bridge as an end user For end user documentation you can visit the [Using the Matrix XMPP Bridge as an End User](https://ems-docs.element.io/books/element-support/page/using-the-matrix-xmpp-bridge-as-an-end-user) documentation. # Setting up Location Sharing ## Overview The ability to send a location share, whether static or live, is available without any additional configuration. However, when *receiving* a location share, in order to display it on a map, the client must have access to a tile server. If it does not, the location will be displayed as text with coordinates. By default, location sharing uses a MapTiler instance and API key that is sourced and paid for by Element. This is provided free, primarily for personal EMS users and those on Matrix.org. If no alternate tileserver is configured either on the HomeServer or client then the mobile and desktop applications will fall back to Element's MapTiler instance. Self-hosted instances of Element Web will not fall back, and will show an error message. ## Using Element's MapTiler instance Customers should be advised that our MapTiler instance is not intended for commercial use, it does not come with any uptime or support SLA, we are not under any contractual obligation to provide it or continue to provide it, and for the most robust privacy customers should either source their own cloud-based tileserver or self-host one on-premises. However, if they wish to use our instance with Element Web for testing, demonstration or POC purposes, they can configure the map_style_url by adding extra configurations in the advanced section of the Element Web page in the installer: ```plaintext { "map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx" } ``` ## Using a different tileserver If the customer sources an alternate tileserver, whether from MapTiler or elsewhere, you should enter the tileserver URL in the `extra_client` section of the Well-Known Delegation Integration accessed from the Integrations page in the Installer: ```plaintext { ... other info ... "m.tile_server": { "map_style_url": "http://mytileserver.example.com/style.json" } ``` ## Self-hosting a tileserver Customers can also host their own tileserver if they wish to dedicate the resources to doing so. Detailed information on how to do so is available [here](https://matrix.org/docs/guides/map-tile-server). ## Changing permissions for live location sharing By default live location sharing is restricted to moderators of rooms. In direct messages, both participants are admins by default so this isn't a problem. However this does impact public and private rooms. To change the default permissions for new rooms the following Synapse additional configuration should be set ```yaml default_power_level_content_override: private_chat: events: "m.beacon_info": 0 "org.matrix.msc3672.beacon_info": 0 "m.room.name": 50 "m.room.power_levels": 100 "m.room.history_visibility": 100 "m.room.canonical_alias": 50 "m.room.avatar": 50 "m.room.tombstone": 100 "m.room.server_acl": 100 "m.room.encryption": 100 # Not strictly necessary as this is used for direct messages, however if additional users are later invited into the room they won't be administrators trusted_private_chat: events: "m.beacon_info": 0 "org.matrix.msc3672.beacon_info": 0 "m.room.name": 50 "m.room.power_levels": 100 "m.room.history_visibility": 100 "m.room.canonical_alias": 50 "m.room.avatar": 50 "m.room.tombstone": 100 "m.room.server_acl": 100 "m.room.encryption": 100 public_chat: events: "m.beacon_info": 0 "org.matrix.msc3672.beacon_info": 0 "m.room.name": 50 "m.room.power_levels": 100 "m.room.history_visibility": 100 "m.room.canonical_alias": 50 "m.room.avatar": 50 "m.room.tombstone": 100 "m.room.server_acl": 100 "m.room.encryption": 100 ``` # Removing Legacy Integrations Today, if you remove a Yaml integration's config, its components will not be removed from the cluster automatically. You will also need to manually remove the custom resources from the Kubernetes cluster. ## Removing Monitoring stack You need to delete first the VMSingle and the VMAgent from the namespace : ``` kubectl delete vmsingle/monitoring -nWe strongly advise against including any config not configurable via the UI as it will most likely interfere with settings automatically computed by the updater. Additional configuration options are not supported so we encourage you to first raise your requirements to Support where we can best advise on them.
[](https://ems-docs.element.io/uploads/images/gallery/2024-02/image-1707403377252.png) Configuration should follow the same format as supplied by the [Configuration Manual](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html), if you include options that have otherwise been configured via the UI they will be overridden with the exception of MAU, Federation and Data Retention (see [Nonoverridable Config](#bkmrk-max_mau_value%2C-limit)). Though as noted above, any additional config carries the risk that it will most likely interfere with settings automatically computed by the updater. ### What version of Synapse am I running?Remember to set the configuration manual page to the version of Synapse deployed by the installer, otherwise you may see configuration options / guidance not applicable to the version of Synapse you have deployed.
You can determine the version of Synapse you have deployed by using `kubectl describe pod first-element-deployment-synapse-main-0 -n element-onprem | grep version`, changing the pod name as needed. This will output something like `app.kubernetes.io/version=v1.93.0-lts.1-base`, as such when you visit any link to the Configuration Manual, you should update the page to see the correct information for your version. [](https://ems-docs.element.io/uploads/images/gallery/2024-02/image-1707910732938.png) [](https://ems-docs.element.io/uploads/images/gallery/2024-02/image-1707910771900.png) ### Known Issues #### [`max_mau_value`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#max_mau_value), [`limit_usage_by_mau`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#limit_usage_by_mau), [`federation`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#federation-1) and [`retention`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#retention) Configuration of these via `Additional Config`, that are in conflict with those set via the UI, will not override the UI set values. As such, we do not advise including them or any related settings within the `Additional Config` as they are of increased risk to causing issues with your deployment. #### [`auto_join_rooms`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#auto_join_rooms) Due to how the installer sets up Synapse, the `auto_join_rooms` option will only work when configured as required on the first deployment. Should you configure this on an existing deployment, or change the rooms on a subsequent deployment, it will not function and you'll receive various errors within the Synapse pod logs. To resolve you will need to manually create the rooms and specify `auto_join_mxid_localpart` in your config. If you're using AdminBot / AuditBot, either would be a perfect candidate for the specified MXID as you can be sure they will be in any room you specify. Therefore in order to get this setup, you'll need to follow these steps: - For a brand new "fresh" install, simply specify with config per the manual, on the first user registration, they will create and join the specified rooms and all subsequent users will also auto-join. ```yml auto_join_rooms: - "#exampleroom:example.com" - "#anotherexampleroom:example.com" ``` - For existing installs, or when you wish to adjust the auto-join room list, you will need to: 1. Manually create the rooms and assign the desired alias. (Room Settings -> Local Addresses) 2. Add the following config, making sure to set the localpart to a user present within the rooms specified. This could be the room creator, someone invited who has joined, or something like Admin/Audit Bot. ```yml auto_join_mxid_localpart: adminbot ``` 3. Redeploy, wait for the synapse pod to restart 4. Newly registered users will now auto-join the specified rooms As usual, with `auto_join_rooms`, the caveat is that changing the rooms will not automatically join previously registered users to the updated rooms. To automate this you will likely need to make use of the Admin API, see [Using Python with the Admin + Client-Server APIs](https://ems-docs.element.io/books/element-support/page/using-python-with-the-admin-client-server-apis), specifically [Example #1: Join Users to Rooms](https://ems-docs.element.io/link/458#bkmrk-example-%231%3A-join-use) would be a good starting point. ### Exceptions While use of Additional Config is not recommended, there are certain circumstances built-in to the UI that will allow you to defer to configuration options you will need to specify within the Additional Config block. These exceptions will be covered here, however please be advised, using them still carries risk of instability so we'd recommend sticking with options fully supported by the UI itself. #### `Custom` Registration Within the Synapse section of the installer, as part of the registration configuration, you can select `Custom`. When doing so, configuration of [Registration](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#registration) should be done via Additional Config, allowing you more control. Options that can be configured can be found at the linked [Registration](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#registration) section of the Synapse Configuration Manual, but include: - [`enable_registration`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#enable_registration) - [`enable_registration_without_verification`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#enable_registration_without_verification) - [`registrations_require_3pid`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#registrations_require_3pid) - [`registration_requires_token`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#registration_requires_token) - [`registration_shared_secret`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#registration_shared_secret) #### Allowing Private Federation via [`ip_range_whitelist`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#ip_range_whitelist) By default private IP ranges are blacklisted, per [`ip_range_blacklist`](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#ip_range_blacklist). So when looking to privately federate between two homeservers, where they'd communicate over one of these private ranges, without specifying said range using `ip_range_whitelist` it will fail showing errors like the below: ``` synapse.http.federation.well_known_resolver - 259 - INFO - GET-369 - Fetching https://server2.example.com/.well-known/matrix/server synapse.http.client - 199 - INFO - sentinel - Blocked 172.20.8.127 from DNS resolution to server2.example.com ``` To resolve this, you will need to add the following to the Additional config: ```yml ip_range_whitelist: - '172.16.0.0/12' ``` ### Config Example When setting additional config via the UI, the following would be added to the your `deployment.yml`: [](https://ems-docs.element.io/uploads/images/gallery/2024-05/image-1716546562058.png) ```yml spec: components: synapse: config: additional: |- ip_range_whitelist: - '172.16.0.0/12' ``` # Synapse Section: Workers The `Workers` section, which allows you to configure [Synape Workers](https://element-hq.github.io/synapse/latest/workers.html), is available under the 'Advanced' section of the `Synapse` page. ### What are Synapse Workers Synapse is built on Python, an inherent limitation of which is only being able to execute one thread at a time (due to the GIL). To allow for horizontal scaling Synapse is built to split out functionality into multiple separate python processes. While for small instances it is recommended to run Synapse in the default monolith mode, for larger instances where performance is a concern it can be helpful to split out functionality into these separate processes, called Workers.![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
How to change an image used by a container deployed by ESS.
In specific use cases you might want to change the image used for a specific pod, for example, to add additional contents, change web clients features, etc. In general the steps to do this involve: - Creating a new ConfigMap definition with the overrides you need to configure, then injecting it into the cluster. - Configuring the installer to use the new Images Digests Config Map. - Generating a secret for the registry (if it requires authentication) and adding it to ESS.
We strongly advise against customising any pods. Customised containers are not supported and may break your setup so we encourage you to first raise your requirements to Support where we can best advise on them.
The built-in Synapse container image uses a Synapse build with our proprietary modules included, if you choose to replace this, you will no longer have access to these modules.
### Non-Airgapped Environments #### Creating the new Images Digests Config Map In order to override images used by ESS during the install, you will need to inject a new ConfigMap which specifies the image to use for each component. To do that, you will need to inject a ConfigMap. It's structure maps the components of the ESS, all of them can be overridden :Find out more about the Secrets block found under each Sections' Advanced configuration options
Under 'Advanced' in each section, you may find a block listing all the associated secrets configured as part of this section. This directly correlates to your `secrets.yml` and will allow you to remove secrets no longer required. For example, on the Cluster Section you may have uploaded a Certificate Authority CA.pem, you can use this block to remove it should it no longer be required. It is not however advised to modify the contents of secrets from this view, you should always do so via the associated UI that configures it in the first place, see the below example from the Cluster section. [](https://ems-docs.element.io/uploads/images/gallery/2024-05/image-1716368370442.png) ##### CA Pem
You should first consider using an existing webserver before installing and maintaining an additional webserver for these requirements.
The following guide describes the steps to setup the Bitnami Apache helm chart in the Standalone `microk8s` cluster setup by Element Server Suite. **Requirements:** - a DNS entry pages.BASEDOMAIN. - a Certificate (private key + certificate) for pages.BASEDOMAIN - an installed standalone Element Server Suite setup - access to the server on the command line **Results:** - a web server that runs in the `mircok8s` cluster - a directory `/var/www/apache-content` to place and modify web content like homepage, backgrounds and guides.This guide is applicable to the Single Node deployment of Element Server Suite but can be used for guidance on how to host a webserver in other Kubernetes Clusters as well.
You can use any webserver that you like, in this example we will user the Bitnami Apache chart. We need helm version 3. You can follow [this Guide](https://helm.sh/docs/intro/install/) or ask `microk8s` to install `helm3`. ### Installing Prerequisites #### Enabling Helm3 with microk8s ```bash $ microk8s enable helm3 Infer repository core for addon helm3 Enabling Helm 3 Fetching helm version v3.8.0. % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 12.9M 100 12.9M 0 0 17.4M 0 --:--:-- --:--:-- --:--:-- 17.4M Helm 3 is enabled ``` Let's check if it is working ```bash $ microk8s.helm3 version version.BuildInfo{Version:"v3.8.0", GitCommit:"d14138609b01886f544b2025f5000351c9eb092e", GitTreeState:"clean", GoVersion:"go1.17.5"} ``` Create and Alias for helm ```bash echo alias helm=microk8s.helm3 >> ~/.bashrc source ~/.bashrc ``` #### Enable the Bitnami Helm Chart repository Add the bitnami repository ```bash helm repo add bitnami https://charts.bitnami.com/bitnami ``` Update the repo information ```bash helm repo update ``` ### Preparation and Configuration #### Prepare the Web-Server Content Create a directory to supply content: ``` sudo mkdir /var/www/apache-content ``` Create a homepage `home.html`, i.e.: ```htmlYou can find a Getting Started Guide here
Powered by Matrix, provided by Element.
Create a Key Backup & Passphrase now!
(see Getting Started Guite p. 5)
Authentication configuration examples for LDAP, OpenID on Azure and SAML.
Provided below are some configuration examples covering how you can set up various types of Delegated Authentication. For a more detailed look at what each configuration option does, please refer to the [Authentication Section](https://ems-docs.element.io/books/classic-element-server-suite-documentation-lts-2410/page/authentication-section) detailed document. ### LDAP on Windows AD
![]() |
![]() |
![]() |
![]() |
![]() |
https://login.microsoftonline.com/ Understand your ESS configuration files and how you can automate ESS deployment(s). Config examples included on this page may not up-to-date and are solely provided for demonstration purposes. It is highly recommended to run the version of the installer you wish to install to generate and configure config files that work with that version. Once these config files have been created by the installer, you should refer to the up-to-date config examples available in the installation documentation to understand how each config option can be modified. As integrations are upgraded to the new format this example (IRC) may become outdated, however the process remains identical for any integrations still using the legacy format. Make sure to check via the installer if the integration you are looking for is configured in this way. An ESS Administrators focused guide on backing up and restoring Element Server Suite. Synapse media and db backups should be considered sensitive. Adminbot PV backup should be considered sensitive. Auditbot PV backup should be considered sensitive. Sliding-Sync DB Backups should be considered sensitive. Sydent DB Backups should be considered sensitive. Matrix Authentication Service DB Backups should be considered sensitive. IRC Bridge DB Backups should be considered sensitive.
Take great care when modifying and running queries in your database. Ensure you understand what the queries do and double check that your query is correct.
This document is currently work-in-progress and might not be accurate. Please speak with your Element contact if you have any questions. Once Synapse is stopped, do not start it again after this The following command will erase the existing Synapse Database without warning or confirmation. Please ensure that is is the correct database and there is no production data on it. AKA the Installer GUI, a quick overview of the Configure and Admin tabs and the sections within. What's supported and how to get in touch! Some changes added to non-LTS monthly releases are backported into older LTS releases if required. As such, some of the below features may already be present in a previous LTS. You can check the associated LTS books' respective changelog page to compare.
Checked
- **Attribute Map****.**
Select `URN:Oasis:Names:TC:SAML:2.0:Attrname Format:Basic` as the `Identifier`
- **Mapping****.**
Set the following mappings:
- From: `Primary Email` To: `email`
- From: `First Name` To: `firstname`
- From: `Last Name` To: `lastname`
- **Entity****.**
- **Description****.**
- **Entity ID****.** (From Azure)
- **Name****.**
- **User Mapping Provider****.**
Set the following:
- `MXID Mapping`: `Dotreplace`
- `MXID Source Attribute`: `uid`
- **Metadata URL****.**
Add the `App Federation Metadata URL` from Azure.
### Troubleshooting
#### Redirection loop on SSO
Synapse needs to have the `X-Forwarded-For` and `X-Forwarded-Proto` headers set by the reverse proxy doing the TLS termination. If you are using a Kubernetes installation with your own reverse proxy terminating TLS, please make sure that the appropriate headers are set.
# Automating ESS Deployment
Config Example
```yml
apiVersion: ess.element.io/v1alpha1
kind: InstallerSettings
metadata:
annotations:
k8s.element.io/version: 2023-07.09-gui
name: first-element-cluster
```
Config Example
```yml
apiVersion: matrix.element.io/v1alpha1
kind: ElementDeployment
metadata:
name: first-element-deployment
namespace: element-onprem
```
Config Example
```yml
config:
acceptInvites: manual
adminPasswordSecretKey: adminPassword
externalAppservices:
configMaps: []
files: {}
federation:
certificateAutoritiesSecretKeys: []
clientMinimumTlsVersion: '1.2'
trustedKeyServers: []
log:
rootLevel: Info
macaroonSecretKey: macaroon
maxMauUsers: 250
media:
maxUploadSize: 100M
volume:
size: 50Gi
postgresql:
passwordSecretKey: postgresPassword
port: 5432
sslMode: require
registration: closed
registrationSharedSecretSecretKey: registrationSharedSecret
security:
defaultRoomEncryption: not_set
signingKeySecretKey: signingKey
telemetry:
enabled: true
passwordSecretKey: telemetryPassword
room: '#element-telemetry'
urlPreview:
config:
acceptLanguage:
- en
workers: []
```
Config Example
```yml
k8s:
common:
annotations: {}
haproxy:
workloads:
annotations: {}
resources:
limits:
memory: 200Mi
requests:
cpu: 1
memory: 100Mi
securityContext:
fsGroup: 10001
runAsUser: 10001
ingress:
annotations: {}
fqdn: synapse.example.com
services: {}
tls:
certmanager:
issuer: letsencrypt
mode: certmanager
redis:
workloads:
annotations: {}
resources:
limits:
memory: 50Mi
requests:
cpu: 200m
memory: 50Mi
securityContext:
fsGroup: 10002
runAsUser: 10002
synapse:
common:
annotations: {}
monitoring:
serviceMonitor:
deploy: auto
storage: {}
workloads:
annotations: {}
resources:
limits:
memory: 4Gi
requests:
cpu: 1
memory: 2Gi
securityContext:
fsGroup: 10991
runAsUser: 10991
secretName: synapse
```
Config Example
```yml
global:
config:
adminAllowIps:
- 0.0.0.0/0
- ::/0
certificateAuthoritySecretKey: ca.pem
domainName: example.com
genericSharedSecretSecretKey: genericSharedSecret
supportDnsFederationDelegation: false
verifyTls: true
k8s:
common:
annotations: {}
ingresses:
annotations: {}
services:
type: ClusterIP
tls:
certmanager:
issuer: letsencrypt
mode: certmanager
monitoring:
serviceMonitor:
deploy: auto
workloads:
annotations: {}
hostAliases: []
replicas: 2
securityContext:
forceUidGid: auto
setSecComp: auto
secretName: global
```
Config Example
```yml
apiVersion: v1
data:
genericSharedSecret: Q1BoVmNIaEIzWUR6VVZjZXpkMXhuQnNubHhLVVlM
kind: Secret
metadata:
name: global
namespace: element-onprem
```
Config Example
```yml
key_file: passkey.pem
bridged_irc_servers:
- postgres_fqdn: ircbridge-postgres
postgres_user: ircbridge
postgres_db: ircbridge
postgres_password: postgres_password
admins:
- "@user:example.com"
logging_level: debug
enable_presence: true
drop_matrix_messages_after_seconds: 0
bot_username: "ircbridgebot"
provisioning_room_limit: 50
rmau_limit: 100
users_prefix: "irc_"
alias_prefix: "irc_"
address: irc.example.com
parameters:
name: "Example IRC"
port: 6697
ssl: true
botConfig:
enabled: true
nick: "MatrixBot"
username: "matrixbot"
password: "some_password"
dynamicChannels:
enabled: true
mappings:
"#welcome":
roomIds: ["!MLdeIFVsWCgrPkcYkL:example.com"]
ircClients:
allowNickChanges: true
```
The free version of our Element Server Suite.
Allowing you to easily install a Synapse homeserver and hosted Element Web client.
- **Kubernetes Deployments****.**
We strongly recommend to leverage your own cluster backup solutions for effective data protection.
You'll find below a description of the content of each component data and db backup.
#### Synapse
- Synapse deployments creates a PVC named `
Users will loose their Avatars, and all photos, videos, files uploaded to the rooms wont be available anymore
- **AdminBot and AuditBot Data****.**
The bots will need to be renamed for them to start joining all rooms and logging events again
- **Sliding Sync****.**
Users will have to do an initial-sync again, and their encrypted messages will display as "Unable to decrypt" if its database cannot be recovered
- **Integrator****.**
Integrations will have to be added back to the rooms where they were configured. Their configuration will be desynced from integrator, and they might need to be reconfigured from scratch to have them synced with integrator.
### Security Considerations
Some backups will contain sensitive data, Here is a description of the type of data and the risks associated to it. When available, make sure to enable encryption for your stored backups. You should use appropriate access controls and authentication for your backup processes.
#### Synapse
Backups should be made by taking a snapshot of the PV (ideally) or rsyncing the backing directory to backup storage
- **AuditBot****.**
Backups should be made by taking a snapshot of the PV (ideally) or rsyncing the backing directory to backup storage
- **Synapse Media****.**
Backups should be made by taking a snapshot of the PV (ideally) or rsyncing the backing directory to backup storage
- **Postgres****.**
- **In Cluster:** Backups should be made by
```bash
kubectl -n element-onprem exec -it postgres-synapse-0 -- sh -c 'pg_dump --exclude-table-data e2e_one_time_keys_json -U $POSTGRES_USER $POSTGRES_DB' \
> synapse_postgres_backup_$(date +%Y%m%d-%H%M%S).sql
```
- **External:** Backup procedures as per your DBA, keeping in mind [Synapse specific details](https://element-hq.github.io/synapse/latest/usage/administration/backups.html#synapse-specfic-details)
- **Configuration****.**
Please ensure that your entire configuration directory (that contains at least `parameters.yml` & `secrets.yml` but may also include other sub-directories & configuration files) is regularly backed up.
The suggested configuration path in Element's documentation is `~/.element-onpremise-config` but could be anything. It is whatever directory you used with the installer.
# Calculate monthly active users
Incorrect queries can cause irrecoverable data loss.
We recommend you familiarize yourself with Transactions. That way, changes are not immediately written and you can undo any errors.
Enterprise
Sovereign
Level 1 Urgent
4 hours
2 hours
Level 2 High
8 hours
4 hours
Level 3 Medium
1 day
1 day
Level 4 Low
2 days
2 days
Click for a specific example
I had this "unknown playbook failure"
[](https://ems-docs.element.io/uploads/images/gallery/2024-07/image-1720802779508.png)
After enabling debug logging for the updater, I found this error telling me that my Telegram bridge is misconfigured
```plaintext
--------------------------- Ansible Task StdOut -------------------------------
TASK [Build all components manifests] ********************************
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an
undefined variable. The error was: 'dict object' has no attribute
'telegramApiId'. 'dict object' has no attribute 'telegramApiId'. 'dict object'
has no attribute 'telegramApiId'. 'dict object' has no attribute
'telegramApiId'. 'dict object' has no attribute 'telegramApiId'. 'dict object'
has no attribute 'telegramApiId'. 'dict object' has no attribute
'telegramApiId'. 'dict object' has no attribute 'telegramApiId'\n\nThe error
appears to be in '/element.io/roles/elementdeployment/tasks/prepare.yml': line
21, column 3, but may\nbe elsewhere in the file depending on the exact syntax
problem.\n\nThe offending line appears to be:\n\n\n- name: \"Build all
components manifests\"\n ^ here\n"}
```
Example output
```plaintext
table_schema | table_name | data_size
--------------+---------------------------------------+-----------
public | event_json | 2090 MB
public | event_auth | 961 MB
public | events | 399 MB
public | current_state_delta_stream | 341 MB
public | state_groups_state | 294 MB
public | room_memberships | 270 MB
public | cache_invalidation_stream_by_instance | 265 MB
public | stream_ordering_to_exterm | 252 MB
public | state_events | 249 MB
public | event_edges | 208 MB
(10 rows)
```
Example output
```plaintext
room_id | count
---------------------------------+---------
!GahmaiShiezefienae:example.com | 1382242
!gutheetheixuFohmae:example.com | 1933
!OhnuokaiCoocieghoh:example.com | 357
!efaeMegazeeriteibo:example.com | 175
!ohcahTueyaesiopohc:example.com | 93
!ithaeTaiRaewieThoo:example.com | 43
!PhohkuShuShahhieWa:example.com | 39
!eghaiPhetahHohweku:example.com | 37
!faiLeiZeefirierahn:example.com | 29
!Eehahhaepahzooshah:example.com | 27
(10 rows)
```
In this instance something unusual might be going on in `!GahmaiShiezefienae:example.com` that warrants further investigation.
Click to see commands for installers prior to version 2023-05.05
For installers prior to 2022-05.06, use:
```bash
kubectl describe cm -n element-onprem first-element-deployment-synapse-shared
```
For the 2022-05.06 installer and later, use:
```bash
kubectl -n element-onprem get secret synapse-secrets -o yaml 2>&1 | grep shared.yaml | awk -F 'shared.yaml: ' '{print $2}' - | base64 -d
```
### 24.10.02-gui
#### Security Issues
24.10.01-gui
The required Python versions are now 3.10, 3.11, 3.12.
As a result, Ubuntu 24.04 is now supported but Ubuntu 20.04 support is dropped. Please consult the Ubuntu documentation for upgrading between Ubuntu LTS versions.
The installer will attempt to install the required packages in some scenarios.
Airgapped customers should ensure that Python 3.12 packages are available in their package mirrors.
Alternatively, Python 3.10, 3.11, or 3.12 can be preinstalled on the server in all situations.
#### Bug Fixes
Enterprise
Upgrade Element Web to v1.11.85, fixes CVE-2024-50336, CVE-2024-51749 and CVE-2024-51750.
#### Deprecations
Enterprise
When setting securityContext for pods, also set runAsGroup.
### 24.10.01-gui
#### Release Summary
The required Python versions are now 3.10, 3.11, 3.12. As a result, Ubuntu 24.04 is now supported but Ubuntu 20.04 support is dropped. Please consult the Ubuntu documentation for upgrading between Ubuntu LTS versions. The installer will attempt to install the required packages in some scenarios. Airgapped customers should ensure that Python 3.12 packages are available in their package mirrors. Alternatively, Python 3.10, 3.11, or 3.12 can be preinstalled on the server in all situations.
#### New Features
Starter
Starter Edition is deprecated, and will not be released anymore.
#### Upgrade Notes
Enterprise
XMPP Bridge and IRC Bridge both support Authenticated Medias. Their signing key is generated automatically by the installer UI. Enterprise / Starter
Authenticated Media is now enforced by default. All components but Matrix Content Scanner are compatible with it. If you need to disable it, please add `enable_authenticated_media: false` to Synapse -> Additional YAML. Enterprise / Starter
Add the possibility to allow/deny rooms and log events for Auditbot. Enterprise / Starter
Support overriding just the server and path in the image digest ConfigMap. Enterprise / Starter
Support Element Call in Element X. Enterprise / Starter
Matrix Authentication Service and Synapse only use internal paths to communicate, removing the need for `hostAliases` setup between the two. Enterprise
All ESS Images are now hosted behind `registry.element.io`. Enterprise
Synapse workers supporting multiple replicas can now be configured for automatic horizontal scaling. Enterprise / Starter
Expose `images_digests.yml` file in the Download screen for Airgapped customers who want to sync their registry directly with `registry.element.io`.
#### Security Issues
Enterprise / Starter
Upgrade to cert-manager 1.15.3. Enterprise / Starter
Operator - Upgrade Python to 3.12, Ansible to 2.17. Enterprise / Starter
Upgrade Synapse to v1.116.0. Enterprise / Starter
Upgrade Element Web to v1.11.82. Enterprise
Update XMPP Bridge to 2.0.1. Enterprise
Update Adminbot and Auditbot to 6.3.1. Enterprise
Update IRC Bridge to 3.0.2. Enterprise
Update Hydrogen to 0.5.0. Enterprise / Starter
Update Admin Console to v16.105.4. Enterprise / Starter
Upgrade microk8s to 1.31.
As per 24.10 releases, the standalone installer only supports upgrading microk8s installed from 23.10 releases.
As per 23.10.35/24.04.05/24.05.01, the standalone installer now upgrades microk8s automatically. The microk8s upgrade procedure does not involve an uninstall/reinstall of microk8s anymore. It now will automatically upgrade microk8s to the expected version, and as such, the `--upgrade-cluster` flag has been removed.
Any customization to CNI Configuration in `/var/snap/microk8s/current/args/cni-network/cni.yaml` will have to be reconfigured.
During the upgrade, microk8s & workloads will restart several times. Managed addons that require upgrading will be temporarily disabled to be upgraded.
This all will induce a small downtime of a couple of minutes. Enterprise / Starter
The installer now makes sure the upgrade comes from a supported version.
#### Bug Fixes
Enterprise / Starter
Upgrade to Ansible 9 for security fixes and Python compatibility.
#### Deprecations
Enterprise
Allow only one VoIP platform (Jitsi or Element Call) to be enabled. Enterprise
Fix migration of authentication settings from <24.07.01 with Matrix Authentication Service installed. Enterprise / Starter
Fix an issue where, after update, the installer UI would ask to save for changes on the Host screen when the user actually did not click anything. Enterprise
Fix monitoring integration tab not rendering. Enterprise
Fix Auditbot logs viewer when Matrix Authentication Service is setup.
### Non-LTS Monthly Release Changes
This section summarises all the changes between the previous LTS and this one during the monthly non-LTS releases. Duplicate entries where individual components received upgrades have been removed so only the latest version is mentioned.
You can then compare the below changelog against the above LTS releases for an accurate overall changelog if upgrading from a previous LTS.
Starter
Matrix Content Scanner is not available anymore in Starter Edition.
#### New Features
Enterprise
This release adds the possibility to enable Matrix Authentication Service during initial setup. Enabling Matrix Authentication Service is experimental; a couple of features do not work yet with it (Auditbot, Adminbot, Element Call, GroupSync, Admin UI). Enabling MAS allows you to use Element X with OIDC or LDAP login. Enterprise
This release now makes ESS ElementX ready by default. Any new installation will deploy Matrix Authentication Service. Existing setups will not profit from this change, migration paths are planned later in the future.
#### Upgrade Notes
General
Support knocking with `generic_worker` federation. Enterprise / Starter
**Major Change:** The standalone installer now upgrades microk8s gracefully and automatically. The microk8s upgrade procedure no longer involves an uninstall/reinstall of microk8s. It now automatically upgrades microk8s to the expected version, and the `--upgrade-cluster` flag has been removed.
Any customization to CNI Configuration in `/var/snap/microk8s/current/args/cni-network/cni.yaml` will need to be reconfigured. During the upgrade, microk8s will restart, and addons will be disabled to force an upgrade. This process may induce a small downtime of a couple of minutes. Enterprise
Status watchers are now golang containers, reducing resources used by the operator and updater. Enterprise
Allow configuration of Synapse database connection pool sizes. Enterprise
Add a ServiceMonitor to scrape metrics of microk8s ingress. Enterprise
Expose Operator & Updater metrics. Enterprise
Add support for Outbound webhooks in Hookshot. Enterprise
Synapse OIDC support attribute requirements. Enterprise
Add a new experimental feature to enable Matrix Authentication Service during ESS bootstrap. Enterprise
Simplification of the OIDC provider configuration. After upgrading, please make sure that your OIDC settings were properly migrated to the new view. Enterprise
It is now possible to enable the new Matrix Authentication Service when bootstrapping a new ESS setup. It is an experimental feature, incompatible with Groupsync, Element Call, Auditbot, and Adminbot at this time. It is required to try out Element X with OIDC login. Enterprise
It is now possible to use LDAP with Matrix Authentication Service. Enterprise / Starter
Properly enforce patterns check in UI inputs under cards that can be enabled/disabled. Enterprise
Display deployment availability in the UI, in addition to the reconciliation status. Enterprise
Element Call is now MAS-Compatible. Enterprise
Add the possibility to configure a matrix stats endpoint. Enterprise
Setup the onprem-admin user as a MAS admin. Enterprise
Allow configuration of empty (no) disallowed IP ranges in Hookshot. Enterprise
Validate Synapse Telemetry is consistently set. Enterprise / Starter
Synapse improve worker configuration. Enterprise / Starter
Allow blocking of non-scanned media. Enterprise
Adminbot/Auditbot + MAS compatibility. Enterprise / Starter
The UI now properly marks secrets as required when necessary. Enterprise / Starter
The reconciliation process now ensures that all secrets are present and shows missing secrets if necessary. Enterprise
Add Hookshot permissions configuration. Enterprise
Add the possibility to manage Federation dynamically from the Admin Console when Secure Border Gateway is enabled. Enterprise / Starter
Speed up initial Synapse deployment. Enterprise
Add the possibility to configure user deprovisioning and room cleanup in GroupSync. Enterprise
Synapse auto invite: use Synapse native feature, run on background worker if it exists. Enterprise
Allow to override a container image without configuring a new digest. Enterprise / Starter
Support MSC4186 / Simplified Sliding Sync natively in Synapse. Enterprise / Starter
Support authenticated media APIs (MSC3916) in Synapse. Enterprise / Starter
Scrape Synapse HAProxy metrics. Enterprise
Scrape Adminbot and Auditbot HAProxy metrics. Enterprise
Set default volume sizes for Matrix Content Scanner volumes. Enterprise
Set default volume sizes for Adminbot, Auditbot & Sydent volumes. Enterprise / Starter
The administration interface can now manage users on deployments using Matrix OIDC. Enterprise
Administrators can now configure the SBG allowlist within the Admin UI. Enterprise / Starter
The user management page now allows admins to toggle the locked status of users. Enterprise / Starter
The user management page now displays the primary email address of users. Enterprise / Starter
The user management page will now default to showing locked and deactivated users when searching by name. Enterprise
Enabling MAS is not experimental anymore, and is now the default setup mode. Enterprise
Allow to override a container image without configuring a new digest. Enterprise / Starter
Allow configuration of the operator and updater with debug logs. Enterprise / Starter
Check for supported Python versions when starting a deployment run. Recreate the virtual environment if it is using the wrong Python version. Enterprise / Starter
The installer now makes sure that the microk8s version on the host is supported before starting the upgrade process. Enterprise / Starter
Speed improvements in the operator/updater reconciliation process.
#### Security Issues
Enterprise
Upgrade Telegram bridge to 0.15.1-mod-1. Enterprise
Upgrade WhatsApp bridge to 0.10.7-mod-1. Enterprise
Upgrade Sygnal to 0.14.3 to support the latest Firebase API. Enterprise
Update Synapse Admin to v16.92.0. Enterprise
Update Adminbot to Pipe 6.1.1. Enterprise / Starter
Matrix Content Scanner upgrade to 1.0.8. Enterprise / Starter
On RHEL and derived platforms, it now requires `python 3.11` installed. Enterprise
Upgrade SecureBorderGateway to v1.2.0. Enterprise
Upgrade Auditbot to 6.1.2 to improve overall request handling efficiency, especially at high-loads. Enterprise / Starter
Upgrade to Synapse 1.114.0. Enterprise
Upgrade to Element Call 0.6.3 with improved call layout. Enterprise
Upgrade to Matrix Authentication Service 0.11.0 and support password auth. Enterprise
Synapse registration and password policy settings are now moved to Authentication configuration, under Local Password Database mode. Enterprise
Upgrade Hydrogen to v0.4.1-fix. Enterprise / Starter
Upgrade to cert-manager 1.12.13. Enterprise / Starter
Upgrade ElementWeb to v1.11.81. Enterprise / Starter
Services got renamed, `-headless` suffixes are all removed. If you are using Network Policies, those will need to be upgraded to the new names. Enterprise
Global upgrade of the monitoring stack. Victoria Metrics is now on version 1.101. Enterprise
Now that Synapse brings native Sliding Sync protocol, the Sliding Sync proxy has been discontinued. Its PostgreSQL cluster instance is being cleaned-up.
#### Bug Fixes
Enterprise
Previous update might have enabled unexpectedly outbound webhooks in Hookshot. If you don't need this feature, make sure that it is disabled in Hookshot integration, under Generic Webhooks settings. Enterprise
Better image signatures, enterprise is now published to sigstore. Enterprise / Starter
Upgrade to Ansible 8 for security fixes.
#### Deprecations
Enterprise / Starter
Fix Remove button not working for some integrations. Enterprise / Starter
Fix cert-manager upgrade failing to remove old resources. Enterprise / Starter
Fix operator and updater having permissions issues under Openshift. Enterprise / Starter
Fix Jitsi JVB failing to get ready when STUN servers list is empty and Coturn is not deployed. Starter
Fix upgrade failing. Enterprise
Fix missing storage class on some Monitoring PVCs. Enterprise
Fix media screen on standalone setup. Enterprise / Starter
Remove `--upgrade-cluster` parameter as microk8s is now upgraded gracefully. Enterprise
Fix inconsistent behavior when switching between S3/Persistent volume option under the media tab. Enterprise / Starter
Fix watchers to avoid triggering unneeded reconciliation loops. Enterprise
GroupSync: Fix issue when LDAP identities contain commas in their names. Enterprise
Configuring monitoring stack persistent volumes properly in microk8s requires recreating their statefulsets. Starter / Enterprise
Fix haproxy failing on IPv4-only nodes. Enterprise / Starter
The installer no longer flakes between bootstrap and installer view when the Kubernetes cluster is intermittently unreachable. Enterprise
Fix an Ansible error when installing the telemetry script on the local host when user GID != UID. Enterprise / Starter
Allow well-known delegation to omit configuration of the ingress entirely without triggering unknown variable errors. Enterprise / Starter
Allow configuration of Matrix Content Scanner without a storage class name. Enterprise / Starter
Mark Postgres configuration as required for all components that use a Postgres database. Enterprise
Mark the source for GroupSync as required. Enterprise
Remove workloads and dependent CRs from statuses when they're no longer deployed. Enterprise
Fix provisioning of users that are not rate-limited. Enterprise
Better identification for the Telegram and WhatsApp bridges in their respective apps. Enterprise / Starter
Fix an issue where the cert-manager issuer would try to be created but the cert-manager webhook would not be ready. Starter / Enterprise
Fix haproxy failing on IPv4-only nodes. Enterprise
Fix monitoring of kube etcd and kube scheduler on microk8s. Enterprise
Don't include cert-manager in the airgapped tarball. ESS doesn't install or manage cert-manager in airgapped deploys. Enterprise
Avoid leaking Postgres connections when there are issues provisioning Synapse users. Enterprise
SIPBridge - Disable Virtual rooms. Enterprise
Attempt to detect OpenShift and configure operator & updater installation values appropriately. Enterprise / Starter
Fix an issue preventing setup when a proxy is configured on the host. Enterprise
Fix a critical issue which would prevent users from accessing Adminbot and Auditbot UI. Enterprise
Fixes an issue where Auditbot UI would fail to open because tokens were unable to refresh. Enterprise
Revert change of 24.04.07 which prevented Adminbot and Auditbot from doing an initial sync. Enterprise
Create new devices for Adminbot and Auditbot to work with the new Rust SDK cryptographic libraries. Enterprise
Reduce secrets leaks from operator & updater logs. If you need, for debugging purposes, to enable secrets logging, you must edit the operator & updater deployments and set the environment variable `DEBUG_MANIFESTS=1`. Enterprise / Starter
Refactor Synapse config files to own the priority of each setting managed by ESS. Enterprise
Sygnal upgrade to 0.15.0 for further Firebase API fixes. Enterprise
Adminbot and Auditbot are currently incompatible with MAS. Enterprise
Synapse - Override botocore CA bundle to allow pushing against non-AWS S3 providers. Enterprise
Add support for Element Call configuration in Element Well Known file. Enterprise
Matrix Authentication Service - Fix UI configuration of certificates for ingresses. Enterprise
Minor speed up to initial setup of Synapse. Starter
Fix MAU Limit, which was configured at 250 instead of 200. Enterprise
Prevent users from manually editing the Auditbot/Adminbot passphrase. Enterprise
Fix display of the status of the reconciliation. Enterprise
Fix Coturn page causing a memory leak. Enterprise / Starter
Ensure the `nf_conntrack` module is loaded in the kernel when deploying in standalone mode. Enterprise / Starter
Fix microk8s services subnet parsing. Enterprise / Starter
Fix some CVEs in the operator/updater/conversion webhook. Enterprise / Starter
Fix Matrix Content Scanner not working as expected. Enterprise
Configure max upload size in Secure Border Gateway request body size limit. Enterprise
Prevent users from editing Auditbot and Adminbot passphrases in the UI. Enterprise
Enforce pattern checks against inputs under options. Enterprise / Starter
Increase Matrix Content Scanner ClamAV startup reliability. Enterprise / Starter
Reduce false positives from Matrix Content Scanner. Enterprise / Starter
On RHEL and derived platforms, the installer should not rely on `platform-python` for tasks other than Firewalld and SELinux tasks for microk8s setup. Enterprise / Starter
Fix proxy variables configuration check preventing the installer to go through. Enterprise / Starter
Fix an issue preventing setup when a proxy is configured on the host. On a proxy configuration errors, the installer will now continue the setup process after displaying the verification error message. Enterprise / Starter
Enable MSC 3967 on Synapse to avoid some device verification issues. Enterprise
Setup the onprem-admin user as a MAS admin. Enterprise / Starter
Fix pulling operator & updater images from behind a proxy. Enterprise / Starter
Expired sessions are now automatically logged out of the admin interface. Enterprise / Starter
OIDC sessions are now refreshed correctly when the token expires. Enterprise
An error is now displayed when the standalone admin UI cannot load the audit/admin interface configuration. Enterprise
Ensure operator and updater metrics are correctly scraped. Enterprise
Ensure Telemetry room permissions are consistent. Enterprise
Ensure component settings for storageClassName override the global setting. Enterprise / Starter
Removing an item from a list field will now only delete one item. Enterprise
Setup the onprem-admin user as a MAS admin. Enterprise / Starter
Fix Synapse being stuck with registration closed even if explicitly allowed. Enterprise / Starter
Improve reliability of changing the Postgres password in cluster if the password seed changes. Enterprise / Starter
Fix potential permissions issues during microk8s upgrades. Enterprise
Construct storage for Matrix Content Scanner if deploying on ESS managed microk8s. Enterprise
Correctly import airgapped registry settings when upgrading from before 24.04. Enterprise / Starter
Remove unneeded reconciliations due to bad orphan detection. Enterprise / Starter
Fix updater metrics scraping. Enterprise / Starter
Improve reliability of setting up CoreDNS. Enterprise / Starter
Validate that the node IP is excluded from an HTTP Proxy if one is configured. Enterprise
Fix empty dashboards (NGinx, Kubernetes Workloads, etc) in Grafana. Enterprise
Fix missing VMAlert component which is required to gather record metrics. Enterprise / Starter
Fix microk8s stop command not stopping running containers. Enterprise / Starter
Improve reliability of some microk8s interactions.
Enterprise
Element Call participants limits feature is deprecated. The option has been removed from the UI. Enterprise
Jitsi and Element Call can not be deployed together.