17 Commits

Author SHA1 Message Date
Alexis Yushin
17c1f020dd Merge branch 'master' into feature-fluffygate 2025-04-13 10:57:33 -04:00
Slavi Pantaleev
e02dd74e3a Upgrade baibot (v1.5.1 -> v1.6.0)
Some checks failed
Matrix CI / yamllint (push) Has been cancelled
Matrix CI / ansible-lint (push) Has been cancelled
REUSE Compliance Check / reuse-compliance-check (push) Has been cancelled
2025-04-12 08:10:54 +03:00
renovate[bot]
08b68e93dc Update hif1/heisenbridge Docker tag to v1.15.3 2025-04-12 07:04:42 +03:00
adam-kress
60b291f197 Upgrade Jitsi (v10169-0 -> v10184-0)
Some checks are pending
Matrix CI / yamllint (push) Waiting to run
Matrix CI / ansible-lint (push) Waiting to run
REUSE Compliance Check / reuse-compliance-check (push) Waiting to run
2025-04-11 13:24:54 +03:00
renovate[bot]
8378e6f164 Update dependency urllib3 to v2.4.0
Some checks are pending
Matrix CI / yamllint (push) Waiting to run
Matrix CI / ansible-lint (push) Waiting to run
REUSE Compliance Check / reuse-compliance-check (push) Waiting to run
2025-04-10 22:46:43 +03:00
Slavi Pantaleev
40dd8f7785 Add a section on guest accounts and Element Call
Some checks are pending
Matrix CI / yamllint (push) Waiting to run
Matrix CI / ansible-lint (push) Waiting to run
REUSE Compliance Check / reuse-compliance-check (push) Waiting to run
2025-04-10 12:54:54 +03:00
Slavi Pantaleev
761e6d4cd6 Add matrix_dendrite_guests_disabled 2025-04-10 12:52:44 +03:00
Slavi Pantaleev
7cb33c5519 Add support for easily installing the Matrix RTC stack, without the Element Call frontend (#4242)
Some checks are pending
Matrix CI / yamllint (push) Waiting to run
Matrix CI / ansible-lint (push) Waiting to run
REUSE Compliance Check / reuse-compliance-check (push) Waiting to run
2025-04-09 16:49:18 +03:00
Alexis Yushin
7f1d394c9e Update docs/configuring-playbook-fluffygate.md
Co-authored-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
2025-01-19 08:14:08 -08:00
Alexis Yushin
a133569c82 Merge branch 'master' into feature-fluffygate 2025-01-19 10:31:25 -05:00
Alexis Yushin
3ca0f4221f Merge branch 'feature-fluffygate' of github.com:apexive/matrix-docker-ansible-deploy into feature-fluffygate 2024-11-09 19:21:23 -05:00
Alexis Yushin
74e7f41aea cleanup 2024-11-09 19:21:20 -05:00
Alexis Yushin
614dc4a51b Update docs/configuring-playbook-fluffygate.md
Co-authored-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
2024-11-09 16:20:12 -08:00
Alexis Yushin
934deda88a Update docs/configuring-playbook-fluffygate.md
Co-authored-by: Suguru Hirahara <luixxiul@users.noreply.github.com>
2024-11-09 16:20:07 -08:00
Alexis Yushin
fc9dac763d connect to traefik network by default 2024-10-24 10:10:43 -04:00
Alexis Yushin
d628b7f9d3 fixed default fluffygate port 2024-10-24 09:40:32 -04:00
Alexis Yushin
5b76b662cb optional role for matrix-fluffygate 2024-10-24 09:21:39 -04:00
24 changed files with 720 additions and 26 deletions

View File

@@ -1,3 +1,27 @@
# 2025-04-09
## Element Call frontend installation is now optional
Because all Element clients (Element Web and Element X mobile) now embed and use their own Element Call frontend application (and not the one hosted via the playbook), it makes little sense for the playbook to self-host the Element Call frontend for you. Setting up the frontend requires an additional hostname (DNS setup) and it won't be used by Element clients anyway, so **we now recommend not installing the Element Call frontend**.
💡 A reason you may wish to continue installing the Element Call frontend (despite Matrix clients not making use of it), is if you need to use it standalone - directly via a browser (without a Matrix client).
The playbook now lets you [Decide between Element Call vs just the Matrix RTC stack](./docs/configuring-playbook-element-call.md#decide-between-element-call-vs-just-the-matrix-rtc-stack).
If you've already installed Element Call (via `matrix_element_call_enabled: true`), you can switch to installing just the [Matrix RTC (Real-Time Communication) stack](./docs/configuring-playbook-matrix-rtc.md) (all supporting services **without the Element Call frontend**) by:
1. Adjusting your `vars.yml` configuration like this:
```diff
-matrix_element_call_enabled: true
+matrix_rtc_enabled: true
```
2. [Re-running the playbook](./docs/installing.md) with the `setup-all` Ansible tag (e.g. `just setup-all`)
3. Getting rid of the `call.element.example.com` DNS record
# 2025-03-15 # 2025-03-15
## Element Call support ## Element Call support

View File

@@ -7,7 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later
# Setting up Element Call (optional) # Setting up Element Call (optional)
The playbook can install and configure [Element Call](https://github.com/element-hq/element-call) for you. The playbook can install and configure [Element Call](https://github.com/element-hq/element-call) and its supporting components that are part of the [Matrix RTC stack](configuring-playbook-matrix-rtc.md).
Element Call is a native Matrix video conferencing application developed by [Element](https://element.io), designed for secure, scalable, privacy-respecting, and decentralized video and voice calls over the Matrix protocol. Built on MatrixRTC ([MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143)), it utilizes [MSC4195](https://github.com/hughns/matrix-spec-proposals/blob/hughns/matrixrtc-livekit/proposals/4195-matrixrtc-livekit.md) with [LiveKit Server](configuring-playbook-livekit-server.md) as its backend. Element Call is a native Matrix video conferencing application developed by [Element](https://element.io), designed for secure, scalable, privacy-respecting, and decentralized video and voice calls over the Matrix protocol. Built on MatrixRTC ([MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143)), it utilizes [MSC4195](https://github.com/hughns/matrix-spec-proposals/blob/hughns/matrixrtc-livekit/proposals/4195-matrixrtc-livekit.md) with [LiveKit Server](configuring-playbook-livekit-server.md) as its backend.
@@ -16,18 +16,34 @@ See the project's [documentation](https://github.com/element-hq/element-call) to
## Prerequisites ## Prerequisites
- A [Synapse](configuring-playbook-synapse.md) homeserver (see the warning below) - A [Synapse](configuring-playbook-synapse.md) homeserver (see the warning below)
- [Federation](configuring-playbook-federation.md) being enabled for your Matrix homeserver (federation is enabled by default, unless you've explicitly disabled it), because [LiveKit JWT Service](configuring-playbook-livekit-jwt-service.md) currently [requires it](https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/3562#issuecomment-2725250554) ([relevant source code](https://github.com/element-hq/lk-jwt-service/blob/f5f5374c4bdcc00a4fb13d27c0b28e20e4c62334/main.go#L135-L146)) - The [Matrix RTC (Real-Time Communication) stack](configuring-playbook-matrix-rtc.md) (automatically done when Element Call is enabled)
- Various experimental features for the Synapse homeserver which Element Call [requires](https://github.com/element-hq/element-call/blob/93ae2aed9841e0b066d515c56bd4c122d2b591b2/docs/self-hosting.md#a-matrix-homeserver) (automatically done when Element Call is enabled)
- A [LiveKit Server](configuring-playbook-livekit-server.md) (automatically installed when Element Call is enabled)
- The [LiveKit JWT Service](configuring-playbook-livekit-jwt-service.md) (automatically installed when Element Call is enabled)
- A client compatible with Element Call. As of 2025-03-15, that's just [Element Web](configuring-playbook-client-element-web.md) and the Element X mobile clients (iOS and Android). - A client compatible with Element Call. As of 2025-03-15, that's just [Element Web](configuring-playbook-client-element-web.md) and the Element X mobile clients (iOS and Android).
- (Optional) Guest accounts being enabled for your Matrix server, if you'd like guests to be able to use Element Call. See [Allowing guests to use Element Call](#allowing-guests-to-use-element-call-optional)
> [!WARNING] > [!WARNING]
> Because Element Call [requires](https://github.com/element-hq/element-call/blob/93ae2aed9841e0b066d515c56bd4c122d2b591b2/docs/self-hosting.md#a-matrix-homeserver) a few experimental features in the Matrix protocol, it's **very likely that it only works with the Synapse homeserver**. > Because Element Call [requires](https://github.com/element-hq/element-call/blob/93ae2aed9841e0b066d515c56bd4c122d2b591b2/docs/self-hosting.md#a-matrix-homeserver) a few experimental features in the Matrix protocol, it's **very likely that it only works with the Synapse homeserver**.
## Decide between Element Call vs just the Matrix RTC stack
All clients that can currently use Element Call (Element Web and Element X on mobile) already embed the Element Call frontend within them.
These **clients will use their own embedded Element Call frontend**, so **self-hosting the Element Call frontend by the playbook is largely unnecessary**.
💡 A reason you may wish to continue installing the Element Call frontend (despite Matrix clients not making use of it), is if you need to use it standalone - directly via a browser (without a Matrix client). Note that unless you [allow guest accounts to use Element Call](#allowing-guests-to-use-element-call-optional), you will still need a Matrix user account **on the same homeserver** to be able to use Element Call.
The playbook makes a distiction between enabling Element Call (`matrix_element_call_enabled`) and enabling the Matrix RTC Stack (`matrix_rtc_enabled`). Enabling Element Call automatically enables the Matrix RTC stack. Because installing the Element Call frontend is now unnecessary, **we recommend only installing the Matrix RTC stack, without the Element Call frontend**.
| Description / Variable | Element Call frontend | [LiveKit Server](configuring-playbook-livekit-server.md) | [LiveKit JWT Service](configuring-playbook-livekit-jwt-service.md) |
|------------------------|-----------------------|----------------|---------------------|
| Description | Static website that provides the Element Call UI (but often embedded by clients) | Scalable, multi-user conferencing solution based on WebRTC | A helper component that allows Element Call to integrate with LiveKit Server |
| Required for Element Call to function | No | Yes | Yes |
| `matrix_element_call_enabled` | ✅ Installed | ✅ Installed | ✅ Installed |
| `matrix_rtc_enabled` | ❌ Not Installed, but usually unnecessary | ✅ Installed | ✅ Installed |
All documentation below assumes that you've decided to install Element Call and not just the Matrix RTC stack.
## Decide on a domain and path ## Decide on a domain and path
By default, Element Call is configured to be served on the `call.element.example.com` domain. By default, the Element Call frontend is configured to be served on the `call.element.example.com` domain.
If you'd like to run Element Call on another hostname, see the [Adjusting the Element Call URL](#adjusting-the-element-call-url-optional) section below. If you'd like to run Element Call on another hostname, see the [Adjusting the Element Call URL](#adjusting-the-element-call-url-optional) section below.
@@ -48,6 +64,8 @@ In addition to the HTTP/HTTPS ports (which you've already exposed as per the [pr
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file: Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
```yaml ```yaml
# Enable the Element Call frontend UI to allow standalone use of Element Call.
# Enabling this also auto-enables the Matrix RTC stack.
matrix_element_call_enabled: true matrix_element_call_enabled: true
``` ```
@@ -64,6 +82,28 @@ matrix_element_call_hostname: element-call.example.com
> [!WARNING] > [!WARNING]
> A `matrix_element_call_path_prefix` variable is also available and mean to let you configure a path prefix for the Element Call service, but [Element Call does not support running under a sub-path yet](https://github.com/element-hq/element-call/issues/3084). > A `matrix_element_call_path_prefix` variable is also available and mean to let you configure a path prefix for the Element Call service, but [Element Call does not support running under a sub-path yet](https://github.com/element-hq/element-call/issues/3084).
### Allowing guests to use Element Call (optional)
By default, Element Call can only be used by people having accounts on your Matrix server.
If you'd like guests to be able to use Element Call as well, you need to enable guest accounts support for your homeserver.
> [!WARNING]
> Enabling guest accounts means that your homeserver's user database may get polluted with guest account signups (potentially made by bots).
> Guest accounts should be limited in what (damage) they can do to your server and the rest of the Matrix ecosystem, but it's better to not enable them unless necessary.
For [Synapse](configuring-playbook-synapse.md) (the default homeserver implementation), the configuration is like this:
```yml
matrix_synapse_allow_guest_access: true
```
For [Dendrite](configuring-playbook-dendrite.md), the configuration is like this:
```yml
matrix_dendrite_guests_disabled: false
```
## Installing ## Installing
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records) and [adjusting firewall rules](#adjusting-firewall-rules), run the playbook with [playbook tags](playbook-tags.md) as below: After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records) and [adjusting firewall rules](#adjusting-firewall-rules), run the playbook with [playbook tags](playbook-tags.md) as below:

View File

@@ -0,0 +1,149 @@
# Setting up Fluffygate (optional)
The playbook can install and configure [Fluffygate](https://github.com/krille-chan/fluffygate), a simple Push Gateway for Fluffychat.
See the project's documentation to learn what it does and why it might be useful to you.
**Note**: most people don't need to install their own gateway. This optional playbook component is only useful to people who develop/build their own Matrix client applications themselves, as you'll need access to your own Firebase/FCM and APNS credentials.
## Adjusting the playbook configuration
To enable Fluffygate, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
```yaml
matrix_fluffygate_enabled: true
# Basic app information
matrix_fluffygate_app_name: "Your App Name"
matrix_fluffygate_app_website: "https://example.com"
# Firebase/FCM configuration (for Android / IOS)
matrix_fluffygate_firebase_project: "your-firebase-project-id"
matrix_fluffygate_firebase_key: |
{
# Your Firebase service account key JSON content
}
# Notification settings
matrix_fluffygate_notification_title: "{count} new messages"
matrix_fluffygate_notification_body: "{body}"
# Android specific notification options
matrix_fluffygate_android_notification_options:
priority: high
notification:
sound: "default"
icon: "notifications_icon"
tag: "default_notification"
# APNS specific notification options (for iOS)
matrix_fluffygate_apns_notification_options:
headers:
apns-priority: "10"
payload:
aps:
sound: "default"
badge: "{count}"
mutable-content: 1
```
For a complete list of available configuration options, see the `defaults/main.yml` file in the role.
### Required Configuration
The following settings are required and must be defined:
- `matrix_fluffygate_hostname`
- `matrix_fluffygate_path_prefix`
- `matrix_fluffygate_container_network`
- `matrix_fluffygate_app_name`
- `matrix_fluffygate_app_website`
### Adjusting the Fluffygate URL
By default, this playbook installs Fluffygate at the root path (`/`) of the configured hostname. You can customize both the hostname and path prefix using these variables:
```yaml
# Configure the hostname where Fluffygate will be served
matrix_fluffygate_hostname: "push.example.com"
# Configure a custom path prefix (must either be '/' or not end with a slash)
matrix_fluffygate_path_prefix: /push
```
### Traefik Integration
Fluffygate includes built-in support for Traefik as a reverse proxy. The following settings control this integration:
```yaml
# Enable/disable Traefik labels
matrix_fluffygate_container_labels_traefik_enabled: true
# Configure the Traefik network
matrix_fluffygate_container_labels_traefik_docker_network: "{{ matrix_fluffygate_container_network }}"
# Additional Traefik configuration
matrix_fluffygate_container_labels_traefik_rule: "Host(`{{ matrix_fluffygate_container_labels_traefik_hostname }}`)"
matrix_fluffygate_container_labels_traefik_priority: 0
matrix_fluffygate_container_labels_traefik_entrypoints: web-secure
```
## Adjusting DNS records
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Fluffygate domain to the Matrix server.
By default, you will need to create a CNAME record for `push`. See [Configuring DNS](configuring-dns.md) for details about DNS changes.
If you've decided to reuse the `matrix.` domain, you won't need to do any extra DNS configuration.
## Installing
After configuring the playbook and adjusting your DNS records, run the installation command:
```bash
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
```
To install only Fluffygate, you can use:
```bash
ansible-playbook -i inventory/hosts setup.yml --tags=setup-fluffygate,start
```
## Usage
To make use of your Fluffygate installation:
1. Configure your Matrix client application to use your Fluffygate URL as the push gateway
2. Ensure your app uses the same Firebase/FCM credentials for Android notifications
3. Ensure your app uses the same APNS certificates/credentials for iOS notifications
4. Configure the notification templates and options as needed through the playbook variables
### Debugging
If you need to troubleshoot issues:
1. Enable debug logs by setting:
```yaml
matrix_fluffygate_debug_logs: true
```
2. Check the container logs:
```bash
docker logs matrix-fluffygate
```
## Uninstalling
To remove Fluffygate, first disable it in your `inventory/host_vars/matrix.example.com/vars.yml`:
```yaml
matrix_fluffygate_enabled: false
```
Then run the playbook:
```bash
ansible-playbook -i inventory/hosts setup.yml --tags=setup-fluffygate,start
```
This will stop the service and remove all associated files.

View File

@@ -8,9 +8,9 @@ SPDX-License-Identifier: AGPL-3.0-or-later
The playbook can install and configure [LiveKit JWT Service](https://github.com/element-hq/lk-jwt-service/) for you. The playbook can install and configure [LiveKit JWT Service](https://github.com/element-hq/lk-jwt-service/) for you.
This is a helper component that allows [Element Call](configuring-playbook-element-call.md) to integrate with [LiveKit Server](configuring-playbook-livekit-server.md). This is a helper component which is part of the [Matrix RTC stack](configuring-playbook-matrix-rtc.md) that allows [Element Call](configuring-playbook-element-call.md) to integrate with [LiveKit Server](configuring-playbook-livekit-server.md).
💡 LiveKit JWT Service is automatically installed and configured when [Element Call](configuring-playbook-element-call.md) is enabled, so you don't need to do anything extra. 💡 LiveKit JWT Service is automatically installed and configured when either [Element Call](configuring-playbook-element-call.md) or the [Matrix RTC stack](configuring-playbook-matrix-rtc.md) is enabled, so you don't need to do anything extra.
Take a look at: Take a look at:

View File

@@ -11,7 +11,7 @@ The playbook can install and configure [LiveKit Server](https://github.com/livek
LiveKit Server is an open source project that provides scalable, multi-user conferencing based on WebRTC. It's designed to provide everything you need to build real-time video audio data capabilities in your applications. LiveKit Server is an open source project that provides scalable, multi-user conferencing based on WebRTC. It's designed to provide everything you need to build real-time video audio data capabilities in your applications.
💡 LiveKit Server is automatically installed and configured when [Element Call](configuring-playbook-element-call.md) is enabled, so you don't need to do anything extra. 💡 LiveKit Server is automatically installed and configured when either [Element Call](configuring-playbook-element-call.md) or the [Matrix RTC stack](configuring-playbook-matrix-rtc.md) is enabled, so you don't need to do anything extra.
The [Ansible role for LiveKit Server](https://github.com/mother-of-all-self-hosting/ansible-role-livekit-server) is developed and maintained by [the MASH (mother-of-all-self-hosting) project](https://github.com/mother-of-all-self-hosting). For details about configuring LiveKit Server, you can check them via: The [Ansible role for LiveKit Server](https://github.com/mother-of-all-self-hosting/ansible-role-livekit-server) is developed and maintained by [the MASH (mother-of-all-self-hosting) project](https://github.com/mother-of-all-self-hosting). For details about configuring LiveKit Server, you can check them via:
- 🌐 [the role's documentation at the MASH project](https://github.com/mother-of-all-self-hosting/ansible-role-livekit-server/blob/main/docs/configuring-livekit-server.md) online - 🌐 [the role's documentation at the MASH project](https://github.com/mother-of-all-self-hosting/ansible-role-livekit-server/blob/main/docs/configuring-livekit-server.md) online

View File

@@ -0,0 +1,59 @@
<!--
SPDX-FileCopyrightText: 2024 wjbeckett
SPDX-FileCopyrightText: 2024 - 2025 Slavi Pantaleev
SPDX-License-Identifier: AGPL-3.0-or-later
-->
# Setting up the Matrix RTC stack (optional)
The playbook can install and configure the Matrix RTC (Real-Time Communication) stack.
The Matrix RTC stack is a set of supporting components ([LiveKit Server](configuring-playbook-livekit-server.md) and [LiveKit JWT Service](configuring-playbook-livekit-jwt-service.md)) that allow the new [Element Call](configuring-playbook-element-call.md) audio/video calls to function.
💡 If you only plan on doing audio/video calls via Matrix client (which typically embed the Element Call frontend UI within them), you only need to install the Matrix RTC stack and don't necessarily need to install [Element Call](configuring-playbook-element-call.md). See the [Decide between Element Call vs just the Matrix RTC stack](configuring-playbook-element-call.md#decide-between-element-call-vs-just-the-matrix-rtc-stack) section of the [Element Call documentation](configuring-playbook-element-call.md) for more details.
## Prerequisites
- A [Synapse](configuring-playbook-synapse.md) homeserver (see the warning below)
- [Federation](configuring-playbook-federation.md) being enabled for your Matrix homeserver (federation is enabled by default, unless you've explicitly disabled it), because [LiveKit JWT Service](configuring-playbook-livekit-jwt-service.md) currently [requires it](https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/3562#issuecomment-2725250554) ([relevant source code](https://github.com/element-hq/lk-jwt-service/blob/f5f5374c4bdcc00a4fb13d27c0b28e20e4c62334/main.go#L135-L146))
- Various experimental features for the Synapse homeserver which Element Call [requires](https://github.com/element-hq/element-call/blob/93ae2aed9841e0b066d515c56bd4c122d2b591b2/docs/self-hosting.md#a-matrix-homeserver) (automatically done when Element Call is enabled)
- A [LiveKit Server](configuring-playbook-livekit-server.md) (automatically installed when [Element Call or the Matrix RTC stack is enabled](#decide-between-element-call-vs-just-the-matrix-rtc-stack))
- The [LiveKit JWT Service](configuring-playbook-livekit-jwt-service.md) (automatically installed when [Element Call or the Matrix RTC stack is enabled](#decide-between-element-call-vs-just-the-matrix-rtc-stack))
- A client compatible with Element Call. As of 2025-03-15, that's just [Element Web](configuring-playbook-client-element-web.md) and the Element X mobile clients (iOS and Android).
> [!WARNING]
> Because Element Call [requires](https://github.com/element-hq/element-call/blob/93ae2aed9841e0b066d515c56bd4c122d2b591b2/docs/self-hosting.md#a-matrix-homeserver) a few experimental features in the Matrix protocol, it's **very likely that it only works with the Synapse homeserver**.
## Adjusting the playbook configuration
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
```yaml
# Enable the Matrix RTC stack.
# This provides all supporting services for Element Call, without the Element Call frontend.
matrix_rtc_enabled: true
```
## Adjusting firewall rules
In addition to the HTTP/HTTPS ports (which you've already exposed as per the [prerequisites](prerequisites.md) document), you'll also need to open ports required by [LiveKit Server](configuring-playbook-livekit-server.md) as described in its own [Adjusting firewall rules](configuring-playbook-livekit-server.md#adjusting-firewall-rules) section.
## Installing
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records) and [adjusting firewall rules](#adjusting-firewall-rules), run the playbook with [playbook tags](playbook-tags.md) as below:
<!-- NOTE: let this conservative command run (instead of install-all) to make it clear that failure of the command means something is clearly broken. -->
```sh
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
```
The shortcut commands with the [`just` program](just.md) are also available: `just install-all` or `just setup-all`
`just install-all` is useful for maintaining your setup quickly ([2x-5x faster](../CHANGELOG.md#2x-5x-performance-improvements-in-playbook-runtime) than `just setup-all`) when its components remain unchanged. If you adjust your `vars.yml` to remove other components, you'd need to run `just setup-all`, or these components will still remain installed. Note these shortcuts run the `ensure-matrix-users-created` tag too.
## Usage
Once installed, Matrix clients which support Element Call (like [Element Web](configuring-playbook-client-element-web.md) and Element X on mobile (iOS and Android)) will automatically use the Matrix RTC stack.
These clients typically embed the Element Call frontend UI within them, so installing [Element Call](configuring-playbook-element-call.md) is only necessary if you'd like to use it standalone - directly via a browser.

View File

@@ -237,11 +237,13 @@ Services that help you in administrating and monitoring your Matrix installation
Various services that don't fit any other categories. Various services that don't fit any other categories.
- [Setting up Element Call](configuring-playbook-element-call.md) — a native Matrix video conferencing application (optional) - [Setting up Element Call](configuring-playbook-element-call.md) — a native Matrix video conferencing application, built on top of the [Matrix RTC stack](configuring-playbook-matrix-rtc.md) (optional)
- [Setting up LiveKit JWT Service](configuring-playbook-livekit-jwt-service.md) (optional) - [Setting up LiveKit JWT Service](configuring-playbook-livekit-jwt-service.md) - a component of the [Matrix RTC stack](configuring-playbook-matrix-rtc.md) (optional)
- [Setting up LiveKit Server](configuring-playbook-livekit-server.md) (optional) - [Setting up LiveKit Server](configuring-playbook-livekit-server.md) - a component of the [Matrix RTC stack](configuring-playbook-matrix-rtc.md) (optional)
- [Setting up Matrix RTC](configuring-playbook-matrix-rtc.md) (optional)
- [Setting up Synapse Auto Invite Accept](configuring-playbook-synapse-auto-accept-invite.md) - [Setting up Synapse Auto Invite Accept](configuring-playbook-synapse-auto-accept-invite.md)

View File

@@ -4609,9 +4609,9 @@ matrix_client_element_enable_presence_by_hs_url: |-
matrix_client_element_jitsi_preferred_domain: "{{ matrix_server_fqn_jitsi if jitsi_enabled else '' }}" matrix_client_element_jitsi_preferred_domain: "{{ matrix_server_fqn_jitsi if jitsi_enabled else '' }}"
matrix_client_element_features_feature_video_rooms: "{{ matrix_element_call_enabled }}" matrix_client_element_features_feature_video_rooms: "{{ matrix_rtc_enabled }}"
matrix_client_element_features_feature_group_calls: "{{ matrix_element_call_enabled }}" matrix_client_element_features_feature_group_calls: "{{ matrix_rtc_enabled }}"
matrix_client_element_features_feature_element_call_video_rooms: "{{ matrix_element_call_enabled }}" matrix_client_element_features_feature_element_call_video_rooms: "{{ matrix_rtc_enabled }}"
matrix_client_element_features_feature_oidc_native_flow: "{{ matrix_authentication_service_enabled }}" matrix_client_element_features_feature_oidc_native_flow: "{{ matrix_authentication_service_enabled }}"
matrix_client_element_element_call_enabled: "{{ matrix_element_call_enabled }}" matrix_client_element_element_call_enabled: "{{ matrix_element_call_enabled }}"
@@ -4934,7 +4934,7 @@ matrix_synapse_ext_media_repo_enabled: "{{ matrix_media_repo_enabled }}"
matrix_synapse_report_stats: "{{ matrix_synapse_usage_exporter_enabled }}" matrix_synapse_report_stats: "{{ matrix_synapse_usage_exporter_enabled }}"
matrix_synapse_report_stats_endpoint: "{{ (('http://' + matrix_synapse_usage_exporter_identifier + ':' + matrix_synapse_usage_exporter_container_port | string + '/report-usage-stats/push') if matrix_synapse_usage_exporter_enabled else '') }}" matrix_synapse_report_stats_endpoint: "{{ (('http://' + matrix_synapse_usage_exporter_identifier + ':' + matrix_synapse_usage_exporter_container_port | string + '/report-usage-stats/push') if matrix_synapse_usage_exporter_enabled else '') }}"
matrix_synapse_experimental_features_msc3266_enabled: "{{ matrix_element_call_enabled }}" matrix_synapse_experimental_features_msc3266_enabled: "{{ matrix_rtc_enabled }}"
matrix_synapse_experimental_features_msc3861_enabled: "{{ matrix_authentication_service_enabled and not matrix_authentication_service_migration_in_progress }}" matrix_synapse_experimental_features_msc3861_enabled: "{{ matrix_authentication_service_enabled and not matrix_authentication_service_migration_in_progress }}"
matrix_synapse_experimental_features_msc3861_issuer: "{{ matrix_authentication_service_http_base_container_url if matrix_authentication_service_enabled else '' }}" matrix_synapse_experimental_features_msc3861_issuer: "{{ matrix_authentication_service_http_base_container_url if matrix_authentication_service_enabled else '' }}"
@@ -4944,9 +4944,9 @@ matrix_synapse_experimental_features_msc3861_account_management_url: "{{ matrix_
matrix_synapse_experimental_features_msc4108_enabled: "{{ matrix_authentication_service_enabled and not matrix_authentication_service_migration_in_progress }}" matrix_synapse_experimental_features_msc4108_enabled: "{{ matrix_authentication_service_enabled and not matrix_authentication_service_migration_in_progress }}"
matrix_synapse_experimental_features_msc4140_enabled: "{{ matrix_element_call_enabled }}" matrix_synapse_experimental_features_msc4140_enabled: "{{ matrix_rtc_enabled }}"
matrix_synapse_experimental_features_msc4222_enabled: "{{ matrix_element_call_enabled }}" matrix_synapse_experimental_features_msc4222_enabled: "{{ matrix_rtc_enabled }}"
# Disable password authentication when delegating authentication to Matrix Authentication Service. # Disable password authentication when delegating authentication to Matrix Authentication Service.
# Unless this is done, Synapse fails on startup with: # Unless this is done, Synapse fails on startup with:
@@ -6140,7 +6140,7 @@ matrix_static_files_file_matrix_client_property_m_tile_server_map_style_url: "{{
# See: https://github.com/etkecc/synapse-admin/pull/126 # See: https://github.com/etkecc/synapse-admin/pull/126
matrix_static_files_file_matrix_client_property_cc_etke_synapse_admin_auto: "{{ matrix_synapse_admin_configuration if matrix_homeserver_implementation == 'synapse' else {} }}" matrix_static_files_file_matrix_client_property_cc_etke_synapse_admin_auto: "{{ matrix_synapse_admin_configuration if matrix_homeserver_implementation == 'synapse' else {} }}"
matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_enabled: "{{ matrix_element_call_enabled }}" matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_enabled: "{{ matrix_livekit_jwt_service_enabled }}"
matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_auto: |- matrix_static_files_file_matrix_client_property_org_matrix_msc4143_rtc_foci_auto: |-
{{ {{
( (
@@ -6297,7 +6297,7 @@ matrix_element_call_config_livekit_livekit_service_url: "{{ matrix_livekit_jwt_s
# # # #
######################################################################## ########################################################################
livekit_server_enabled: "{{ matrix_element_call_enabled }}" livekit_server_enabled: "{{ matrix_rtc_enabled }}"
livekit_server_identifier: matrix-livekit-server livekit_server_identifier: matrix-livekit-server
@@ -6405,7 +6405,7 @@ livekit_server_systemd_required_services_list_auto: |
# # # #
######################################################################## ########################################################################
matrix_livekit_jwt_service_enabled: "{{ matrix_element_call_enabled and livekit_server_enabled }}" matrix_livekit_jwt_service_enabled: "{{ matrix_rtc_enabled and livekit_server_enabled }}"
matrix_livekit_jwt_service_scheme: "{{ 'https' if matrix_playbook_ssl_enabled else 'http' }}" matrix_livekit_jwt_service_scheme: "{{ 'https' if matrix_playbook_ssl_enabled else 'http' }}"

View File

@@ -30,4 +30,4 @@ sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0 sphinxcontrib-serializinghtml==2.0.0
tabulate==0.9.0 tabulate==0.9.0
uc-micro-py==1.0.3 uc-micro-py==1.0.3
urllib3==2.3.0 urllib3==2.4.0

View File

@@ -25,7 +25,7 @@
version: v11.6.0-0 version: v11.6.0-0
name: grafana name: grafana
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-jitsi.git - src: git+https://github.com/mother-of-all-self-hosting/ansible-role-jitsi.git
version: v10169-0 version: v10184-0
name: jitsi name: jitsi
- src: git+https://github.com/mother-of-all-self-hosting/ansible-role-livekit-server.git - src: git+https://github.com/mother-of-all-self-hosting/ansible-role-livekit-server.git
version: v1.8.4-5 version: v1.8.4-5

View File

@@ -17,7 +17,7 @@ matrix_bot_baibot_container_repo_version: "{{ 'main' if matrix_bot_baibot_versio
matrix_bot_baibot_container_src_files_path: "{{ matrix_base_data_path }}/baibot/container-src" matrix_bot_baibot_container_src_files_path: "{{ matrix_base_data_path }}/baibot/container-src"
# renovate: datasource=docker depName=ghcr.io/etkecc/baibot # renovate: datasource=docker depName=ghcr.io/etkecc/baibot
matrix_bot_baibot_version: v1.5.1 matrix_bot_baibot_version: v1.6.0
matrix_bot_baibot_container_image: "{{ matrix_bot_baibot_container_image_registry_prefix }}etkecc/baibot:{{ matrix_bot_baibot_version }}" matrix_bot_baibot_container_image: "{{ matrix_bot_baibot_container_image_registry_prefix }}etkecc/baibot:{{ matrix_bot_baibot_version }}"
matrix_bot_baibot_container_image_registry_prefix: "{{ 'localhost/' if matrix_bot_baibot_container_image_self_build else matrix_bot_baibot_container_image_registry_prefix_upstream }}" matrix_bot_baibot_container_image_registry_prefix: "{{ 'localhost/' if matrix_bot_baibot_container_image_self_build else matrix_bot_baibot_container_image_registry_prefix_upstream }}"
matrix_bot_baibot_container_image_registry_prefix_upstream: "{{ matrix_bot_baibot_container_image_registry_prefix_upstream_default }}" matrix_bot_baibot_container_image_registry_prefix_upstream: "{{ matrix_bot_baibot_container_image_registry_prefix_upstream_default }}"

View File

@@ -19,7 +19,7 @@ matrix_heisenbridge_hostname: "{{ matrix_server_fqn_matrix }}"
matrix_heisenbridge_path_prefix: "/heisenbridge" matrix_heisenbridge_path_prefix: "/heisenbridge"
# renovate: datasource=docker depName=hif1/heisenbridge # renovate: datasource=docker depName=hif1/heisenbridge
matrix_heisenbridge_version: 1.15.2 matrix_heisenbridge_version: 1.15.3
matrix_heisenbridge_docker_image: "{{ matrix_heisenbridge_docker_image_registry_prefix }}hif1/heisenbridge:{{ matrix_heisenbridge_version }}" matrix_heisenbridge_docker_image: "{{ matrix_heisenbridge_docker_image_registry_prefix }}hif1/heisenbridge:{{ matrix_heisenbridge_version }}"
matrix_heisenbridge_docker_image_registry_prefix: "{{ matrix_heisenbridge_docker_image_registry_prefix_upstream }}" matrix_heisenbridge_docker_image_registry_prefix: "{{ matrix_heisenbridge_docker_image_registry_prefix_upstream }}"
matrix_heisenbridge_docker_image_registry_prefix_upstream: "{{ matrix_heisenbridge_docker_image_registry_prefix_upstream_default }}" matrix_heisenbridge_docker_image_registry_prefix_upstream: "{{ matrix_heisenbridge_docker_image_registry_prefix_upstream_default }}"

View File

@@ -240,6 +240,9 @@ matrix_dendrite_client_api_rate_limiting_cooloff_ms: 500
# Controls whether people with access to the homeserver can register by themselves. # Controls whether people with access to the homeserver can register by themselves.
matrix_dendrite_client_api_registration_disabled: true matrix_dendrite_client_api_registration_disabled: true
# Controls whether guest accounts are disabled
matrix_dendrite_guests_disabled: true
# reCAPTCHA API for validating registration attempts # reCAPTCHA API for validating registration attempts
matrix_dendrite_client_api_enable_registration_captcha: false matrix_dendrite_client_api_enable_registration_captcha: false
matrix_dendrite_client_api_recaptcha_public_key: "" matrix_dendrite_client_api_recaptcha_public_key: ""

View File

@@ -189,7 +189,7 @@ client_api:
# Prevents new guest accounts from being created. Guest registration is also # Prevents new guest accounts from being created. Guest registration is also
# disabled implicitly by setting 'registration_disabled' above. # disabled implicitly by setting 'registration_disabled' above.
guests_disabled: true guests_disabled: {{ matrix_dendrite_guests_disabled | to_json }}
# If set, allows registration by anyone who knows the shared secret, regardless of # If set, allows registration by anyone who knows the shared secret, regardless of
# whether registration is otherwise disabled. # whether registration is otherwise disabled.

View File

@@ -11,6 +11,15 @@
matrix_element_call_enabled: false matrix_element_call_enabled: false
# Controls whether the Element Call stack (various services around Element Call, without the Element Call frontend itself) are to be installed.
# This affects enablement of other services around Element Call.
#
# By default, we enable the rest of the stack when Element Call itself is enabled,
# but people may wish to enable the stack by itself and avoid installing the Element Call frontend.
# This is useful to do, because self-hosting the Element Call frontend is mostly useless, because
# various clients tend to embed and preferusing their own embedded Element Call frontend, instead of a self-hosted one.
matrix_rtc_enabled: "{{ matrix_element_call_enabled }}"
# renovate: datasource=docker depName=ghcr.io/element-hq/element-call # renovate: datasource=docker depName=ghcr.io/element-hq/element-call
matrix_element_call_version: v0.9.0 matrix_element_call_version: v0.9.0

View File

@@ -0,0 +1,137 @@
---
# Fluffygate is a reference Push Gateway for Matrix.
# To make use of it for delivering push notificatins, you'll need to develop/build your own Matrix app.
# Project source code URL: https://github.com/matrix-org/fluffygate
matrix_fluffygate_enabled: true
matrix_fluffygate_identifier: 'matrix-fluffygate'
# App information
matrix_fluffygate_app_name: "Fluffygate"
matrix_fluffygate_app_website: "https://example.com"
matrix_fluffygate_debug_logs: false
# Notification settings
matrix_fluffygate_notification_title: "{count} new messages"
matrix_fluffygate_notification_body: "{body}"
# Android notification options
matrix_fluffygate_android_notification_options:
priority: high
notification:
sound: "default"
icon: "notifications_icon"
tag: "default_notification"
# APNS notification options
matrix_fluffygate_apns_notification_options:
headers:
apns-priority: "10"
payload:
aps:
sound: "default"
badge: "{count}"
mutable-content: 1
matrix_fluffygate_firebase_key: '' # JSON key file contents
matrix_fluffygate_firebase_project: '' # Firebase project ID
# The hostname at which Fluffygate is served.
matrix_fluffygate_hostname: ''
# The path at which Fluffygate is exposed.
# This value must either be `/` or not end with a slash (e.g. `/fluffygate`).
matrix_fluffygate_path_prefix: /
# renovate: datasource=docker depName=matrixdotorg/fluffygate
matrix_fluffygate_version: 1.0.3
matrix_fluffygate_base_path: "{{ matrix_base_data_path }}/fluffygate"
matrix_fluffygate_config_path: "{{ matrix_fluffygate_base_path }}/config"
matrix_fluffygate_data_path: "{{ matrix_fluffygate_base_path }}/data"
# List of systemd services that matrix-fluffygate.service depends on.
matrix_fluffygate_systemd_required_services_list: "{{ [devture_systemd_docker_base_docker_service_name] if devture_systemd_docker_base_docker_service_name else [] }}"
# List of systemd services that matrix-fluffygate.service wants
matrix_fluffygate_systemd_wanted_services_list: []
matrix_fluffygate_docker_image: "{{ matrix_fluffygate_docker_image_registry_prefix }}djangoflow/fluffygate:{{ matrix_fluffygate_docker_image_tag }}"
matrix_fluffygate_docker_image_tag: "{{ matrix_fluffygate_version }}"
matrix_fluffygate_docker_image_registry_prefix: "{{ matrix_container_global_registry_prefix }}"
matrix_fluffygate_docker_image_force_pull: "{{ matrix_fluffygate_docker_image.endswith(':latest') }}"
# The base container network. It will be auto-created by this role if it doesn't exist already.
matrix_fluffygate_container_network: "{{ traefik_container_network }}"
# A list of additional container networks that the container would be connected to.
# The role does not create these networks, so make sure they already exist.
# Use this to expose this container to another reverse proxy, which runs in a different container network.
matrix_fluffygate_container_additional_networks: []
# Controls whether the matrix-fluffygate container exposes its HTTP port (tcp/6000 in the container).
#
# Takes an "<ip>:<port>" or "<port>" value (e.g. "127.0.0.1:6000"), or empty string to not expose.
matrix_fluffygate_container_http_host_bind_port: ''
# matrix_fluffygate_container_labels_traefik_enabled controls whether labels to assist a Traefik reverse-proxy will be attached to the container.
# See `../templates/labels.j2` for details.
#
# To inject your own other container labels, see `matrix_fluffygate_container_labels_additional_labels`.
matrix_fluffygate_container_labels_traefik_enabled: true
matrix_fluffygate_container_labels_traefik_docker_network: "{{ matrix_fluffygate_container_network }}"
matrix_fluffygate_container_labels_traefik_hostname: "{{ matrix_fluffygate_hostname }}"
# The path prefix must either be `/` or not end with a slash (e.g. `/fluffygate`).
matrix_fluffygate_container_labels_traefik_path_prefix: "{{ matrix_fluffygate_path_prefix }}"
matrix_fluffygate_container_labels_traefik_rule: "Host(`{{ matrix_fluffygate_container_labels_traefik_hostname }}`){% if matrix_fluffygate_container_labels_traefik_path_prefix != '/' %} && PathPrefix(`{{ matrix_fluffygate_container_labels_traefik_path_prefix }}`){% endif %}"
matrix_fluffygate_container_labels_traefik_priority: 0
matrix_fluffygate_container_labels_traefik_entrypoints: web-secure
matrix_fluffygate_container_labels_traefik_tls: "{{ matrix_fluffygate_container_labels_traefik_entrypoints != 'web' }}"
matrix_fluffygate_container_labels_traefik_tls_certResolver: default # noqa var-naming
# Controls which additional headers to attach to all HTTP responses.
# To add your own headers, use `matrix_fluffygate_container_labels_traefik_additional_response_headers_custom`
matrix_fluffygate_container_labels_traefik_additional_response_headers: "{{ matrix_fluffygate_container_labels_traefik_additional_response_headers_auto | combine(matrix_fluffygate_container_labels_traefik_additional_response_headers_custom) }}"
matrix_fluffygate_container_labels_traefik_additional_response_headers_auto: {}
matrix_fluffygate_container_labels_traefik_additional_response_headers_custom: {}
# matrix_fluffygate_container_labels_additional_labels contains a multiline string with additional labels to add to the container label file.
# See `../templates/labels.j2` for details.
#
# Example:
# matrix_fluffygate_container_labels_additional_labels: |
# my.label=1
# another.label="here"
matrix_fluffygate_container_labels_additional_labels: ''
# A list of extra arguments to pass to the container
matrix_fluffygate_container_extra_arguments: []
matrix_fluffygate_metrics_prometheus_enabled: false
# Default Fluffygate configuration template which covers the generic use case.
# You can customize it by controlling the various variables inside it.
#
# For a more advanced customization, you can extend the default (see `matrix_fluffygate_configuration_extension_yaml`)
# or completely replace this variable with your own template.
matrix_fluffygate_configuration_yaml: "{{ lookup('template', 'templates/config.yaml.j2') }}"
matrix_fluffygate_configuration_extension_yaml: |
# Your custom YAML configuration for Fluffygate goes here.
# This configuration extends the default starting configuration (`matrix_fluffygate_configuration_yaml`).
#
# You can override individual variables from the default configuration, or introduce new ones.
#
# If you need something more special, you can take full control by
# completely redefining `matrix_fluffygate_configuration_yaml`.
#
# Example configuration extension follows:
# metrics:
# opentracing:
# enabled: true
matrix_fluffygate_configuration_extension: "{{ matrix_fluffygate_configuration_extension_yaml | from_yaml if matrix_fluffygate_configuration_extension_yaml | from_yaml is mapping else {} }}"
# Holds the final fluffygate configuration (a combination of the default and its extension).
# You most likely don't need to touch this variable. Instead, see `matrix_fluffygate_configuration_yaml`.
matrix_fluffygate_configuration: "{{ matrix_fluffygate_configuration_yaml | from_yaml | combine(matrix_fluffygate_configuration_extension, recursive=True) }}"

View File

@@ -0,0 +1,62 @@
---
- name: Ensure Fluffygate paths exists
ansible.builtin.file:
path: "{{ item }}"
state: directory
mode: 0750
owner: "{{ matrix_user_username }}"
group: "{{ matrix_user_groupname }}"
with_items:
- "{{ matrix_fluffygate_base_path }}"
- "{{ matrix_fluffygate_config_path }}"
- "{{ matrix_fluffygate_data_path }}"
- name: Ensure Fluffygate config installed
ansible.builtin.copy:
content: "{{ matrix_fluffygate_configuration | to_nice_yaml(indent=2, width=999999) }}"
dest: "{{ matrix_fluffygate_config_path }}/config.yaml"
mode: 0640
owner: "{{ matrix_user_username }}"
group: "{{ matrix_user_groupname }}"
- name: Ensure Firebase key file is created when enabled
ansible.builtin.copy:
content: "{{ matrix_fluffygate_firebase_key }}"
dest: "{{ matrix_fluffygate_data_path }}/firebase-key.json"
mode: 0600
owner: "{{ matrix_user_username }}"
group: "{{ matrix_user_groupname }}"
when: matrix_fluffygate_firebase_key != ''
- name: Ensure Fluffygate labels installed
ansible.builtin.template:
src: "{{ role_path }}/templates/labels.j2"
dest: "{{ matrix_fluffygate_base_path }}/labels"
mode: 0640
owner: "{{ matrix_user_username }}"
group: "{{ matrix_user_groupname }}"
- name: Ensure Fluffygate image is pulled
community.docker.docker_image:
name: "{{ matrix_fluffygate_docker_image }}"
source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}"
force_source: "{{ matrix_fluffygate_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_fluffygate_docker_image_force_pull }}"
register: result
retries: "{{ devture_playbook_help_container_retries_count }}"
delay: "{{ devture_playbook_help_container_retries_delay }}"
until: result is not failed
- name: Ensure Fluffygate container network is created
community.general.docker_network:
enable_ipv6: "{{ devture_systemd_docker_base_ipv6_enabled }}"
name: "{{ matrix_fluffygate_container_network }}"
driver: bridge
driver_options: "{{ devture_systemd_docker_base_container_networks_driver_options }}"
- name: Ensure matrix-fluffygate.service installed
ansible.builtin.template:
src: "{{ role_path }}/templates/systemd/matrix-fluffygate.service.j2"
dest: "{{ devture_systemd_docker_base_systemd_path }}/matrix-fluffygate.service"
mode: 0644

View File

@@ -0,0 +1,20 @@
---
- tags:
- setup-all
- setup-fluffygate
- install-all
- install-fluffygate
block:
- when: matrix_fluffygate_enabled | bool
ansible.builtin.include_tasks: "{{ role_path }}/tasks/validate_config.yml"
- when: matrix_fluffygate_enabled | bool
ansible.builtin.include_tasks: "{{ role_path }}/tasks/install.yml"
- tags:
- setup-all
- setup-fluffygate
block:
- when: not matrix_fluffygate_enabled | bool
ansible.builtin.include_tasks: "{{ role_path }}/tasks/uninstall.yml"

View File

@@ -0,0 +1,25 @@
---
- name: Check existence of matrix-fluffygate service
ansible.builtin.stat:
path: "{{ devture_systemd_docker_base_systemd_path }}/matrix-fluffygate.service"
register: matrix_fluffygate_service_stat
- when: matrix_fluffygate_service_stat.stat.exists | bool
block:
- name: Ensure matrix-fluffygate is stopped
ansible.builtin.service:
name: matrix-fluffygate
state: stopped
enabled: false
daemon_reload: true
- name: Ensure matrix-fluffygate.service doesn't exist
ansible.builtin.file:
path: "{{ devture_systemd_docker_base_systemd_path }}/matrix-fluffygate.service"
state: absent
- name: Ensure Fluffygate base directory doesn't exist
ansible.builtin.file:
path: "{{ matrix_fluffygate_base_path }}"
state: absent

View File

@@ -0,0 +1,40 @@
---
- name: Fail if required Fluffygate settings not defined
ansible.builtin.fail:
msg: >
You need to define a required configuration setting (`{{ item }}`).
when: "vars[item] == ''"
with_items:
- matrix_fluffygate_hostname
- matrix_fluffygate_path_prefix
- matrix_fluffygate_container_network
- when: matrix_fluffygate_container_labels_traefik_enabled | bool
block:
- name: Fail if required Fluffygate Traefik settings not defined
ansible.builtin.fail:
msg: >-
You need to define a required configuration setting (`{{ item }}`).
when: "vars[item] == ''"
with_items:
- matrix_fluffygate_container_labels_traefik_hostname
- matrix_fluffygate_container_labels_traefik_path_prefix
# We ensure it doesn't end with a slash, because we handle both (slash and no-slash).
# Knowing that `matrix_fluffygate_container_labels_traefik_path_prefix` does not end with a slash
# ensures we know how to set these routes up without having to do "does it end with a slash" checks elsewhere.
- name: Fail if matrix_fluffygate_container_labels_traefik_path_prefix ends with a slash
ansible.builtin.fail:
msg: >-
matrix_fluffygate_container_labels_traefik_path_prefix (`{{ matrix_fluffygate_container_labels_traefik_path_prefix }}`) must either be `/` or not end with a slash (e.g. `/fluffygate`).
when: "matrix_fluffygate_container_labels_traefik_path_prefix != '/' and matrix_fluffygate_container_labels_traefik_path_prefix[-1] == '/'"
- name: Fail if required Fluffygate settings not defined
ansible.builtin.fail:
msg: >
You need to define a required configuration setting (`{{ item }}`).
when: "vars[item] == ''"
with_items:
- matrix_fluffygate_app_name
- matrix_fluffygate_app_website

View File

@@ -0,0 +1,26 @@
port: 8080
bindAddress: "0.0.0.0"
# Information about the corresponding app
appName: "{{ matrix_fluffygate_app_name }}"
appWebsite: "{{ matrix_fluffygate_app_website }}"
# (Optional) Display logs for debugging
debugLogs: {{ matrix_fluffygate_debug_logs | to_json }}
# The default notification title and body. {count} will be replaced by the unread
# count of the push notification. Won't be set by default for clearing notifications.
notificationTitle: "{{ matrix_fluffygate_notification_title }}"
notificationBody: "{{ matrix_fluffygate_notification_body }}"
# Add json keys to send to fcm for android and apns configurations
androidNotificationOptions: {{ matrix_fluffygate_android_notification_options | to_json }}
apnsNotificationOptions: {{ matrix_fluffygate_apns_notification_options | to_json }}
# You firebase project ID and the path to the key file for your service account.
{% if matrix_fluffygate_firebase_project %}
projectId: "{{ matrix_fluffygate_firebase_project }}"
{% endif %}
{% if matrix_fluffygate_firebase_key %}
fcmKeyFilePath: "/data/firebase-key.json"
{% endif %}

View File

@@ -0,0 +1,46 @@
{% if matrix_fluffygate_container_labels_traefik_enabled %}
traefik.enable=true
{% if matrix_fluffygate_container_labels_traefik_docker_network %}
traefik.docker.network={{ matrix_fluffygate_container_labels_traefik_docker_network }}
{% endif %}
traefik.http.services.matrix-fluffygate.loadbalancer.server.port=8080
{% set middlewares = [] %}
{% if matrix_fluffygate_container_labels_traefik_path_prefix != '/' %}
traefik.http.middlewares.matrix-fluffygate-slashless-redirect.redirectregex.regex=({{ matrix_fluffygate_container_labels_traefik_path_prefix | quote }})$
traefik.http.middlewares.matrix-fluffygate-slashless-redirect.redirectregex.replacement=${1}/
{% set middlewares = middlewares + ['matrix-fluffygate-slashless-redirect'] %}
{% endif %}
{% if matrix_fluffygate_container_labels_traefik_path_prefix != '/' %}
traefik.http.middlewares.matrix-fluffygate-strip-prefix.stripprefix.prefixes={{ matrix_fluffygate_container_labels_traefik_path_prefix }}
{% set middlewares = middlewares + ['matrix-fluffygate-strip-prefix'] %}
{% endif %}
{% if matrix_fluffygate_container_labels_traefik_additional_response_headers.keys() | length > 0 %}
{% for name, value in matrix_fluffygate_container_labels_traefik_additional_response_headers.items() %}
traefik.http.middlewares.matrix-fluffygate-add-headers.headers.customresponseheaders.{{ name }}={{ value }}
{% endfor %}
{% set middlewares = middlewares + ['matrix-fluffygate-add-headers'] %}
{% endif %}
traefik.http.routers.matrix-fluffygate.rule={{ matrix_fluffygate_container_labels_traefik_rule }}
{% if matrix_fluffygate_container_labels_traefik_priority | int > 0 %}
traefik.http.routers.matrix-fluffygate.priority={{ matrix_fluffygate_container_labels_traefik_priority }}
{% endif %}
traefik.http.routers.matrix-fluffygate.service=matrix-fluffygate
{% if middlewares | length > 0 %}
traefik.http.routers.matrix-fluffygate.middlewares={{ middlewares | join(',') }}
{% endif %}
traefik.http.routers.matrix-fluffygate.entrypoints={{ matrix_fluffygate_container_labels_traefik_entrypoints }}
traefik.http.routers.matrix-fluffygate.tls={{ matrix_fluffygate_container_labels_traefik_tls | to_json }}
{% if matrix_fluffygate_container_labels_traefik_tls %}
traefik.http.routers.matrix-fluffygate.tls.certResolver={{ matrix_fluffygate_container_labels_traefik_tls_certResolver }}
{% endif %}
{% endif %}
{{ matrix_fluffygate_container_labels_additional_labels }}

View File

@@ -0,0 +1,51 @@
#jinja2: lstrip_blocks: "True"
[Unit]
Description=Matrix Fluffygate
{% for service in matrix_fluffygate_systemd_required_services_list %}
Requires={{ service }}
After={{ service }}
{% endfor %}
{% for service in matrix_fluffygate_systemd_wanted_services_list %}
Wants={{ service }}
{% endfor %}
DefaultDependencies=no
[Service]
Type=simple
Environment="HOME={{ devture_systemd_docker_base_systemd_unit_home_path }}"
ExecStartPre=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} stop --time={{ devture_systemd_docker_base_container_stop_grace_time_seconds }} matrix-fluffygate 2>/dev/null || true'
ExecStartPre=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} rm matrix-fluffygate 2>/dev/null || true'
ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} create \
--rm \
--name=matrix-fluffygate \
--log-driver=none \
--user={{ matrix_user_uid }}:{{ matrix_user_gid }} \
--cap-drop=ALL \
--network={{ matrix_fluffygate_container_network }} \
{% if matrix_fluffygate_container_http_host_bind_port %}
-p {{ matrix_fluffygate_container_http_host_bind_port }}:6000 \
{% endif %}
--label-file={{ matrix_fluffygate_base_path }}/labels \
--mount type=bind,src={{ matrix_fluffygate_config_path }},dst=/etc/fluffygate \
--mount type=bind,src={{ matrix_fluffygate_data_path }},dst=/data \
{% for arg in matrix_fluffygate_container_extra_arguments %}
{{ arg }} \
{% endfor %}
{{ matrix_fluffygate_docker_image }}
{% for network in matrix_fluffygate_container_additional_networks %}
ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} network connect {{ network }} matrix-fluffygate
{% endfor %}
ExecStart={{ devture_systemd_docker_base_host_command_docker }} start --attach matrix-fluffygate
ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} stop --time={{ devture_systemd_docker_base_container_stop_grace_time_seconds }} matrix-fluffygate 2>/dev/null || true'
ExecStop=-{{ devture_systemd_docker_base_host_command_sh }} -c '{{ devture_systemd_docker_base_host_command_docker }} rm matrix-fluffygate 2>/dev/null || true'
Restart=always
RestartSec=30
SyslogIdentifier=matrix-fluffygate
[Install]
WantedBy=multi-user.target

View File

@@ -127,6 +127,7 @@
- galaxy/etherpad - galaxy/etherpad
- custom/matrix-sliding-sync - custom/matrix-sliding-sync
- custom/matrix-sygnal - custom/matrix-sygnal
- custom/matrix-fluffygate
- galaxy/ntfy - galaxy/ntfy
- custom/matrix-static-files - custom/matrix-static-files
- custom/matrix-coturn - custom/matrix-coturn