mirror of
https://github.com/spantaleev/matrix-docker-ansible-deploy.git
synced 2025-06-25 18:57:50 +02:00
Compare commits
23 Commits
aa612348bb
...
HarHarLink
Author | SHA1 | Date | |
---|---|---|---|
49932b8f3c | |||
6bdf7a9dcb | |||
8c531b7971 | |||
7d26dabc2f | |||
74f91138c9 | |||
ca7b41f3f2 | |||
ac4a918d58 | |||
6a81fa208f | |||
75a8e0f2a6 | |||
98ad182eac | |||
29fa9fab15 | |||
4f835e0560 | |||
8c93327e25 | |||
03a7bb6e77 | |||
06047763bb | |||
e55d769465 | |||
66706e4535 | |||
f6aaeb9a16 | |||
e5d34002fd | |||
69f947782d | |||
4c13be1c89 | |||
9905309aa9 | |||
94abf2d5bd |
1
.github/renovate.json
vendored
1
.github/renovate.json
vendored
@ -15,6 +15,7 @@
|
|||||||
{
|
{
|
||||||
"matchSourceUrlPrefixes": [
|
"matchSourceUrlPrefixes": [
|
||||||
"https://github.com/devture/com.devture.ansible.role",
|
"https://github.com/devture/com.devture.ansible.role",
|
||||||
|
"https://gitlab.com/etke.cc/roles",
|
||||||
"https://github.com/mother-of-all-self-hosting"
|
"https://github.com/mother-of-all-self-hosting"
|
||||||
],
|
],
|
||||||
"ignoreUnstable": false
|
"ignoreUnstable": false
|
||||||
|
2
.github/workflows/matrix.yml
vendored
2
.github/workflows/matrix.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
- name: Check out
|
- name: Check out
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
- name: Run yamllint
|
- name: Run yamllint
|
||||||
uses: frenck/action-yamllint@v1.5.0
|
uses: frenck/action-yamllint@v1.4.2
|
||||||
ansible-lint:
|
ansible-lint:
|
||||||
name: ansible-lint
|
name: ansible-lint
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,9 +1,12 @@
|
|||||||
/inventory
|
/inventory/*
|
||||||
|
!/inventory/.gitkeep
|
||||||
|
!/inventory/host_vars/.gitkeep
|
||||||
|
!/inventory/scripts
|
||||||
/roles/**/files/scratchpad
|
/roles/**/files/scratchpad
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.python-version
|
.python-version
|
||||||
.idea/
|
.idea/
|
||||||
.direnv/
|
flake.lock
|
||||||
|
|
||||||
# ignore roles pulled by ansible-galaxy
|
# ignore roles pulled by ansible-galaxy
|
||||||
/roles/galaxy/*
|
/roles/galaxy/*
|
||||||
|
907
CHANGELOG.md
907
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
61
README.md
61
README.md
@ -6,18 +6,20 @@
|
|||||||
|
|
||||||
This [Ansible](https://www.ansible.com/) playbook is meant to help you run your own [Matrix](http://matrix.org/) homeserver, along with the [various services](#supported-services) related to that.
|
This [Ansible](https://www.ansible.com/) playbook is meant to help you run your own [Matrix](http://matrix.org/) homeserver, along with the [various services](#supported-services) related to that.
|
||||||
|
|
||||||
That is, it lets you join the Matrix network using your own `@<username>:example.com` identifier, all hosted on your own server (see [prerequisites](docs/prerequisites.md)).
|
That is, it lets you join the Matrix network using your own `@<username>:<your-domain>` identifier, all hosted on your own server (see [prerequisites](docs/prerequisites.md)).
|
||||||
|
|
||||||
We run all services in [Docker](https://www.docker.com/) containers (see [the container images we use](docs/container-images.md)), which lets us have a predictable and up-to-date setup, across multiple supported distros (see [prerequisites](docs/prerequisites.md)) and [architectures](docs/alternative-architectures.md) (x86/amd64 being recommended).
|
We run all services in [Docker](https://www.docker.com/) containers (see [the container images we use](docs/container-images.md)), which lets us have a predictable and up-to-date setup, across multiple supported distros (see [prerequisites](docs/prerequisites.md)) and [architectures](docs/alternative-architectures.md) (x86/amd64 being recommended).
|
||||||
|
|
||||||
[Installation](docs/README.md) (upgrades) and some maintenance tasks are automated using [Ansible](https://www.ansible.com/) (see [our Ansible guide](docs/ansible.md)).
|
[Installation](docs/README.md) (upgrades) and some maintenance tasks are automated using [Ansible](https://www.ansible.com/) (see [our Ansible guide](docs/ansible.md)).
|
||||||
|
|
||||||
|
|
||||||
## Self-hosting or Managed / SaaS
|
## Self-hosting or SaaS
|
||||||
|
|
||||||
This Ansible playbook tries to make self-hosting and maintaining a Matrix server fairly easy. Still, running any service smoothly requires knowledge, time and effort.
|
This Ansible playbook tries to make self-hosting and maintaining a Matrix server fairly easy. Still, running any service smoothly requires knowledge, time and effort.
|
||||||
|
|
||||||
If you like the [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) spirit of this Ansible playbook, but prefer to put the responsibility on someone else, you can also [get a managed Matrix server from etke.cc](https://etke.cc?utm_source=github&utm_medium=readme&utm_campaign=mdad) (both hosting and on-premises) - a service built on top of this Ansible playbook but with [additional components](https://etke.cc/help/extras/?utm_source=github&utm_medium=readme&utm_campaign=mdad) and [services](https://etke.cc/services/?utm_source=github&utm_medium=readme&utm_campaign=mdad) which all help you run a Matrix server with ease. Be advised that etke.cc operates on a subscription-based approach and there is no "just set up my server once and be done with it" option.
|
If you like the [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) spirit of this Ansible playbook, but prefer to put the responsibility on someone else, you can also [get a managed Matrix server from etke.cc](https://etke.cc?utm_source=github&utm_medium=readme&utm_campaign=mdad) - a service built on top of this Ansible playbook, which can help you run a Matrix server with ease.
|
||||||
|
|
||||||
|
If you like learning and experimentation, but would rather reduce future maintenance effort, you can even go for a hybrid approach - self-hosting manually using this Ansible playbook at first and then transferring server maintenance to etke.cc at a later time.
|
||||||
|
|
||||||
|
|
||||||
## Supported services
|
## Supported services
|
||||||
@ -31,22 +33,22 @@ You can always re-run the playbook later to add or remove components.
|
|||||||
|
|
||||||
### Homeserver
|
### Homeserver
|
||||||
|
|
||||||
The homeserver is the backbone of your Matrix system. Choose one from the following list.
|
The homeserver is the backbone of your matrix system. Choose one from the following list.
|
||||||
|
|
||||||
| Name | Default? | Description | Documentation |
|
| Name | Default? | Description | Documentation |
|
||||||
| ---- | -------- | ----------- | ------------- |
|
| ---- | -------- | ----------- | ------------- |
|
||||||
| [Synapse](https://github.com/element-hq/synapse) | ✓ | Storing your data and managing your presence in the [Matrix](http://matrix.org/) network | [Link](docs/configuring-playbook-synapse.md) |
|
| [Synapse](https://github.com/matrix-org/synapse) | ✓ | Storing your data and managing your presence in the [Matrix](http://matrix.org/) network | [Link](docs/configuring-playbook-synapse.md) |
|
||||||
| [Conduit](https://conduit.rs) | x | Storing your data and managing your presence in the [Matrix](http://matrix.org/) network. Conduit is a lightweight open-source server implementation of the Matrix Specification with a focus on easy setup and low system requirements | [Link](docs/configuring-playbook-conduit.md) |
|
| [Conduit](https://conduit.rs) | x | Storing your data and managing your presence in the [Matrix](http://matrix.org/) network. Conduit is a lightweight open-source server implementation of the Matrix Specification with a focus on easy setup and low system requirements | [Link](docs/configuring-playbook-conduit.md) |
|
||||||
| [Dendrite](https://github.com/matrix-org/dendrite) | x | Storing your data and managing your presence in the [Matrix](http://matrix.org/) network. Dendrite is a second-generation Matrix homeserver written in Go, an alternative to Synapse. | [Link](docs/configuring-playbook-dendrite.md) |
|
| [Dendrite](https://github.com/matrix-org/dendrite) | x | Storing your data and managing your presence in the [Matrix](http://matrix.org/) network. Dendrite is a second-generation Matrix homeserver written in Go, an alternative to Synapse. | [Link](docs/configuring-playbook-dendrite.md) |
|
||||||
|
|
||||||
### Clients
|
### Clients
|
||||||
|
|
||||||
Web clients for Matrix that you can host on your own domains.
|
Web clients for matrix that you can host on your own domains.
|
||||||
|
|
||||||
| Name | Default? | Description | Documentation |
|
| Name | Default? | Description | Documentation |
|
||||||
| ---- | -------- | ----------- | ------------- |
|
| ---- | -------- | ----------- | ------------- |
|
||||||
| [Element](https://app.element.io/) | ✓ | Web UI, which is configured to connect to your own Synapse server by default | [Link](docs/configuring-playbook-client-element.md) |
|
| [Element](https://app.element.io/) | ✓ | Web UI, which is configured to connect to your own Synapse server by default | [Link](docs/configuring-playbook-client-element.md) |
|
||||||
| [Hydrogen](https://github.com/element-hq/hydrogen-web) | x | Lightweight Matrix client with legacy and mobile browser support | [Link](docs/configuring-playbook-client-hydrogen.md) |
|
| [Hydrogen](https://github.com/vector-im/hydrogen-web) | x | Lightweight matrix client with legacy and mobile browser support | [Link](docs/configuring-playbook-client-hydrogen.md) |
|
||||||
| [Cinny](https://github.com/ajbura/cinny) | x | Simple, elegant and secure web client | [Link](docs/configuring-playbook-client-cinny.md) |
|
| [Cinny](https://github.com/ajbura/cinny) | x | Simple, elegant and secure web client | [Link](docs/configuring-playbook-client-cinny.md) |
|
||||||
| [SchildiChat](https://schildi.chat/) | x | Based on Element, with a more traditional instant messaging experience | [Link](docs/configuring-playbook-client-schildichat.md) |
|
| [SchildiChat](https://schildi.chat/) | x | Based on Element, with a more traditional instant messaging experience | [Link](docs/configuring-playbook-client-schildichat.md) |
|
||||||
|
|
||||||
@ -61,10 +63,11 @@ Services that run on the server to make the various parts of your installation w
|
|||||||
| [PostgreSQL](https://www.postgresql.org/)| ✓ | Database for Synapse. [Using an external PostgreSQL server](docs/configuring-playbook-external-postgres.md) is also possible. | [Link](docs/configuring-playbook-external-postgres.md) |
|
| [PostgreSQL](https://www.postgresql.org/)| ✓ | Database for Synapse. [Using an external PostgreSQL server](docs/configuring-playbook-external-postgres.md) is also possible. | [Link](docs/configuring-playbook-external-postgres.md) |
|
||||||
| [Coturn](https://github.com/coturn/coturn) | ✓ | STUN/TURN server for WebRTC audio/video calls | [Link](docs/configuring-playbook-turn.md) |
|
| [Coturn](https://github.com/coturn/coturn) | ✓ | STUN/TURN server for WebRTC audio/video calls | [Link](docs/configuring-playbook-turn.md) |
|
||||||
| [Traefik](https://doc.traefik.io/traefik/) | ✓ | Web server, listening on ports 80, 443 and 8448 - standing in front of all the other services. Using your own webserver [is possible](docs/configuring-playbook-own-webserver.md) | [Link](docs/configuring-playbook-traefik.md) |
|
| [Traefik](https://doc.traefik.io/traefik/) | ✓ | Web server, listening on ports 80, 443 and 8448 - standing in front of all the other services. Using your own webserver [is possible](docs/configuring-playbook-own-webserver.md) | [Link](docs/configuring-playbook-traefik.md) |
|
||||||
|
| [nginx](http://nginx.org/) | x | (Deprecated) Web server, listening on ports 80, 443 and 8448 - standing in front of all the other services. Deprecated in favor of Traefik | [Link](docs/configuring-playbook-nginx.md) |
|
||||||
| [Let's Encrypt](https://letsencrypt.org/) | ✓ | Free SSL certificate, which secures the connection to all components | [Link](docs/configuring-playbook-ssl-certificates.md) |
|
| [Let's Encrypt](https://letsencrypt.org/) | ✓ | Free SSL certificate, which secures the connection to all components | [Link](docs/configuring-playbook-ssl-certificates.md) |
|
||||||
| [ma1sd](https://github.com/ma1uta/ma1sd) | x | Matrix Identity Server | [Link](docs/configuring-playbook-ma1sd.md)
|
| [ma1sd](https://github.com/ma1uta/ma1sd) | x | Matrix Identity Server | [Link](docs/configuring-playbook-ma1sd.md)
|
||||||
| [Exim](https://www.exim.org/) | ✓ | Mail server, through which all Matrix services send outgoing email (can be configured to relay through another SMTP server) | [Link](docs/configuring-playbook-email.md) |
|
| [Exim](https://www.exim.org/) | ✓ | Mail server, through which all Matrix services send outgoing email (can be configured to relay through another SMTP server) | [Link](docs/configuring-playbook-email.md) |
|
||||||
| [Dimension](https://github.com/turt2live/matrix-dimension) | x | An open source integration manager for Matrix clients | [Link](docs/configuring-playbook-dimension.md) |
|
| [Dimension](https://github.com/turt2live/matrix-dimension) | x | An open source integrations manager for matrix clients | [Link](docs/configuring-playbook-dimension.md) |
|
||||||
| [Sygnal](https://github.com/matrix-org/sygnal) | x | Push gateway | [Link](docs/configuring-playbook-sygnal.md) |
|
| [Sygnal](https://github.com/matrix-org/sygnal) | x | Push gateway | [Link](docs/configuring-playbook-sygnal.md) |
|
||||||
| [ntfy](https://ntfy.sh) | x | Push notifications server | [Link](docs/configuring-playbook-ntfy.md) |
|
| [ntfy](https://ntfy.sh) | x | Push notifications server | [Link](docs/configuring-playbook-ntfy.md) |
|
||||||
|
|
||||||
@ -79,7 +82,7 @@ Extend and modify how users are authenticated on your homeserver.
|
|||||||
|[matrix-synapse-shared-secret-auth](https://github.com/devture/matrix-synapse-shared-secret-auth) (advanced) | x | Password provider module | [Link](docs/configuring-playbook-shared-secret-auth.md) |
|
|[matrix-synapse-shared-secret-auth](https://github.com/devture/matrix-synapse-shared-secret-auth) (advanced) | x | Password provider module | [Link](docs/configuring-playbook-shared-secret-auth.md) |
|
||||||
| [matrix-synapse-ldap3](https://github.com/matrix-org/matrix-synapse-ldap3) (advanced) | x | LDAP Auth password provider module | [Link](docs/configuring-playbook-ldap-auth.md) |
|
| [matrix-synapse-ldap3](https://github.com/matrix-org/matrix-synapse-ldap3) (advanced) | x | LDAP Auth password provider module | [Link](docs/configuring-playbook-ldap-auth.md) |
|
||||||
| [matrix-ldap-registration-proxy](https://gitlab.com/activism.international/matrix_ldap_registration_proxy) (advanced) | x | A proxy that handles Matrix registration requests and forwards them to LDAP. | [Link](docs/configuring-playbook-matrix-ldap-registration-proxy.md) |
|
| [matrix-ldap-registration-proxy](https://gitlab.com/activism.international/matrix_ldap_registration_proxy) (advanced) | x | A proxy that handles Matrix registration requests and forwards them to LDAP. | [Link](docs/configuring-playbook-matrix-ldap-registration-proxy.md) |
|
||||||
| [matrix-registration](https://github.com/ZerataX/matrix-registration) | x | A simple python application to have a token based Matrix registration | [Link](docs/configuring-playbook-matrix-registration.md) |
|
| [matrix-registration](https://github.com/ZerataX/matrix-registration) | x | A simple python application to have a token based matrix registration | [Link](docs/configuring-playbook-matrix-registration.md) |
|
||||||
|
|
||||||
|
|
||||||
### File Storage
|
### File Storage
|
||||||
@ -94,7 +97,7 @@ Use alternative file storage to the default `media_store` folder.
|
|||||||
|
|
||||||
### Bridges
|
### Bridges
|
||||||
|
|
||||||
Bridges can be used to connect your Matrix installation with third-party communication networks.
|
Bridges can be used to connect your matrix installation with third-party communication networks.
|
||||||
|
|
||||||
| Name | Default? | Description | Documentation |
|
| Name | Default? | Description | Documentation |
|
||||||
| ---- | -------- | ----------- | ------------- |
|
| ---- | -------- | ----------- | ------------- |
|
||||||
@ -103,33 +106,28 @@ Bridges can be used to connect your Matrix installation with third-party communi
|
|||||||
| [mautrix-telegram](https://github.com/mautrix/telegram) | x | Bridge to [Telegram](https://telegram.org/) | [Link](docs/configuring-playbook-bridge-mautrix-telegram.md) |
|
| [mautrix-telegram](https://github.com/mautrix/telegram) | x | Bridge to [Telegram](https://telegram.org/) | [Link](docs/configuring-playbook-bridge-mautrix-telegram.md) |
|
||||||
| [mautrix-gmessages](https://github.com/mautrix/gmessages) | x | Bridge to [Google Messages](https://messages.google.com/) | [Link](docs/configuring-playbook-bridge-mautrix-gmessages.md) |
|
| [mautrix-gmessages](https://github.com/mautrix/gmessages) | x | Bridge to [Google Messages](https://messages.google.com/) | [Link](docs/configuring-playbook-bridge-mautrix-gmessages.md) |
|
||||||
| [mautrix-whatsapp](https://github.com/mautrix/whatsapp) | x | Bridge to [WhatsApp](https://www.whatsapp.com/) | [Link](docs/configuring-playbook-bridge-mautrix-whatsapp.md) |
|
| [mautrix-whatsapp](https://github.com/mautrix/whatsapp) | x | Bridge to [WhatsApp](https://www.whatsapp.com/) | [Link](docs/configuring-playbook-bridge-mautrix-whatsapp.md) |
|
||||||
| [mautrix-wsproxy](https://github.com/mautrix/wsproxy) | x | Bridge to Android SMS or Apple iMessage | [Link](docs/configuring-playbook-bridge-mautrix-wsproxy.md) |
|
|
||||||
| [mautrix-facebook](https://github.com/mautrix/facebook) | x | Bridge to [Facebook](https://facebook.com/) | [Link](docs/configuring-playbook-bridge-mautrix-facebook.md) |
|
| [mautrix-facebook](https://github.com/mautrix/facebook) | x | Bridge to [Facebook](https://facebook.com/) | [Link](docs/configuring-playbook-bridge-mautrix-facebook.md) |
|
||||||
| [mautrix-twitter](https://github.com/mautrix/twitter) | x | Bridge to [Twitter](https://twitter.com/) | [Link](docs/configuring-playbook-bridge-mautrix-twitter.md) |
|
| [mautrix-twitter](https://github.com/mautrix/twitter) | x | Bridge to [Twitter](https://twitter.com/) | [Link](docs/configuring-playbook-bridge-mautrix-twitter.md) |
|
||||||
| [mautrix-hangouts](https://github.com/mautrix/hangouts) | x | Bridge to [Google Hangouts](https://en.wikipedia.org/wiki/Google_Hangouts) | [Link](docs/configuring-playbook-bridge-mautrix-hangouts.md) |
|
| [mautrix-hangouts](https://github.com/mautrix/hangouts) | x | Bridge to [Google Hangouts](https://en.wikipedia.org/wiki/Google_Hangouts) | [Link](docs/configuring-playbook-bridge-mautrix-hangouts.md) |
|
||||||
| [mautrix-googlechat](https://github.com/mautrix/googlechat) | x | Bridge to [Google Chat](https://en.wikipedia.org/wiki/Google_Chat) | [Link](docs/configuring-playbook-bridge-mautrix-googlechat.md) |
|
| [mautrix-googlechat](https://github.com/mautrix/googlechat) | x | Bridge to [Google Chat](https://en.wikipedia.org/wiki/Google_Chat) | [Link](docs/configuring-playbook-bridge-mautrix-googlechat.md) |
|
||||||
| [mautrix-instagram](https://github.com/mautrix/instagram) | x | Bridge to [Instagram](https://instagram.com/) | [Link](docs/configuring-playbook-bridge-mautrix-instagram.md) |
|
| [mautrix-instagram](https://github.com/mautrix/instagram) | x | Bridge to [Instagram](https://instagram.com/) | [Link](docs/configuring-playbook-bridge-mautrix-instagram.md) |
|
||||||
| [mautrix-meta](https://github.com/mautrix/instagram) | x | Bridge to [Messenger](https://messenger.com/) and [Instagram](https://instagram.com/) | Link for [Messenger](docs/configuring-playbook-bridge-mautrix-meta-messenger.md) / [Instagram](docs/configuring-playbook-bridge-mautrix-meta-instagram.md) |
|
|
||||||
| [mautrix-signal](https://github.com/mautrix/signal) | x | Bridge to [Signal](https://www.signal.org/) | [Link](docs/configuring-playbook-bridge-mautrix-signal.md) |
|
| [mautrix-signal](https://github.com/mautrix/signal) | x | Bridge to [Signal](https://www.signal.org/) | [Link](docs/configuring-playbook-bridge-mautrix-signal.md) |
|
||||||
| [beeper-linkedin](https://github.com/beeper/linkedin) | x | Bridge to [LinkedIn](https://www.linkedin.com/) | [Link](docs/configuring-playbook-bridge-beeper-linkedin.md) |
|
| [beeper-linkedin](https://github.com/beeper/linkedin) | x | Bridge to [LinkedIn](https://www.linkedin.com/) | [Link](docs/configuring-playbook-bridge-beeper-linkedin.md) |
|
||||||
| [matrix-appservice-irc](https://github.com/matrix-org/matrix-appservice-irc) | x | Bridge to [IRC](https://wikipedia.org/wiki/Internet_Relay_Chat) | [Link](docs/configuring-playbook-bridge-appservice-irc.md) |
|
| [matrix-appservice-irc](https://github.com/matrix-org/matrix-appservice-irc) | x | Bridge to [IRC](https://wikipedia.org/wiki/Internet_Relay_Chat) | [Link](docs/configuring-playbook-bridge-appservice-irc.md) |
|
||||||
| [matrix-appservice-kakaotalk](https://src.miscworks.net/fair/matrix-appservice-kakaotalk) | x | Bridge to [Kakaotalk](https://www.kakaocorp.com/page/service/service/KakaoTalk?lang=ENG) | [Link](docs/configuring-playbook-bridge-appservice-kakaotalk.md) |
|
| [matrix-appservice-discord](https://github.com/Half-Shot/matrix-appservice-discord) | x | Bridge to [Discord](https://discordapp.com/) | [Link](docs/configuring-playbook-bridge-appservice-discord.md) |
|
||||||
| [matrix-appservice-discord](https://github.com/matrix-org/matrix-appservice-discord) | x | Bridge to [Discord](https://discordapp.com/) | [Link](docs/configuring-playbook-bridge-appservice-discord.md) |
|
|
||||||
| [matrix-appservice-slack](https://github.com/matrix-org/matrix-appservice-slack) | x | Bridge to [Slack](https://slack.com/) | [Link](docs/configuring-playbook-bridge-appservice-slack.md) |
|
| [matrix-appservice-slack](https://github.com/matrix-org/matrix-appservice-slack) | x | Bridge to [Slack](https://slack.com/) | [Link](docs/configuring-playbook-bridge-appservice-slack.md) |
|
||||||
| [matrix-appservice-webhooks](https://github.com/turt2live/matrix-appservice-webhooks) | x | Bridge for slack compatible webhooks ([ConcourseCI](https://concourse-ci.org/), [Slack](https://slack.com/) etc. pp.) | [Link](docs/configuring-playbook-bridge-appservice-webhooks.md) |
|
| [matrix-appservice-webhooks](https://github.com/turt2live/matrix-appservice-webhooks) | x | Bridge for slack compatible webhooks ([ConcourseCI](https://concourse-ci.org/), [Slack](https://slack.com/) etc. pp.) | [Link](docs/configuring-playbook-bridge-appservice-webhooks.md) |
|
||||||
| [matrix-hookshot](https://github.com/matrix-org/matrix-hookshot) | x | Bridge for generic webhooks and multiple project management services, such as GitHub, GitLab, Figma, and Jira in particular | [Link](docs/configuring-playbook-bridge-hookshot.md) |
|
| [matrix-hookshot](https://github.com/Half-Shot/matrix-hookshot) | x | Bridge for generic webhooks and multiple project management services, such as GitHub, GitLab, Figma, and Jira in particular | [Link](docs/configuring-playbook-bridge-hookshot.md) |
|
||||||
| [matrix-sms-bridge](https://github.com/benkuly/matrix-sms-bridge) | x | Bridge to SMS | [Link](docs/configuring-playbook-bridge-matrix-bridge-sms.md) |
|
| [matrix-sms-bridge](https://github.com/benkuly/matrix-sms-bridge) | x | Bridge to SMS | [Link](docs/configuring-playbook-bridge-matrix-bridge-sms.md) |
|
||||||
| [matrix-wechat](https://github.com/duo/matrix-wechat) | x | Bridge to [WeChat](https://www.wechat.com/) | [Link](docs/configuring-playbook-bridge-wechat.md) |
|
|
||||||
| [Heisenbridge](https://github.com/hifi/heisenbridge) | x | Bouncer-style bridge to [IRC](https://wikipedia.org/wiki/Internet_Relay_Chat) | [Link](docs/configuring-playbook-bridge-heisenbridge.md) |
|
| [Heisenbridge](https://github.com/hifi/heisenbridge) | x | Bouncer-style bridge to [IRC](https://wikipedia.org/wiki/Internet_Relay_Chat) | [Link](docs/configuring-playbook-bridge-heisenbridge.md) |
|
||||||
| [go-skype-bridge](https://github.com/kelaresg/go-skype-bridge) | x | Bridge to [Skype](https://www.skype.com) | [Link](docs/configuring-playbook-bridge-go-skype-bridge.md) |
|
| [go-skype-bridge](https://github.com/kelaresg/go-skype-bridge) | x | Bridge to [Skype](https://www.skype.com) | [Link](docs/configuring-playbook-bridge-go-skype-bridge.md) |
|
||||||
| [mx-puppet-slack](https://gitlab.com/mx-puppet/slack/mx-puppet-slack) | x | Bridge to [Slack](https://slack.com) | [Link](docs/configuring-playbook-bridge-mx-puppet-slack.md) |
|
| [mx-puppet-slack](https://hub.docker.com/r/sorunome/mx-puppet-slack) | x | Bridge to [Slack](https://slack.com) | [Link](docs/configuring-playbook-bridge-mx-puppet-slack.md) |
|
||||||
| [mx-puppet-instagram](https://github.com/Sorunome/mx-puppet-instagram) | x | Bridge for Instagram-DMs ([Instagram](https://www.instagram.com/)) | [Link](docs/configuring-playbook-bridge-mx-puppet-instagram.md) |
|
| [mx-puppet-instagram](https://github.com/Sorunome/mx-puppet-instagram) | x | Bridge for Instagram-DMs ([Instagram](https://www.instagram.com/)) | [Link](docs/configuring-playbook-bridge-mx-puppet-instagram.md) |
|
||||||
| [mx-puppet-twitter](https://github.com/Sorunome/mx-puppet-twitter) | x | Bridge for Twitter-DMs ([Twitter](https://twitter.com/)) | [Link](docs/configuring-playbook-bridge-mx-puppet-twitter.md) |
|
| [mx-puppet-twitter](https://github.com/Sorunome/mx-puppet-twitter) | x | Bridge for Twitter-DMs ([Twitter](https://twitter.com/)) | [Link](docs/configuring-playbook-bridge-mx-puppet-twitter.md) |
|
||||||
| [mx-puppet-discord](https://gitlab.com/mx-puppet/discord/mx-puppet-discord) | x | Bridge to [Discord](https://discordapp.com/) | [Link](docs/configuring-playbook-bridge-mx-puppet-discord.md) |
|
| [mx-puppet-discord](https://github.com/matrix-discord/mx-puppet-discord) | x | Bridge to [Discord](https://discordapp.com/) | [Link](docs/configuring-playbook-bridge-mx-puppet-discord.md) |
|
||||||
| [mx-puppet-groupme](https://gitlab.com/xangelix-pub/matrix/mx-puppet-groupme) | x | Bridge to [GroupMe](https://groupme.com/) | [Link](docs/configuring-playbook-bridge-mx-puppet-groupme.md) |
|
| [mx-puppet-groupme](https://gitlab.com/xangelix-pub/matrix/mx-puppet-groupme) | x | Bridge to [GroupMe](https://groupme.com/) | [Link](docs/configuring-playbook-bridge-mx-puppet-groupme.md) |
|
||||||
| [mx-puppet-steam](https://github.com/icewind1991/mx-puppet-steam) | x | Bridge to [Steam](https://steamapp.com/) | [Link](docs/configuring-playbook-bridge-mx-puppet-steam.md) |
|
| [mx-puppet-steam](https://github.com/icewind1991/mx-puppet-steam) | x | Bridge to [Steam](https://steamapp.com/) | [Link](docs/configuring-playbook-bridge-mx-puppet-steam.md) |
|
||||||
| [Email2Matrix](https://github.com/devture/email2matrix) | x | Bridge for relaying emails to Matrix rooms | [Link](docs/configuring-playbook-email2matrix.md) |
|
| [Email2Matrix](https://github.com/devture/email2matrix) | x | Bridge for relaying emails to Matrix rooms | [Link](docs/configuring-playbook-email2matrix.md) |
|
||||||
| [Postmoogle](https://github.com/etkecc/postmoogle) | x | Email to Matrix bridge | [Link](docs/configuring-playbook-bridge-postmoogle.md) |
|
|
||||||
|
|
||||||
|
|
||||||
### Bots
|
### Bots
|
||||||
@ -138,31 +136,28 @@ Bots provide various additional functionality to your installation.
|
|||||||
|
|
||||||
| Name | Default? | Description | Documentation |
|
| Name | Default? | Description | Documentation |
|
||||||
| ---- | -------- | ----------- | ------------- |
|
| ---- | -------- | ----------- | ------------- |
|
||||||
| [baibot](https://github.com/etkecc/baibot) | x | A bot that exposes the power of [AI](https://en.wikipedia.org/wiki/Artificial_intelligence) / [Large Language Models](https://en.wikipedia.org/wiki/Large_language_model) to you | [Link](docs/configuring-playbook-bot-baibot.md) |
|
|
||||||
| [matrix-reminder-bot](https://github.com/anoadragon453/matrix-reminder-bot) | x | Bot for scheduling one-off & recurring reminders and alarms | [Link](docs/configuring-playbook-bot-matrix-reminder-bot.md) |
|
| [matrix-reminder-bot](https://github.com/anoadragon453/matrix-reminder-bot) | x | Bot for scheduling one-off & recurring reminders and alarms | [Link](docs/configuring-playbook-bot-matrix-reminder-bot.md) |
|
||||||
| [matrix-registration-bot](https://github.com/moan0s/matrix-registration-bot) | x | Bot for invitations by creating and managing registration tokens | [Link](docs/configuring-playbook-bot-matrix-registration-bot.md) |
|
| [matrix-registration-bot](https://github.com/moan0s/matrix-registration-bot) | x | Bot for invitations by creating and managing registration tokens | [Link](docs/configuring-playbook-bot-matrix-registration-bot.md) |
|
||||||
| [maubot](https://github.com/maubot/maubot) | x | A plugin-based Matrix bot system | [Link](docs/configuring-playbook-bot-maubot.md) |
|
| [maubot](https://github.com/maubot/maubot) | x | A plugin-based Matrix bot system | [Link](docs/configuring-playbook-bot-maubot.md) |
|
||||||
| [Honoroit](https://github.com/etkecc/honoroit) | x | A helpdesk bot | [Link](docs/configuring-playbook-bot-honoroit.md) |
|
| [honoroit](https://gitlab.com/etke.cc/honoroit) | x | A helpdesk bot | [Link](docs/configuring-playbook-bot-honoroit.md) |
|
||||||
|
| [Postmoogle](https://gitlab.com/etke.cc/postmoogle) | x | Email to matrix bot | [Link](docs/configuring-playbook-bot-postmoogle.md) |
|
||||||
| [Go-NEB](https://github.com/matrix-org/go-neb) | x | A multi functional bot written in Go | [Link](docs/configuring-playbook-bot-go-neb.md) |
|
| [Go-NEB](https://github.com/matrix-org/go-neb) | x | A multi functional bot written in Go | [Link](docs/configuring-playbook-bot-go-neb.md) |
|
||||||
| [Mjolnir](https://github.com/matrix-org/mjolnir) | x | A moderation tool for Matrix | [Link](docs/configuring-playbook-bot-mjolnir.md) |
|
| [Mjolnir](https://github.com/matrix-org/mjolnir) | x | A moderation tool for Matrix | [Link](docs/configuring-playbook-bot-mjolnir.md) |
|
||||||
| [Draupnir](https://github.com/the-draupnir-project/Draupnir) | x | A moderation tool for Matrix (Fork of Mjolnir) | [Link](docs/configuring-playbook-bot-draupnir.md) (for [appservice mode](docs/configuring-playbook-appservice-draupnir-for-all.md))|
|
| [Draupnir](https://github.com/the-draupnir-project/Draupnir) | x | A moderation tool for Matrix (Fork of Mjolnir) | [Link](docs/configuring-playbook-bot-draupnir.md) |
|
||||||
| [Buscarron](https://github.com/etkecc/buscarron) | x | Web forms (HTTP POST) to Matrix | [Link](docs/configuring-playbook-bot-buscarron.md) |
|
| [Buscarron](https://gitlab.com/etke.cc/buscarron) | x | Web forms (HTTP POST) to matrix | [Link](docs/configuring-playbook-bot-buscarron.md) |
|
||||||
| [matrix-chatgpt-bot](https://github.com/matrixgpt/matrix-chatgpt-bot) | x | ChatGPT from Matrix | [Link](docs/configuring-playbook-bot-chatgpt.md) |
|
| [matrix-chatgpt-bot](https://github.com/matrixgpt/matrix-chatgpt-bot) | x | ChatGPT from matrix | [Link](docs/configuring-playbook-bot-chatgpt.md) |
|
||||||
|
|
||||||
### Administration
|
### Administration
|
||||||
|
|
||||||
Services that help you in administrating and monitoring your Matrix installation.
|
Services that help you in administrating and monitoring your matrix installation.
|
||||||
|
|
||||||
|
|
||||||
| Name | Default? | Description | Documentation |
|
| Name | Default? | Description | Documentation |
|
||||||
| ---- | -------- | ----------- | ------------- |
|
| ---- | -------- | ----------- | ------------- |
|
||||||
| [matrix-alertmanager-receiver](https://github.com/metio/matrix-alertmanager-receiver) | x | Prometheus' [Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/) client | [Link](docs/configuring-playbook-alertmanager-receiver.md) |
|
| [synapse-admin](https://github.com/Awesome-Technologies/synapse-admin) | x | A web UI tool for administrating users and rooms on your Matrix server | [Link](docs/configuring-playbook-synapse-admin.md) |
|
||||||
| [Matrix Authentication Service](https://github.com/element-hq/matrix-authentication-service/) | x | OAuth 2.0 and OpenID Provider server | [Link](docs/configuring-playbook-matrix-authentication-service.md) |
|
| Metrics and Graphs | x | Consists of the [Prometheus](https://prometheus.io) time-series database server, the Prometheus [node-exporter](https://prometheus.io/docs/guides/node-exporter/) host metrics exporter, and the [Grafana](https://grafana.com/) web UI | [Link](docs/configuring-playbook-prometheus-grafana.md) |
|
||||||
| [synapse-admin](https://github.com/etkecc/synapse-admin) | x | A web UI tool for administrating users and rooms on your Matrix server | [Link](docs/configuring-playbook-synapse-admin.md) |
|
|
||||||
| Metrics and Graphs | x | Consists of the [Prometheus](https://prometheus.io) time-series database server, the Prometheus [node-exporter](https://prometheus.io/docs/guides/node-exporter/) host metrics exporter, and the [Grafana](https://grafana.com/) web UI, with [prometheus-nginxlog-exporter](https://github.com/martin-helmich/prometheus-nginxlog-exporter/) being available too | [Link](docs/configuring-playbook-prometheus-grafana.md) (for [prometheus-nginxlog-exporter](docs/configuring-playbook-prometheus-nginxlog.md)) |
|
|
||||||
| [Borg](https://borgbackup.org) | x | Backups | [Link](docs/configuring-playbook-backup-borg.md) |
|
| [Borg](https://borgbackup.org) | x | Backups | [Link](docs/configuring-playbook-backup-borg.md) |
|
||||||
| [rageshake](https://github.com/matrix-org/rageshake) | x | Bug report server | [Link](docs/configuring-playbook-rageshake.md) |
|
| [Rageshake](https://github.com/matrix-org/rageshake) | x | Bug report server | [Link](docs/configuring-playbook-rageshake.md) |
|
||||||
| [synapse-usage-exporter](https://github.com/loelkes/synapse-usage-exporter) | x | Export the usage statistics of a Synapse homeserver to be scraped by Prometheus. | [Link](docs/configuring-playbook-synapse-usage-exporter.md) |
|
|
||||||
|
|
||||||
### Misc
|
### Misc
|
||||||
|
|
||||||
@ -171,14 +166,12 @@ Various services that don't fit any other category.
|
|||||||
| Name | Default? | Description | Documentation |
|
| Name | Default? | Description | Documentation |
|
||||||
| ---- | -------- | ----------- | ------------- |
|
| ---- | -------- | ----------- | ------------- |
|
||||||
| [sliding-sync](https://github.com/matrix-org/sliding-sync)| x | Sliding Sync support for clients which require it (e.g. Element X) | [Link](docs/configuring-playbook-sliding-sync-proxy.md) |
|
| [sliding-sync](https://github.com/matrix-org/sliding-sync)| x | Sliding Sync support for clients which require it (e.g. Element X) | [Link](docs/configuring-playbook-sliding-sync-proxy.md) |
|
||||||
| [synapse_auto_accept_invite](https://github.com/matrix-org/synapse-auto-accept-invite) | x | A Synapse module to automatically accept invites. | [Link](docs/configuring-playbook-synapse-auto-accept-invite.md) |
|
|
||||||
| [synapse_auto_compressor](https://github.com/matrix-org/rust-synapse-compress-state/#automated-tool-synapse_auto_compressor) | x | A cli tool that automatically compresses `state_groups` database table in background. | [Link](docs/configuring-playbook-synapse-auto-compressor.md) |
|
| [synapse_auto_compressor](https://github.com/matrix-org/rust-synapse-compress-state/#automated-tool-synapse_auto_compressor) | x | A cli tool that automatically compresses `state_groups` database table in background. | [Link](docs/configuring-playbook-synapse-auto-compressor.md) |
|
||||||
| [synapse-simple-antispam](https://github.com/t2bot/synapse-simple-antispam) (advanced) | x | A spam checker module | [Link](docs/configuring-playbook-synapse-simple-antispam.md) |
|
| [synapse-simple-antispam](https://github.com/t2bot/synapse-simple-antispam) (advanced) | x | A spam checker module | [Link](docs/configuring-playbook-synapse-simple-antispam.md) |
|
||||||
| [Matrix Corporal](https://github.com/devture/matrix-corporal) (advanced) | x | Reconciliator and gateway for a managed Matrix server | [Link](docs/configuring-playbook-matrix-corporal.md) |
|
| [Matrix Corporal](https://github.com/devture/matrix-corporal) (advanced) | x | Reconciliator and gateway for a managed Matrix server | [Link](docs/configuring-playbook-matrix-corporal.md) |
|
||||||
| [Etherpad](https://etherpad.org) | x | An open source collaborative text editor | [Link](docs/configuring-playbook-etherpad.md) |
|
| [Etherpad](https://etherpad.org) | x | An open source collaborative text editor | [Link](docs/configuring-playbook-etherpad.md) |
|
||||||
| [Jitsi](https://jitsi.org/) | x | An open source video-conferencing platform | [Link](docs/configuring-playbook-jitsi.md) |
|
| [Jitsi](https://jitsi.org/) | x | An open source video-conferencing platform | [Link](docs/configuring-playbook-jitsi.md) |
|
||||||
| [Cactus Comments](https://cactus.chat) | x | A federated comment system built on Matrix | [Link](docs/configuring-playbook-cactus-comments.md) |
|
| [Cactus Comments](https://cactus.chat) | x | A federated comment system built on matrix | [Link](docs/configuring-playbook-cactus-comments.md) |
|
||||||
| [Pantalaimon](https://github.com/matrix-org/pantalaimon) | x | An E2EE aware proxy daemon | [Link](docs/configuring-playbook-pantalaimon.md) |
|
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
@ -1,106 +0,0 @@
|
|||||||
# 2023
|
|
||||||
|
|
||||||
2023 was a year filled with many changes for matrix-docker-ansible-deploy. In this post, we're looking backward at some of the major changes that happened this year, as well as taking a glimpse of what's ahead in 2024.
|
|
||||||
|
|
||||||
2023 is probably [the year of AI](https://journal.everypixel.com/2023-the-year-of-ai), with millions of people jumping aboard [OpenAI](https://openai.com/)'s [ChatGPT](https://openai.com/chatgpt) train. matrix-docker-ansible-deploy is no stranger to this and 2023 began with a PR from [bertybuttface](https://github.com/bertybuttface) who added support for [matrix-chatgpt-bot](https://github.com/matrixgpt/matrix-chatgpt-bot) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#chatgpt-support)). While OpenAI's chat GPT website was frequently overloaded in the past, their API was up which made using this bot both convenient and more reliable.
|
|
||||||
|
|
||||||
AI aside, with the playbook's focus being containers, we're **doubling down on being "container native"** and becoming more interoperable for people hosting other containers on the Matrix server. In [2022](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/YEAR-IN-REVIEW.md#2022), we've announced a few sibling Ansible playbooks, their use of [Traefik](https://doc.traefik.io/traefik/) and the possiblity of matrix-docker-ansible-deploy also switching to this reverse-proxy. This prediction materialized quickly. The **largest change** in the playbook in 2023 happened way back in February - matrix-docker-ansible-deploy [starting the switch from nginx to Traefik](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#backward-compatibility-reverse-proxy-configuration-changes-and-initial-traefik-support) and then quickly [making Treafik the default reverse-proxy](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#traefik-is-the-default-reverse-proxy-now). As noted in the changelog entries, we envisioned a quick and complete elimination of `matrix-nginx-proxy`, but at the end of 2023, it hasn't happened yet. The playbook is already using Traefik as the front-most reverse-proxy, but nginx (via `matrix-nginx-proxy`) is still around - it has taken a step back and is only used internally for new setups. Work got to a stall due to:
|
|
||||||
|
|
||||||
* complexity: untangling the overly large and messy `matrix-nginx-proxy` component is difficult
|
|
||||||
* the current setup became "good enough" because nginx has become an internal implementation detail for those who have migrated to Traefik. Traefik is already the default public reverse-proxy and gives better possibilities to people wishing to run other web-exposed containers on their Matrix server via [Docker Compose](https://docs.docker.com/compose/), other Ansible playbooks like [mash-playbook](https://github.com/mother-of-all-self-hosting/mash-playbook) (more about this one, below) or any other way.
|
|
||||||
|
|
||||||
`matrix-nginx-proxy` is no longer in the way of us being interoperable, but its ugly internal details are still there. It is one more proxy in the long chain of reverse-proxies we have and we'd like to cut it out. This would both make things simpler and also boost performance.
|
|
||||||
|
|
||||||
The delay in eliminating `matrix-nginx-proxy` has probably been welcome by many existing users who decided to postpone the Traefik migration a bit longer. In 2024, work on eliminating `matrix-nginx-proxy` will continue with rapid pace. People who are still using `matrix-nginx-proxy` as their front-most reverse-proxy will need to rework their setup. About a year of putting it off has been long enough.
|
|
||||||
|
|
||||||
This large Traefik reverse-proxy change was also accompanied by another internal change which began in 2022, but continued in 2023 - **moving non-Matrix-related roles from being internal to the playbook to living their own life outside of it**. Various roles were made more decoupled and moved outside of the playbook, so that other projects (like the [mash-playbook](https://github.com/mother-of-all-self-hosting/mash-playbook) Ansible playbook or other Ansible playbooks) could benefit from them. This led to the **death of a few sibling playbooks** ([gitea-docker-ansible-deploy](https://github.com/spantaleev/gitea-docker-ansible-deploy), [nextcloud-docker-ansible-deploy](https://github.com/spantaleev/nextcloud-docker-ansible-deploy), [peertube-docker-ansible-deploy](https://github.com/spantaleev/peertube-docker-ansible-deploy), [vaultwarden-docker-ansible-deploy](https://github.com/spantaleev/vaultwarden-docker-ansible-deploy)), but brought life to something better, which supports all these services and more.
|
|
||||||
|
|
||||||
[mash-playbook](https://github.com/mother-of-all-self-hosting/mash-playbook) is a new Ansible playbook that a few of us (matrix-docker-ansible-deploy contributors) have launched in 2023. It has quickly grown to supports [60+ services](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/supported-services.md) and aims to do the same for [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) service hosting, as matrix-docker-ansible-deploy has done for Matrix - providing a clean and secure way to run a bunch of services in containers on a regular server (that is to say, without Kubernetes, etc.). Thanks to Traefik and Ansible role reuse, it's easy to host both mash-playbook services and matrix-docker-ansible-deploy services on the same server - see mash-playbook's [interoperability](https://github.com/mother-of-all-self-hosting/mash-playbook/blob/main/docs/interoperability.md) documentation page. If you've been looking for a holiday project or your New Year's Resolutions list contains "self-hosting more services", then you're welcome to give this new playbook a try and join its Matrix room ([#mash-playbook:devture.com](https://matrix.to/#/#mash-playbook:devture.com)).
|
|
||||||
|
|
||||||
Because many of the roles are now external to this playbook (defined in the [requirements.yml](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/da27655ef34999fa924bc0a5e641dbd9ba06f133/requirements.yml) file), running `make roles` (or better yet `just roles` via the [just tool](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#support-for-running-commands-via-just)) becomes a necessity each time one pulls playbook updates (`git pull`). Pulling external roles happens via the [ansible-galaxy](https://docs.ansible.com/ansible/latest/cli/ansible-galaxy.html) command-line tool, but if available, the playbook would also use the much faster [agru](https://github.com/etkecc/agru) tool (developed by [Aine](https://gitlab.com/etke.cc) from [etke.cc](https://etke.cc/) this year).
|
|
||||||
|
|
||||||
With the internal (but important) details out of the way, we can now talk more about **new features that landed in matrix-docker-ansible-deploy in 2023**.
|
|
||||||
|
|
||||||
The following **new** **bridges** were added to the playbook in 2023:
|
|
||||||
|
|
||||||
* (2023-01-11) [mautrix-slack](https://mau.dev/mautrix/slack), thanks to a PR by [Cody Neiman](https://github.com/xangelix) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#mautrix-slack-support))
|
|
||||||
* (2023-07-21) [mautrix-gmessages](https://github.com/mautrix/gmessages), thanks to a PR by [Shreyas Ajjarapu](https://github.com/shreyasajj) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#mautrix-gmessages-support))
|
|
||||||
* (2023-08-23) [mautrix-wsproxy](https://github.com/mautrix/wsproxy) for Apple iMessage bridging (when combined with the [mautrix-imessage](https://github.com/mautrix/imessage) bridge running on your Mac or Android phone), thanks to a PR by [Johan Swetzén](https://github.com/jswetzen)
|
|
||||||
|
|
||||||
This brings the total number of **[bridges that the playbook supports](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/docs/configuring-playbook.md#bridging-other-networks) up to 30**. There are alternative bridge implementations for various networks and protocols, so the number of "unique bridged networks" is surely much smaller.
|
|
||||||
|
|
||||||
A few other **major components and changes** landed in 2023:
|
|
||||||
|
|
||||||
* (2023-02-10) The [Draupnir](https://github.com/the-draupnir-project/Draupnir) moderation tool (successor to [Mjolnir](https://github.com/matrix-org/mjolnir)), thanks to a PR by [FSG-Cat](https://github.com/FSG-Cat) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#draupnir-moderation-tool-bot-support))
|
|
||||||
* (2023-02-10) [Matrix User Verification Service](https://github.com/matrix-org/matrix-user-verification-service) to add Matrix Authentication Support to our Jitsi setup, thanks to a PR by [Jakob S.](https://github.com/jakicoll) from [zakk gGmbH](https://github.com/zakk-it) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#matrix-authentication-support-for-jitsi))
|
|
||||||
* (2023-02-25) The [rageshake](https://github.com/matrix-org/rageshake) bug report server, thanks to a PR by [Benjamin Kampmann](https://github.com/gnunicorn) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#rageshake-support))
|
|
||||||
* (2023-03-07) [Sliding Sync proxy](https://github.com/matrix-org/sliding-sync) (currently a necessary component for [Element X](https://element.io/labs/element-x) to work), thanks to: [Benjamin Kampmann](https://github.com/gnunicorn) and [FSG-Cat](https://github.com/FSG-Cat) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#sliding-sync-proxy-element-x-support))
|
|
||||||
* (2023-03-12) synapse-auto-compressor to periodically and automatically run [rust-synapse-compress-state](https://github.com/matrix-org/rust-synapse-compress-state), thanks to a PR by [Aine](https://gitlab.com/etke.cc) from [etke.cc](https://etke.cc/) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#synapse-auto-compressor-support))
|
|
||||||
* (2023-07-17) [matrix-media-repo](https://github.com/turt2live/matrix-media-repo), thanks to a PR by [Michael Hollister](https://github.com/Michael-Hollister) from [FUTO](https://www.futo.org/), the creators of the [Circles app](https://circu.li/) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#matrix-media-repo-support))
|
|
||||||
* (2023-08-31) [SchildiChat](https://github.com/SchildiChat/schildichat-desktop) client app (fork of [element-web)](https://github.com/element-hq/element-web), thanks to a PR by [Aine](https://gitlab.com/etke.cc) from [etke.cc](https://etke.cc/) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#schildichat-support))
|
|
||||||
* (2023-10-18) Postgres parameters auto-tuning, thanks to a PR by [Aine](https://gitlab.com/etke.cc) from [etke.cc](https://etke.cc/) (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#postgres-parameters-are-automatically-tuned-now))
|
|
||||||
* (2023-10-23) Enabling federation of the room directory for Synapse (see the [changelog entry](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#enabling-allow_public_rooms_over_federation-by-default-for-synapse))
|
|
||||||
|
|
||||||
The most recent change in the list above (Enabling federation of the room directory for Synapse) has been somewhat **controversial** as it goes against upstream defaults for Synapse. Nevertheless, we believe it **promotes the well-being of the Matrix Federation by improving room discovery**.
|
|
||||||
|
|
||||||
**Matrix Federation Stats** (containing the percentage of servers publishing their room directory publicly) are posted to [TWIM](https://matrix.org/category/this-week-in-matrix/) each week by [Aine](https://gitlab.com/etke.cc) from [etke.cc](https://etke.cc/). The number of servers which [currently published their room directory publicly](https://matrix.org/blog/2023/12/2/this-week-in-matrix-2023-12-22/#matrix-federation-stats) stands at `26.6%`, which is:
|
|
||||||
|
|
||||||
- **2.4% more** than when it was when [first published to TWIM](https://matrix.org/blog/2023/11/03/this-week-in-matrix-2023-11-03/#matrix-federation-stats) (1 month earlier, in November)
|
|
||||||
- likely about **15+% more** than from before we flipped the switch (in October)
|
|
||||||
|
|
||||||
Hopefully, Synapse defaults would also change the same way and we'd see the number of servers publicly listing their room directory grow faster.
|
|
||||||
|
|
||||||
With this configuration change in place, projects like [MatrixRooms.info](https://matrixrooms.info/) (made by [etke.cc](https://etke.cc/)) and potentially others in the future, can discover, index the metadata (room address, title, topic, number of users, etc.) and make public rooms browsable & searchable across the whole Matrix Federation. It'd be great if users joining Matrix could more easily find interesting communities that match their interests!
|
|
||||||
|
|
||||||
On the **media side of things**, besides Jitsi getting better Matrix integration (via the aforementioned Matrix User Verification Service), we've also had some [Coturn security tightening](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#backward-compatibility-tightening-coturn-security-can-lead-to-connectivity-issues) as well as [performance optimizations](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md#coturn-can-now-use-host-networking) for configurations exposing lots of network ports.
|
|
||||||
|
|
||||||
[Element Call](https://github.com/element-hq/element-call) seems to have become a nice and polished product lately (as proclaimed in [The Matrix Holiday Update 2023](https://matrix.org/blog/2023/12/25/the-matrix-holiday-update-2023/)), so 2024 is likely the year we'll see support for it in the playbook. Element Call depends on the [LiveKit](https://livekit.io/) streaming server (which is also useful to developers even by itself), so the first step is likely to see LiveKit support in mash-playbook via a reusable Ansible role. Such a LiveKit Ansible role could later easily land in matrix-docker-ansible-deploy and an Element Call static website could be hooked to it.
|
|
||||||
|
|
||||||
Besides these highlights, there were many other relatively large changes announced in our [CHANGELOG](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/850078b7e37401ce91a0f9b686f60b945f6c3a96/CHANGELOG.md) and hundreds of other more minor (but still important) playbook changes that didn't get a mention.
|
|
||||||
|
|
||||||
We have **hundreds of contributors to thank for their hard work** on making Matrix self-hosting better for all of us! It should be noted that **support comes in many shapes**, not only in raw code commits and financial help (via [donations](https://liberapay.com/s.pantaleev) or using the [etke.cc managed Matrix hosting service](https://etke.cc/) which is based on matrix-docker-ansible-deploy). It also comes in the shape of code reviews, helping others with [issues](https://github.com/spantaleev/matrix-docker-ansible-deploy/issues), reporting new issues, participating in our support room on Matrix ([#matrix-docker-ansible-deploy:devture.com](https://matrix.to/#/#matrix-docker-ansible-deploy:devture.com)), etc. To everyone who has been there to make matrix-docker-ansible-deploy better in 2023, thank you! 🙇♂️
|
|
||||||
|
|
||||||
|
|
||||||
# 2022
|
|
||||||
|
|
||||||
For [matrix-docker-ansible-deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy/), 2022 started with **breaking the** [**Synapse**](https://github.com/element-hq/synapse) **monopoly** by [adding support](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#dendrite-support) for the [Dendrite](https://github.com/matrix-org/dendrite) Matrix homeserver in early January. This required various internal changes so that the [Ansible](https://www.ansible.com/) playbook would not be Synapse-centric anymore. This groundwork paved the way for continuing in this direction and we [added support](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#conduit-support) for [Conduit](https://conduit.rs/) in August.
|
|
||||||
|
|
||||||
When it comes to the `matrix-docker-ansible-deploy` Ansible playbook, 2022 was the year of the non-Synapse homeserver implementation. In practice, none of these homeserver implementations seem ready for prime-time yet and there is no migration path when coming from Synapse. Having done our job of adding support for these alternative homeserver implementations, we can say that we're not getting in the way of future progress. It's time for the Dendrite developers to push harder (development-wise) and for the Synapse developers to take a well-deserved long (infinite) break, and we may get to see more people migrating away from Synapse in the next year(s).
|
|
||||||
|
|
||||||
Support for the following new **bridges** was added:
|
|
||||||
|
|
||||||
* [Postmoogle](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#postmoogle-email-bridge-support) for bi-directional email bridging, which supersedes my old and simplistic [email2matrix](https://github.com/devture/email2matrix) one-way bridge-bot
|
|
||||||
* [mautrix-discord](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#mautrix-discord-support)
|
|
||||||
* [go-skype-bridge](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#go-skype-bridge-bridging-support)
|
|
||||||
* [matrix-appservice-kakaotalk](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#matrix-appservice-kakaotalk-support)
|
|
||||||
|
|
||||||
Support for the following new **bots** was added:
|
|
||||||
|
|
||||||
* [buscarron bot](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#buscarron-bot-support)
|
|
||||||
* [Honoroit bot](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#honoroit-bot-support)
|
|
||||||
* [matrix-registration-bot](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#matrix-registration-bot-support)
|
|
||||||
* [matrix-hookshot](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#matrix-hookshot-bridging-support)
|
|
||||||
* [maubot](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#maubot-support)
|
|
||||||
|
|
||||||
Support for the following new **components and services** was added:
|
|
||||||
|
|
||||||
* [BorgBackup](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#borg-backup-support)
|
|
||||||
* [Cactus Comments](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#cactus-comments-support)
|
|
||||||
* [Cinny](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#cinny-support) client support
|
|
||||||
* [ntfy](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#ntfy-push-notifications-support) notifications
|
|
||||||
* [matrix-ldap-registration-proxy](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#matrix-ldap-registration-proxy-support)
|
|
||||||
* [matrix\_encryption\_disabler support](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#matrix_encryption_disabler-support)
|
|
||||||
* [synapse-s3-storage-provider](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#synapse-s3-storage-provider-support) to stop the Synapse media store from being a scalability problem. This brought along [another feature](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#synapse-container-image-customization-support) - an easier way to customize the Synapse container image without having to fork and self-build all of it from scratch
|
|
||||||
|
|
||||||
Besides these major user-visible changes, a lot of work also happened **under the hood**:
|
|
||||||
|
|
||||||
* we made [major improvements to Synapse workers](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#potential-backward-compatibility-break-major-improvements-to-synapse-workers) - adding support for stream writers and for running multiple workers of various kinds (federation senders, pushers, background task processing workers, etc.)
|
|
||||||
* we [improved the compatibility of (Synapse + workers) with the rest of the playbook](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#backward-compatibility-break-changing-how-reverse-proxying-to-synapse-works---now-via-a-matrix-synapse-reverse-proxy-companion-service) by introducing a new `matrix-synapse-reverse-proxy-companion-service` service
|
|
||||||
* we started [splitting various Ansible roles out of the Matrix playbook and into independent roles](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#the-playbook-now-uses-external-roles-for-some-things) (e.g. `matrix-postgres` -> [ansible-role-postgres](https://github.com/mother-of-all-self-hosting/ansible-role-postgres)), which could be included in other Ansible playbooks. In fact, these roles already power a few **interesting other sibling playbooks**:
|
|
||||||
* [gitea-docker-ansible-deploy](https://github.com/spantaleev/gitea-docker-ansible-deploy), for deploying a [Gitea](https://gitea.io/) (self-hosted [Git](https://git-scm.com/) service) server
|
|
||||||
* [nextcloud-docker-ansible-deploy](https://github.com/spantaleev/nextcloud-docker-ansible-deploy), for deploying a [Nextcloud](https://nextcloud.com/) groupware server
|
|
||||||
* [vaultwarden-docker-ansible-deploy](https://github.com/spantaleev/vaultwarden-docker-ansible-deploy), for deploying a [Vaultwarden](https://github.com/dani-garcia/vaultwarden) password manager server (unofficial [Bitwarden](https://bitwarden.com/) compatible server)
|
|
||||||
|
|
||||||
These sibling playbooks co-exist nicely with one another due to using [Traefik](https://traefik.io/) for reverse-proxying, instead of trying to overtake the whole server by running their own [nginx](https://nginx.org/) reverse-proxy. Hopefully soon, the Matrix playbook will follow suit and be powered by Traefik by default.
|
|
||||||
|
|
||||||
Last, but not least, to optimize our [etke.cc managed Matrix hosting service](https://etke.cc/)'s performance (but also individual Ansible playbook runs for people self-hosting by themselves using the playbook), we've [improved playbook runtime 2-5x](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/ba09705f7fbaf0108652ecbe209793b1d935eba7/CHANGELOG.md#2x-5x-performance-improvements-in-playbook-runtime) by employing various Ansible tricks.
|
|
@ -1,39 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -euxo pipefail
|
|
||||||
|
|
||||||
# This script rebuilds the mautrix-meta-instagram Ansible role, using the mautrix-meta-messenger role as a source.
|
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
|
||||||
echo "Error: No argument supplied. Please provide the path to the roles/custom directory."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
roles_path=$1
|
|
||||||
|
|
||||||
messenger_role_path=$roles_path/matrix-bridge-mautrix-meta-messenger
|
|
||||||
instagram_role_path=$roles_path/matrix-bridge-mautrix-meta-instagram
|
|
||||||
|
|
||||||
if [ ! -d $messenger_role_path ]; then
|
|
||||||
echo "Cannot find: $messenger_role_path"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d $instagram_role_path ]; then
|
|
||||||
rm -rf $instagram_role_path
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp -ar $messenger_role_path $instagram_role_path
|
|
||||||
|
|
||||||
find "$instagram_role_path" -type f | while read -r file; do
|
|
||||||
sed --in-place 's/matrix_mautrix_meta_messenger_/matrix_mautrix_meta_instagram_/g' "$file"
|
|
||||||
sed --in-place 's/mautrix-meta-messenger/mautrix-meta-instagram/g' "$file"
|
|
||||||
done
|
|
||||||
|
|
||||||
sed --in-place 's/matrix_mautrix_meta_instagram_meta_mode: \(.*\)/matrix_mautrix_meta_instagram_meta_mode: instagram/g' $instagram_role_path/defaults/main.yml
|
|
||||||
sed --in-place 's/matrix_mautrix_meta_instagram_identifier: \(.*\)/matrix_mautrix_meta_instagram_identifier: matrix-mautrix-meta-instagram/g' $instagram_role_path/defaults/main.yml
|
|
||||||
|
|
||||||
echo "# matrix-mautrix-meta-instagram" > $instagram_role_path/README.md
|
|
||||||
echo "" >> $instagram_role_path/README.md
|
|
||||||
echo "This bridge role is derived from the matrix-mautrix-meta-messenger Ansible role via automatic changes (see \`just rebuild-mautrix-meta-instagram\` or \`bin/rebuild-mautrix-meta-instagram.sh\`)." >> $instagram_role_path/README.md
|
|
||||||
echo "" >> $instagram_role_path/README.md
|
|
||||||
echo "If you'd like to make a change to this role, consider making it to the \`matrix-mautrix-meta-messenger\` role instead." >> $instagram_role_path/README.md
|
|
@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
This playbook is meant to be run using [Ansible](https://www.ansible.com/).
|
This playbook is meant to be run using [Ansible](https://www.ansible.com/).
|
||||||
|
|
||||||
Ansible typically runs on your local computer and carries out tasks on a remote server. If your local computer cannot run Ansible, you can also run Ansible on some server somewhere (including the server you wish to install to).
|
Ansible typically runs on your local computer and carries out tasks on a remote server.
|
||||||
|
If your local computer cannot run Ansible, you can also run Ansible on some server somewhere (including the server you wish to install to).
|
||||||
|
|
||||||
|
|
||||||
## Supported Ansible versions
|
## Supported Ansible versions
|
||||||
@ -12,7 +13,8 @@ To manually check which version of Ansible you're on, run: `ansible --version`.
|
|||||||
|
|
||||||
For the **best experience**, we recommend getting the **latest version of Ansible available**.
|
For the **best experience**, we recommend getting the **latest version of Ansible available**.
|
||||||
|
|
||||||
We're not sure what's the minimum version of Ansible that can run this playbook successfully. The lowest version that we've confirmed (on 2022-11-26) to be working fine is: `ansible-core` (`2.11.7`) combined with `ansible` (`4.10.0`).
|
We're not sure what's the minimum version of Ansible that can run this playbook successfully.
|
||||||
|
The lowest version that we've confirmed (on 2022-11-26) to be working fine is: `ansible-core` (`2.11.7`) combined with `ansible` (`4.10.0`).
|
||||||
|
|
||||||
If your distro ships with an Ansible version older than this, you may run into issues. Consider [Upgrading Ansible](#upgrading-ansible) or [using Ansible via Docker](#using-ansible-via-docker).
|
If your distro ships with an Ansible version older than this, you may run into issues. Consider [Upgrading Ansible](#upgrading-ansible) or [using Ansible via Docker](#using-ansible-via-docker).
|
||||||
|
|
||||||
@ -28,7 +30,8 @@ Depending on your distribution, you may be able to upgrade Ansible in a few diff
|
|||||||
If using the `pip` method, do note that the `ansible-playbook` binary may not be on the `$PATH` (https://linuxconfig.org/linux-path-environment-variable), but in some more special location like `/usr/local/bin/ansible-playbook`. You may need to invoke it using the full path.
|
If using the `pip` method, do note that the `ansible-playbook` binary may not be on the `$PATH` (https://linuxconfig.org/linux-path-environment-variable), but in some more special location like `/usr/local/bin/ansible-playbook`. You may need to invoke it using the full path.
|
||||||
|
|
||||||
|
|
||||||
**Note**: Both of the above methods are a bad way to run system software such as Ansible. If you find yourself needing to resort to such hacks, please consider reporting a bug to your distribution and/or switching to a sane distribution, which provides up-to-date software.
|
**Note**: Both of the above methods are a bad way to run system software such as Ansible.
|
||||||
|
If you find yourself needing to resort to such hacks, please consider reporting a bug to your distribution and/or switching to a sane distribution, which provides up-to-date software.
|
||||||
|
|
||||||
|
|
||||||
## Using Ansible via Docker
|
## Using Ansible via Docker
|
||||||
@ -42,7 +45,8 @@ You can either [run Ansible in a container on the Matrix server itself](#running
|
|||||||
|
|
||||||
### Running Ansible in a container on the Matrix server itself
|
### Running Ansible in a container on the Matrix server itself
|
||||||
|
|
||||||
To run Ansible in a (Docker) container on the Matrix server itself, you need to have a working Docker installation. Docker is normally installed by the playbook, so this may be a bit of a chicken and egg problem. To solve it:
|
To run Ansible in a (Docker) container on the Matrix server itself, you need to have a working Docker installation.
|
||||||
|
Docker is normally installed by the playbook, so this may be a bit of a chicken and egg problem. To solve it:
|
||||||
|
|
||||||
- you **either** need to install Docker manually first. Follow [the upstream instructions](https://docs.docker.com/engine/install/) for your distribution and consider setting `matrix_playbook_docker_installation_enabled: false` in your `vars.yml` file, to prevent the playbook from installing Docker
|
- you **either** need to install Docker manually first. Follow [the upstream instructions](https://docs.docker.com/engine/install/) for your distribution and consider setting `matrix_playbook_docker_installation_enabled: false` in your `vars.yml` file, to prevent the playbook from installing Docker
|
||||||
- **or** you need to run the playbook in another way (e.g. [Running Ansible in a container on another computer (not the Matrix server)](#running-ansible-in-a-container-on-another-computer-not-the-matrix-server)) at least the first time around
|
- **or** you need to run the playbook in another way (e.g. [Running Ansible in a container on another computer (not the Matrix server)](#running-ansible-in-a-container-on-another-computer-not-the-matrix-server)) at least the first time around
|
||||||
@ -50,7 +54,6 @@ To run Ansible in a (Docker) container on the Matrix server itself, you need to
|
|||||||
Once you have a working Docker installation on the server, **clone the playbook** somewhere on the server and configure it as per usual (`inventory/hosts`, `inventory/host_vars/..`, etc.), as described in [configuring the playbook](configuring-playbook.md).
|
Once you have a working Docker installation on the server, **clone the playbook** somewhere on the server and configure it as per usual (`inventory/hosts`, `inventory/host_vars/..`, etc.), as described in [configuring the playbook](configuring-playbook.md).
|
||||||
|
|
||||||
You would then need to add `ansible_connection=community.docker.nsenter` to the host line in `inventory/hosts`. This tells Ansible to connect to the "remote" machine by switching Linux namespaces with [nsenter](https://man7.org/linux/man-pages/man1/nsenter.1.html), instead of using SSH.
|
You would then need to add `ansible_connection=community.docker.nsenter` to the host line in `inventory/hosts`. This tells Ansible to connect to the "remote" machine by switching Linux namespaces with [nsenter](https://man7.org/linux/man-pages/man1/nsenter.1.html), instead of using SSH.
|
||||||
|
|
||||||
Alternatively, you can leave your `inventory/hosts` as is and specify the connection type in **each** `ansible-playbook` call you do later, like this: `ansible-playbook --connection=community.docker.nsenter ...`
|
Alternatively, you can leave your `inventory/hosts` as is and specify the connection type in **each** `ansible-playbook` call you do later, like this: `ansible-playbook --connection=community.docker.nsenter ...`
|
||||||
|
|
||||||
Run this from the playbook's directory:
|
Run this from the playbook's directory:
|
||||||
@ -62,10 +65,11 @@ docker run -it --rm \
|
|||||||
-w /work \
|
-w /work \
|
||||||
-v `pwd`:/work \
|
-v `pwd`:/work \
|
||||||
--entrypoint=/bin/sh \
|
--entrypoint=/bin/sh \
|
||||||
docker.io/devture/ansible:2.17.0-r0-1
|
docker.io/devture/ansible:2.14.5-r0-0
|
||||||
```
|
```
|
||||||
|
|
||||||
Once you execute the above command, you'll be dropped into a `/work` directory inside a Docker container. The `/work` directory contains the playbook's code.
|
Once you execute the above command, you'll be dropped into a `/work` directory inside a Docker container.
|
||||||
|
The `/work` directory contains the playbook's code.
|
||||||
|
|
||||||
First, consider running `git config --global --add safe.directory /work` to [resolve directory ownership issues](#resolve-directory-ownership-issues).
|
First, consider running `git config --global --add safe.directory /work` to [resolve directory ownership issues](#resolve-directory-ownership-issues).
|
||||||
|
|
||||||
@ -82,12 +86,14 @@ docker run -it --rm \
|
|||||||
-v `pwd`:/work \
|
-v `pwd`:/work \
|
||||||
-v $HOME/.ssh/id_rsa:/root/.ssh/id_rsa:ro \
|
-v $HOME/.ssh/id_rsa:/root/.ssh/id_rsa:ro \
|
||||||
--entrypoint=/bin/sh \
|
--entrypoint=/bin/sh \
|
||||||
docker.io/devture/ansible:2.17.0-r0-1
|
docker.io/devture/ansible:2.14.5-r0-0
|
||||||
```
|
```
|
||||||
|
|
||||||
The above command tries to mount an SSH key (`$HOME/.ssh/id_rsa`) into the container (at `/root/.ssh/id_rsa`). If your SSH key is at a different path (not in `$HOME/.ssh/id_rsa`), adjust that part.
|
The above command tries to mount an SSH key (`$HOME/.ssh/id_rsa`) into the container (at `/root/.ssh/id_rsa`).
|
||||||
|
If your SSH key is at a different path (not in `$HOME/.ssh/id_rsa`), adjust that part.
|
||||||
|
|
||||||
Once you execute the above command, you'll be dropped into a `/work` directory inside a Docker container. The `/work` directory contains the playbook's code.
|
Once you execute the above command, you'll be dropped into a `/work` directory inside a Docker container.
|
||||||
|
The `/work` directory contains the playbook's code.
|
||||||
|
|
||||||
First, consider running `git config --global --add safe.directory /work` to [resolve directory ownership issues](#resolve-directory-ownership-issues).
|
First, consider running `git config --global --add safe.directory /work` to [resolve directory ownership issues](#resolve-directory-ownership-issues).
|
||||||
|
|
||||||
@ -97,7 +103,6 @@ Finally, you execute `ansible-playbook ...` commands as per normal now.
|
|||||||
#### If you don't use SSH keys for authentication
|
#### If you don't use SSH keys for authentication
|
||||||
|
|
||||||
If you don't use SSH keys for authentication, simply remove that whole line (`-v $HOME/.ssh/id_rsa:/root/.ssh/id_rsa:ro`).
|
If you don't use SSH keys for authentication, simply remove that whole line (`-v $HOME/.ssh/id_rsa:/root/.ssh/id_rsa:ro`).
|
||||||
|
|
||||||
To authenticate at your server using a password, you need to add a package. So, when you are in the shell of the ansible docker container (the previously used `docker run -it ...` command), run:
|
To authenticate at your server using a password, you need to add a package. So, when you are in the shell of the ansible docker container (the previously used `docker run -it ...` command), run:
|
||||||
```bash
|
```bash
|
||||||
apk add sshpass
|
apk add sshpass
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
(Adapted from the [upstream project](https://github.com/element-hq/synapse/blob/develop/docs/CAPTCHA_SETUP.md))
|
(Adapted from the [upstream project](https://github.com/matrix-org/synapse/blob/develop/docs/CAPTCHA_SETUP.md))
|
||||||
|
|
||||||
# Overview
|
# Overview
|
||||||
Captcha can be enabled for this home server. This file explains how to do that.
|
Captcha can be enabled for this home server. This file explains how to do that.
|
||||||
|
|
||||||
The captcha mechanism used is Google's [ReCaptcha](https://www.google.com/recaptcha/). This requires API keys from Google. If your homeserver is Dendrite then [hCapcha](https://www.hcaptcha.com) can be used instead.
|
The captcha mechanism used is Google's [ReCaptcha](https://www.google.com/recaptcha/). This requires API keys from Google. If your homeserver is Dendrite then [hCapcha](https://www.hcaptcha.com) can be used instead.
|
||||||
|
|
||||||
## ReCaptcha
|
## ReCaptcha
|
||||||
@ -17,7 +16,7 @@ Must be a reCAPTCHA **v2** key using the "I'm not a robot" Checkbox option
|
|||||||
|
|
||||||
### Setting ReCaptcha keys
|
### Setting ReCaptcha keys
|
||||||
|
|
||||||
Once registered as above, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Once registered as above, set the following values:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# for Synapse
|
# for Synapse
|
||||||
|
@ -2,23 +2,25 @@
|
|||||||
|
|
||||||
To set up Matrix on your domain, you'd need to do some DNS configuration.
|
To set up Matrix on your domain, you'd need to do some DNS configuration.
|
||||||
|
|
||||||
To use an identifier like `@<username>:example.com`, you don't actually need to install anything on the actual `example.com` server.
|
To use an identifier like `@<username>:<your-domain>`, you don't actually need
|
||||||
|
to install anything on the actual `<your-domain>` server.
|
||||||
You do, however, need to instruct the Matrix network that Matrix services for `example.com` are delegated over to `matrix.example.com`.
|
|
||||||
|
|
||||||
|
You do, however need to instruct the Matrix network that Matrix services for `<your-domain>` are delegated
|
||||||
|
over to `matrix.<your-domain>`.
|
||||||
As we discuss in [Server Delegation](howto-server-delegation.md), there are 2 different ways to set up such delegation:
|
As we discuss in [Server Delegation](howto-server-delegation.md), there are 2 different ways to set up such delegation:
|
||||||
|
|
||||||
- either by serving a `https://example.com/.well-known/matrix/server` file (from the base domain!)
|
- either by serving a `https://<your-domain>/.well-known/matrix/server` file (from the base domain!)
|
||||||
- or by using a `_matrix._tcp` DNS SRV record (don't confuse this with the `_matrix-identity._tcp` SRV record described below)
|
- or by using a `_matrix._tcp` DNS SRV record (don't confuse this with the `_matrix-identity._tcp` SRV record described below)
|
||||||
|
|
||||||
This playbook mostly discusses the well-known file method, because it's easier to manage with regard to certificates. If you decide to go with the alternative method ([Server Delegation via a DNS SRV record (advanced)](howto-server-delegation.md#server-delegation-via-a-dns-srv-record-advanced)), please be aware that the general flow that this playbook guides you through may not match what you need to do.
|
This playbook mostly discusses the well-known file method, because it's easier to manage with regard to certificates.
|
||||||
|
If you decide to go with the alternative method ([Server Delegation via a DNS SRV record (advanced)](howto-server-delegation.md#server-delegation-via-a-dns-srv-record-advanced)), please be aware that the general flow that this playbook guides you through may not match what you need to do.
|
||||||
|
|
||||||
## DNS settings for services enabled by default
|
## DNS settings for services enabled by default
|
||||||
|
|
||||||
| Type | Host | Priority | Weight | Port | Target |
|
| Type | Host | Priority | Weight | Port | Target |
|
||||||
| ----- | ---------------------------- | -------- | ------ | ---- | ---------------------- |
|
| ----- | ---------------------------- | -------- | ------ | ---- | ---------------------- |
|
||||||
| A | `matrix` | - | - | - | `matrix-server-IP` |
|
| A | `matrix` | - | - | - | `matrix-server-IP` |
|
||||||
| CNAME | `element` | - | - | - | `matrix.example.com` |
|
| CNAME | `element` | - | - | - | `matrix.<your-domain>` |
|
||||||
|
|
||||||
Be mindful as to how long it will take for the DNS records to propagate.
|
Be mindful as to how long it will take for the DNS records to propagate.
|
||||||
|
|
||||||
@ -28,73 +30,70 @@ When you're done configuring DNS, proceed to [Configuring the playbook](configur
|
|||||||
|
|
||||||
## DNS settings for optional services/features
|
## DNS settings for optional services/features
|
||||||
|
|
||||||
| Used by component | Type | Host | Priority | Weight | Port | Target |
|
| Used by component | Type | Host | Priority | Weight | Port | Target |
|
||||||
| -------------------------------------------------------------------------------------------------------------------------- | ----- | ------------------------------ | -------- | ------ | ---- | --------------------------- |
|
| ----------------------------------------------------------------------------------------------------------------------- | ----- | ------------------------------ | -------- | ------ | ---- | --------------------------- |
|
||||||
| [ma1sd](configuring-playbook-ma1sd.md) identity server | SRV | `_matrix-identity._tcp` | 10 | 0 | 443 | `matrix.example.com` |
|
| [ma1sd](configuring-playbook-ma1sd.md) identity server | SRV | `_matrix-identity._tcp` | 10 | 0 | 443 | `matrix.<your-domain>` |
|
||||||
| [Dimension](configuring-playbook-dimension.md) integration server | CNAME | `dimension` | - | - | - | `matrix.example.com` |
|
| [Dimension](configuring-playbook-dimension.md) integration server | CNAME | `dimension` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [Jitsi](configuring-playbook-jitsi.md) video-conferencing platform | CNAME | `jitsi` | - | - | - | `matrix.example.com` |
|
| [Jitsi](configuring-playbook-jitsi.md) video-conferencing platform | CNAME | `jitsi` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [Prometheus/Grafana](configuring-playbook-prometheus-grafana.md) monitoring system | CNAME | `stats` | - | - | - | `matrix.example.com` |
|
| [Prometheus/Grafana](configuring-playbook-prometheus-grafana.md) monitoring system | CNAME | `stats` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [Go-NEB](configuring-playbook-bot-go-neb.md) bot | CNAME | `goneb` | - | - | - | `matrix.example.com` |
|
| [Go-NEB](configuring-playbook-bot-go-neb.md) bot | CNAME | `goneb` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [Sygnal](configuring-playbook-sygnal.md) push notification gateway | CNAME | `sygnal` | - | - | - | `matrix.example.com` |
|
| [Sygnal](configuring-playbook-sygnal.md) push notification gateway | CNAME | `sygnal` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [ntfy](configuring-playbook-ntfy.md) push notifications server | CNAME | `ntfy` | - | - | - | `matrix.example.com` |
|
| [ntfy](configuring-playbook-ntfy.md) push notifications server | CNAME | `ntfy` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [Etherpad](configuring-playbook-etherpad.md) collaborative text editor | CNAME | `etherpad` | - | - | - | `matrix.example.com` |
|
| [Etherpad](configuring-playbook-etherpad.md) collaborative text editor | CNAME | `etherpad` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [Hydrogen](configuring-playbook-client-hydrogen.md) web client | CNAME | `hydrogen` | - | - | - | `matrix.example.com` |
|
| [Hydrogen](configuring-playbook-client-hydrogen.md) web client | CNAME | `hydrogen` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [Cinny](configuring-playbook-client-cinny.md) web client | CNAME | `cinny` | - | - | - | `matrix.example.com` |
|
| [Cinny](configuring-playbook-client-cinny.md) web client | CNAME | `cinny` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [SchildiChat](configuring-playbook-client-schildichat.md) web client | CNAME | `schildichat` | - | - | - | `matrix.example.com` |
|
| [SchildiChat](configuring-playbook-client-schildichat.md) web client | CNAME | `schildichat` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [wsproxy](configuring-playbook-bridge-mautrix-wsproxy.md) sms bridge | CNAME | `wsproxy` | - | - | - | `matrix.example.com` |
|
| [wsproxy](configuring-playbook-bridge-mautrix-wsproxy.md) sms bridge | CNAME | `wsproxy` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [Buscarron](configuring-playbook-bot-buscarron.md) helpdesk bot | CNAME | `buscarron` | - | - | - | `matrix.example.com` |
|
| [Buscarron](configuring-playbook-bot-buscarron.md) helpdesk bot | CNAME | `buscarron` | - | - | - | `matrix.<your-domain>` |
|
||||||
| [rageshake](docs/configuring-playbook-rageshake.md) bug report server | CNAME | `rageshake` | - | - | - | `matrix.example.com` |
|
| [Postmoogle](configuring-playbook-bot-postmoogle.md)/[Email2Matrix](configuring-playbook-email2matrix.md) email bridges | MX | `matrix` | 10 | 0 | - | `matrix.<your-domain>` |
|
||||||
| [Postmoogle](configuring-playbook-bridge-postmoogle.md)/[Email2Matrix](configuring-playbook-email2matrix.md) email bridges | MX | `matrix` | 10 | 0 | - | `matrix.example.com` |
|
| [Postmoogle](configuring-playbook-bot-postmoogle.md) email bridge | TXT | `matrix` | - | - | - | `v=spf1 ip4:<your-ip> -all` |
|
||||||
| [Postmoogle](configuring-playbook-bridge-postmoogle.md) email bridge | TXT | `matrix` | - | - | - | `v=spf1 ip4:<your-ip> -all` |
|
| [Postmoogle](configuring-playbook-bot-postmoogle.md) email bridge | TXT | `_dmarc.matrix` | - | - | - | `v=DMARC1; p=quarantine;` |
|
||||||
| [Postmoogle](configuring-playbook-bridge-postmoogle.md) email bridge | TXT | `_dmarc.matrix` | - | - | - | `v=DMARC1; p=quarantine;` |
|
| [Postmoogle](configuring-playbook-bot-postmoogle.md) email bridge | TXT | `postmoogle._domainkey.matrix` | - | - | - | get it from `!pm dkim` |
|
||||||
| [Postmoogle](configuring-playbook-bridge-postmoogle.md) email bridge | TXT | `postmoogle._domainkey.matrix` | - | - | - | get it from `!pm dkim` |
|
|
||||||
|
|
||||||
When setting up a SRV record, if you are asked for a service and protocol instead of a hostname split the host value from the table where the period is. For example use service as `_matrix-identity` and protocol as `_tcp`.
|
When setting up a SRV record, if you are asked for a service and protocol instead of a hostname split the host value from the table where the period is. For example use service as `_matrix-identity` and protocol as `_tcp`.
|
||||||
|
|
||||||
## Subdomains setup
|
## Subdomains setup
|
||||||
|
|
||||||
As the table above illustrates, you need to create 2 subdomains (`matrix.example.com` and `element.example.com`) and point both of them to your new server's IP address (DNS `A` record or `CNAME` record is fine).
|
As the table above illustrates, you need to create 2 subdomains (`matrix.<your-domain>` and `element.<your-domain>`) and point both of them to your new server's IP address (DNS `A` record or `CNAME` record is fine).
|
||||||
|
|
||||||
The `element.example.com` subdomain may be necessary, because this playbook installs the [Element](https://github.com/element-hq/element-web) web client for you. If you'd rather instruct the playbook not to install Element (`matrix_client_element_enabled: false` when [Configuring the playbook](configuring-playbook.md) later), feel free to skip the `element.example.com` DNS record.
|
The `element.<your-domain>` subdomain may be necessary, because this playbook installs the [Element](https://github.com/vector-im/element-web) web client for you.
|
||||||
|
If you'd rather instruct the playbook not to install Element (`matrix_client_element_enabled: false` when [Configuring the playbook](configuring-playbook.md) later), feel free to skip the `element.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `dimension.example.com` subdomain may be necessary, because this playbook could install the [Dimension integration manager](http://dimension.t2bot.io/) for you. The installation of Dimension is disabled by default, because it's only possible to install it after the other Matrix services are working (see [Setting up Dimension integration manager](configuring-playbook-dimension.md) later). If you do not wish to set up Dimension, feel free to skip the `dimension.example.com` DNS record.
|
The `dimension.<your-domain>` subdomain may be necessary, because this playbook could install the [Dimension integrations manager](http://dimension.t2bot.io/) for you. Dimension installation is disabled by default, because it's only possible to install it after the other Matrix services are working (see [Setting up Dimension](configuring-playbook-dimension.md) later). If you do not wish to set up Dimension, feel free to skip the `dimension.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `jitsi.example.com` subdomain may be necessary, because this playbook could install the [Jitsi video-conferencing platform](https://jitsi.org/) for you. The installation of Jitsi is disabled by default, because it may be heavy and is not a core required component. To learn how to install it, see our [Jitsi](configuring-playbook-jitsi.md) guide. If you do not wish to set up Jitsi, feel free to skip the `jitsi.example.com` DNS record.
|
The `jitsi.<your-domain>` subdomain may be necessary, because this playbook could install the [Jitsi video-conferencing platform](https://jitsi.org/) for you. Jitsi installation is disabled by default, because it may be heavy and is not a core required component. To learn how to install it, see our [Jitsi](configuring-playbook-jitsi.md) guide. If you do not wish to set up Jitsi, feel free to skip the `jitsi.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `stats.example.com` subdomain may be necessary, because this playbook could install [Grafana](https://grafana.com/) and setup performance metrics for you. The installation of Grafana is disabled by default, it is not a core required component. To learn how to install it, see our [metrics and graphs guide](configuring-playbook-prometheus-grafana.md). If you do not wish to set up Grafana, feel free to skip the `stats.example.com` DNS record. It is possible to install Prometheus without installing Grafana, this would also not require the `stats.example.com` subdomain.
|
The `stats.<your-domain>` subdomain may be necessary, because this playbook could install [Grafana](https://grafana.com/) and setup performance metrics for you. Grafana installation is disabled by default, it is not a core required component. To learn how to install it, see our [metrics and graphs guide](configuring-playbook-prometheus-grafana.md). If you do not wish to set up Grafana, feel free to skip the `stats.<your-domain>` DNS record. It is possible to install Prometheus without installing Grafana, this would also not require the `stats.<your-domain>` subdomain.
|
||||||
|
|
||||||
The `goneb.example.com` subdomain may be necessary, because this playbook could install the [Go-NEB](https://github.com/matrix-org/go-neb) bot. The installation of Go-NEB is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Go-NEB guide](configuring-playbook-bot-go-neb.md). If you do not wish to set up Go-NEB, feel free to skip the `goneb.example.com` DNS record.
|
The `goneb.<your-domain>` subdomain may be necessary, because this playbook could install the [Go-NEB](https://github.com/matrix-org/go-neb) bot. The installation of Go-NEB is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Go-NEB guide](configuring-playbook-bot-go-neb.md). If you do not wish to set up Go-NEB, feel free to skip the `goneb.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `sygnal.example.com` subdomain may be necessary, because this playbook could install the [Sygnal](https://github.com/matrix-org/sygnal) push gateway. The installation of Sygnal is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Sygnal guide](configuring-playbook-sygnal.md). If you do not wish to set up Sygnal (you probably don't, unless you're also developing/building your own Matrix apps), feel free to skip the `sygnal.example.com` DNS record.
|
The `sygnal.<your-domain>` subdomain may be necessary, because this playbook could install the [Sygnal](https://github.com/matrix-org/sygnal) push gateway. The installation of Sygnal is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Sygnal guide](configuring-playbook-sygnal.md). If you do not wish to set up Sygnal (you probably don't, unless you're also developing/building your own Matrix apps), feel free to skip the `sygnal.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `ntfy.example.com` subdomain may be necessary, because this playbook could install the [ntfy](https://ntfy.sh/) UnifiedPush-compatible push notifications server. The installation of ntfy is disabled by default, it is not a core required component. To learn how to install it, see our [configuring ntfy guide](configuring-playbook-ntfy.md). If you do not wish to set up ntfy, feel free to skip the `ntfy.example.com` DNS record.
|
The `ntfy.<your-domain>` subdomain may be necessary, because this playbook could install the [ntfy](https://ntfy.sh/) UnifiedPush-compatible push notifications server. The installation of ntfy is disabled by default, it is not a core required component. To learn how to install it, see our [configuring ntfy guide](configuring-playbook-ntfy.md). If you do not wish to set up ntfy, feel free to skip the `ntfy.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `etherpad.example.com` subdomain may be necessary, because this playbook could install the [Etherpad](https://etherpad.org/) a highly customizable open source online editor providing collaborative editing in really real-time. The installation of Etherpad is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Etherpad guide](configuring-playbook-etherpad.md). If you do not wish to set up Etherpad, feel free to skip the `etherpad.example.com` DNS record.
|
The `etherpad.<your-domain>` subdomain may be necessary, because this playbook could install the [Etherpad](https://etherpad.org/) a highly customizable open source online editor providing collaborative editing in really real-time. The installation of etherpad is disabled by default, it is not a core required component. To learn how to install it, see our [configuring etherpad guide](configuring-playbook-etherpad.md). If you do not wish to set up etherpad, feel free to skip the `etherpad.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `hydrogen.example.com` subdomain may be necessary, because this playbook could install the [Hydrogen](https://github.com/element-hq/hydrogen-web) web client. The installation of Hydrogen is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Hydrogen guide](configuring-playbook-client-hydrogen.md). If you do not wish to set up Hydrogen, feel free to skip the `hydrogen.example.com` DNS record.
|
The `hydrogen.<your-domain>` subdomain may be necessary, because this playbook could install the [Hydrogen](https://github.com/vector-im/hydrogen-web) web client. The installation of Hydrogen is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Hydrogen guide](configuring-playbook-client-hydrogen.md). If you do not wish to set up Hydrogen, feel free to skip the `hydrogen.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `cinny.example.com` subdomain may be necessary, because this playbook could install the [Cinny](https://github.com/ajbura/cinny) web client. The installation of Cinny is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Cinny guide](configuring-playbook-client-cinny.md). If you do not wish to set up Cinny, feel free to skip the `cinny.example.com` DNS record.
|
The `cinny.<your-domain>` subdomain may be necessary, because this playbook could install the [Cinny](https://github.com/ajbura/cinny) web client. The installation of cinny is disabled by default, it is not a core required component. To learn how to install it, see our [configuring cinny guide](configuring-playbook-client-cinny.md). If you do not wish to set up cinny, feel free to skip the `cinny.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `schildichat.example.com` subdomain may be necessary, because this playbook could install the [SchildiChat](https://github.com/SchildiChat/schildichat-desktop) web client. The installation of SchildiChat is disabled by default, it is not a core required component. To learn how to install it, see our [configuring SchildiChat guide](configuring-playbook-client-schildichat.md). If you do not wish to set up SchildiChat, feel free to skip the `schildichat.example.com` DNS record.
|
The `wsproxy.<your-domain>` subdomain may be necessary, because this playbook could install the [wsproxy](https://github.com/mautrix/wsproxy) web client. The installation of wsproxy is disabled by default, it is not a core required component. To learn how to install it, see our [configuring wsproxy guide](configuring-playbook-bridge-mautrix-wsproxy.md). If you do not wish to set up wsproxy, feel free to skip the `wsproxy.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `wsproxy.example.com` subdomain may be necessary, because this playbook could install the [wsproxy](https://github.com/mautrix/wsproxy) web client. The installation of wsproxy is disabled by default, it is not a core required component. To learn how to install it, see our [configuring wsproxy guide](configuring-playbook-bridge-mautrix-wsproxy.md). If you do not wish to set up wsproxy, feel free to skip the `wsproxy.example.com` DNS record.
|
The `buscarron.<your-domain>` subdomain may be necessary, because this playbook could install the [buscarron](https://gitlab.com/etke.cc/buscarron) bot. The installation of buscarron is disabled by default, it is not a core required component. To learn how to install it, see our [configuring buscarron guide](configuring-playbook-bot-buscarron.md). If you do not wish to set up buscarron, feel free to skip the `buscarron.<your-domain>` DNS record.
|
||||||
|
|
||||||
The `buscarron.example.com` subdomain may be necessary, because this playbook could install the [Buscarron](https://github.com/etkecc/buscarron) bot. The installation of Buscarron is disabled by default, it is not a core required component. To learn how to install it, see our [configuring Buscarron guide](configuring-playbook-bot-buscarron.md). If you do not wish to set up Buscarron, feel free to skip the `buscarron.example.com` DNS record.
|
|
||||||
|
|
||||||
The `rageshake.example.com` subdomain may be necessary, because this playbook could install the [rageshake](https://github.com/matrix-org/rageshake) bug report server. The installation of rageshake is disabled by default, it is not a core required component. To learn how to install it, see our [configuring rageshake guide](configuring-playbook-rageshake.md). If you do not wish to set up rageshake, feel free to skip the `rageshake.example.com` DNS record.
|
|
||||||
|
|
||||||
## `_matrix-identity._tcp` SRV record setup
|
## `_matrix-identity._tcp` SRV record setup
|
||||||
|
|
||||||
To make the [ma1sd](https://github.com/ma1uta/ma1sd) Identity Server (which this playbook may optionally install for you) enable its federation features, set up an SRV record that looks like this:
|
To make the [ma1sd](https://github.com/ma1uta/ma1sd) Identity Server (which this playbook may optionally install for you) enable its federation features, set up an SRV record that looks like this:
|
||||||
- Name: `_matrix-identity._tcp` (use this text as-is)
|
- Name: `_matrix-identity._tcp` (use this text as-is)
|
||||||
- Content: `10 0 443 matrix.example.com` (replace `example.com` with your own)
|
- Content: `10 0 443 matrix.<your-domain>` (replace `<your-domain>` with your own)
|
||||||
|
|
||||||
This is an optional feature for the optionally-installed [ma1sd service](configuring-playbook-ma1sd.md). See [ma1sd's documentation](https://github.com/ma1uta/ma1sd/wiki/mxisd-and-your-privacy#choices-are-never-easy) for information on the privacy implications of setting up this SRV record.
|
This is an optional feature for the optionally-installed [ma1sd service](configuring-playbook-ma1sd.md). See [ma1sd's documentation](https://github.com/ma1uta/ma1sd/wiki/mxisd-and-your-privacy#choices-are-never-easy) for information on the privacy implications of setting up this SRV record.
|
||||||
|
|
||||||
**Note**: This `_matrix-identity._tcp` SRV record for the identity server is different from the `_matrix._tcp` that can be used for Synapse delegation. See [howto-server-delegation.md](howto-server-delegation.md) for more information about delegation.
|
Note: This `_matrix-identity._tcp` SRV record for the identity server is different from the `_matrix._tcp` that can be used for Synapse delegation. See [howto-server-delegation.md](howto-server-delegation.md) for more information about delegation.
|
||||||
|
|
||||||
When you're done with the DNS configuration and ready to proceed, continue with [Getting the playbook](getting-the-playbook.md).
|
When you're done with the DNS configuration and ready to proceed, continue with [Getting the playbook](getting-the-playbook.md).
|
||||||
|
|
||||||
## `_dmarc`, `postmoogle._domainkey` TXT and `matrix` MX records setup
|
## `_dmarc`, `postmoogle._domainkey` TXT and `matrix` MX records setup
|
||||||
|
|
||||||
To make the [postmoogle](configuring-playbook-bridge-postmoogle.md) email bridge enable its email sending features, you need to configure SPF (TXT), DMARC (TXT), DKIM (TXT) and MX records
|
To make the [postmoogle](configuring-playbook-bot-postmoogle.md) email bridge enable its email sending features, you need to configure
|
||||||
|
SPF (TXT), DMARC (TXT), DKIM (TXT) and MX records
|
||||||
|
@ -1,107 +0,0 @@
|
|||||||
# Setting up Prometheus Alertmanager integration via matrix-alertmanager-receiver (optional)
|
|
||||||
|
|
||||||
The playbook can install and configure the [matrix-alertmanager-receiver](https://github.com/metio/matrix-alertmanager-receiver) service for you. It's a [client](https://prometheus.io/docs/alerting/latest/clients/) for Prometheus' [Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/), allowing you to deliver alerts to Matrix rooms.
|
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/metio/matrix-alertmanager-receiver) to learn more about what this component does and why it might be useful to you.
|
|
||||||
|
|
||||||
At the moment, **setting up this service's bot requires some manual actions** as described below in [Account and room preparation](#account-and-room-preparation).
|
|
||||||
|
|
||||||
This service is meant to be used with an external [Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/) instance. It's **not** meant to be integrated with the [Prometheus & Grafana stack](./configuring-playbook-prometheus-grafana.md) installed by this playbook, because the Alertmanager component is not installed by it.
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable matrix-alertmanager-receiver, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
matrix_alertmanager_receiver_enabled: true
|
|
||||||
|
|
||||||
# If you'd like to change the username for this bot, uncomment and adjust. Otherwise, remove.
|
|
||||||
# matrix_alertmanager_receiver_config_matrix_user_id_localpart: "bot.alertmanager.receiver"
|
|
||||||
|
|
||||||
# Specify the bot user's access token here.
|
|
||||||
# See the "Account and room preparation" section below.
|
|
||||||
matrix_alertmanager_receiver_config_matrix_access_token: ''
|
|
||||||
|
|
||||||
# Optionally, configure some mappings (URL-friendly room name -> actual Matrix room ID).
|
|
||||||
#
|
|
||||||
# If you don't configure mappings, you can still deliver alerts using URLs like this:
|
|
||||||
# https://matrix.example.com/matrix-alertmanager-receiver-RANDOM_VALUE_HERE/alert/!qporfwt:example.com
|
|
||||||
#
|
|
||||||
# If a mapping like the one below is configured, you can deliver alerts using friendlier URLs like this:
|
|
||||||
# https://matrix.example.com/matrix-alertmanager-receiver-RANDOM_VALUE_HERE/alert/some-room-name
|
|
||||||
matrix_alertmanager_receiver_config_matrix_room_mapping:
|
|
||||||
some-room-name: "!qporfwt:{{ matrix_domain }}"
|
|
||||||
```
|
|
||||||
|
|
||||||
See `roles/custom/matrix-alertmanager-receiver/defaults/main.yml` for additional configuration variables.
|
|
||||||
|
|
||||||
### Adjusting the matrix-alertmanager-receiver URL
|
|
||||||
|
|
||||||
By default, this playbook installs matrix-alertmanager-receiver on the `matrix.` subdomain, at the `/matrix-alertmanager-receiver` path (https://matrix.example.com/matrix-alertmanager-receiver). This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_alertmanager_receiver_hostname` and `matrix_alertmanager_receiver_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix
|
|
||||||
matrix_alertmanager_receiver_hostname: alertmanager.example.com
|
|
||||||
matrix_alertmanager_receiver_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the matrix-alertmanager-receiver domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
## Account and room preparation
|
|
||||||
|
|
||||||
The playbook can automatically create users, but it cannot automatically obtain access tokens, nor perform any of the other manual actions below.
|
|
||||||
|
|
||||||
`matrix-alertmanager-receiver` uses a bot (with a username specified in `matrix_alertmanager_receiver_config_matrix_user_id_localpart` - see above) for delivering messages. You need to **manually register this bot acccount and obtain an access token for it**.
|
|
||||||
|
|
||||||
1. [Register a new user](registering-users.md): `ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=bot.alertmanager.receiver password=PASSWORD_FOR_THE_BOT admin=no' --tags=register-user`
|
|
||||||
2. [Obtain an access token](obtaining-access-tokens.md) for the bot's user account
|
|
||||||
3. Invite the bot to a room where you'd like to alerts to be delivered
|
|
||||||
4. Log in as the bot using any Matrix client of your choosing, accept the room invitation from the bot's account and log out
|
|
||||||
5. (Optionally) Adjust `matrix_alertmanager_receiver_config_matrix_room_mapping` to create a mapping between the new room and its ID
|
|
||||||
|
|
||||||
Steps 1 and 2 above only need to be done once, while preparing your [configuration](#adjusting-the-playbook-configuration).
|
|
||||||
|
|
||||||
Steps 3 and 4 need to be done for each new room you'd like the bot to deliver alerts to. Step 5 is optional and provides cleaner `/alert/` URLs.
|
|
||||||
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
Now that you've [prepared the bot account and room](#account-and-room-preparation), [configured the playbook](#adjusting-the-playbook-configuration), and potentially [adjusted your DNS records](#adjusting-dns-records), you can run the [installation](installing.md) command: `just install-all`
|
|
||||||
|
|
||||||
Then, you can proceed to [Usage](#usage).
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Configure your Prometheus Alertmanager with configuration like this:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
receivers:
|
|
||||||
- name: matrix
|
|
||||||
webhook_configs:
|
|
||||||
- send_resolved: true
|
|
||||||
url: URL_HERE
|
|
||||||
route:
|
|
||||||
group_by:
|
|
||||||
- namespace
|
|
||||||
group_interval: 5m
|
|
||||||
group_wait: 30s
|
|
||||||
receiver: "matrix"
|
|
||||||
repeat_interval: 12h
|
|
||||||
routes:
|
|
||||||
- receiver: matrix
|
|
||||||
```
|
|
||||||
|
|
||||||
.. where `URL_HERE` looks like `https://matrix.example.com/matrix-alertmanager-receiver-RANDOM_VALUE_HERE/alert/some-room-name` or `https://matrix.example.com/matrix-alertmanager-receiver-RANDOM_VALUE_HERE/alert/!qporfwt:example.com`.
|
|
||||||
|
|
||||||
This bot does **not** accept room invitations automatically (like many other bots do). To deliver messages to rooms, **the bot must be joined to all rooms manually** - see Step 4 of the [Account and room preparation](#account-and-room-preparation) section.
|
|
@ -1,23 +0,0 @@
|
|||||||
# Setting up Appservice Double Puppet (optional)
|
|
||||||
|
|
||||||
Appservice Double Puppet is a homeserver appservice through which bridges (and potentially other services) can impersonate any user on the homeserver.
|
|
||||||
|
|
||||||
This is useful for performing [double-puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) via the [appservice method](https://docs.mau.fi/bridges/general/double-puppeting.html#appservice-method-new). The Appservice Double Puppet service is an implementation of this approach.
|
|
||||||
|
|
||||||
Previously, bridges supported performing [double-puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) with the help of the [Shared Secret Auth password provider module](./configuring-playbook-shared-secret-auth.md), but this old and hacky solution has been superseded by this Appservice Double Puppet method.
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the Appservice Double Puppet service, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
matrix_appservice_double_puppet_enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
When enabled, double puppeting will automatically be enabled for all bridges that support double puppeting via the appservice method.
|
|
@ -1,99 +0,0 @@
|
|||||||
# Setting up Draupnir for All/D4A (optional)
|
|
||||||
|
|
||||||
The playbook can install and configure the [Draupnir](https://github.com/the-draupnir-project/Draupnir) moderation tool for you in appservice mode.
|
|
||||||
|
|
||||||
Appservice mode can be used together with the regular [Draupnir bot](configuring-playbook-bot-draupnir.md) or independently. Details about the differences between the 2 modes are described below.
|
|
||||||
|
|
||||||
|
|
||||||
## Draupnir Appservice mode compared to Draupnir bot mode
|
|
||||||
|
|
||||||
The administrative functions for managing the appservice are alpha quality and very limited. However, the experience of using an appservice-provisioned Draupnir is on par with the experience of using Draupnir from bot mode except in the case of avatar customisation as described later on in this document.
|
|
||||||
|
|
||||||
Draupnir for all is the way to go if you need more than 1 Draupnir instance, but you don't need access to Synapse Admin features as they are not accessible through Draupnir for All (Even though the commands do show up in help).
|
|
||||||
|
|
||||||
Draupnir for all in the playbook is rate-limit-exempt automatically as its appservice configuration file does not specify any rate limits.
|
|
||||||
|
|
||||||
Normal Draupnir does come with the benefit of access to Synapse Admin features. You are also able to more easily customise your normal Draupnir than D4A as D4A even on the branch with the Avatar command (To be Upstreamed to Mainline Draupnir) that command is clunky as it requires the use of things like Element devtools. In normal draupnir this is a quick operation where you login to Draupnir with a normal client and set Avatar and Display name normally.
|
|
||||||
|
|
||||||
Draupnir for all does not support external tooling like [MRU](https://mru.rory.gay) as it can't access Draupnir's user account.
|
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
### 1. Create a main management room.
|
|
||||||
|
|
||||||
The playbook does not create a management room for your Main Draupnir. This task you have to do on your own.
|
|
||||||
|
|
||||||
The management room has to be given an alias and be public when you are setting up the bot for the first time as the bot does not differentiate between invites and invites to the management room.
|
|
||||||
|
|
||||||
This management room is used to control who has access to your D4A deployment. The room stores this data inside of the control room state so your bot must have sufficient powerlevel to send custom state events. This is default 50 or moderator as Element calls this powerlevel.
|
|
||||||
|
|
||||||
As noted in the Draupnir install instructions the control room is sensitive. The following is said about the control room in the Draupnir install instructions.
|
|
||||||
>Anyone in this room can control the bot so it is important that you only invite trusted users to this room. The room must be unencrypted since the playbook does not support installing Pantalaimon yet.
|
|
||||||
|
|
||||||
### 2. Give your main management room an alias.
|
|
||||||
|
|
||||||
Give the room from step 1 an alias. This alias can be anything you want and its recommended for increased security during the setup phase of the bot that you make this alias be a random string. You can give your room a secondary human readable alias when it has been locked down after setup phase.
|
|
||||||
|
|
||||||
### 3. Adjusting the playbook configuration.
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
|
||||||
|
|
||||||
You must replace `ALIAS_FROM_STEP_2_GOES_HERE` with the alias you created in step 2.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_appservice_draupnir_for_all_enabled: true
|
|
||||||
|
|
||||||
matrix_appservice_draupnir_for_all_master_control_room_alias: "ALIAS_FROM_STEP_2_GOES_HERE"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 4. Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
|
||||||
|
|
||||||
```
|
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
If you made it through all the steps above and your main control room was joined by a user called `@draupnir-main:example.com` you have succesfully installed Draupnir for All and can now start using it.
|
|
||||||
|
|
||||||
The installation of Draupnir for all in this playbook is very much Alpha quality. Usage-wise, Draupnir for allis almost identical to Draupnir bot mode.
|
|
||||||
|
|
||||||
### 1. Granting Users the ability to use D4A
|
|
||||||
|
|
||||||
Draupnir for all includes several security measures like that it only allows users that are on its allow list to ask for a bot. To add a user to this list we have 2 primary options. Using the chat to tell Draupnir to do this for us or if you want to automatically do it by sending `m.policy.rule.user` events that target the subject you want to allow provisioning for with the `org.matrix.mjolnir.allow` recomendation. Using the chat is recomended.
|
|
||||||
|
|
||||||
The bot requires a powerlevel of 50 in the management room to control who is allowed to use the bot. The bot does currently not say anything if this is true or false. (This is considered a bug and is documented in issue [#297](https://github.com/the-draupnir-project/Draupnir/issues/297))
|
|
||||||
|
|
||||||
To allow users or whole homeservers you type /plain @draupnir-main:example.com allow `target` and target can be either a MXID or a wildcard like `@*:example.com` to allow all users on example.com to register. We use /plain to force the client to not attempt to mess with this command as it can break Wildcard commands especially.
|
|
||||||
|
|
||||||
### 2. How to provision a D4A once you are allowed to.
|
|
||||||
|
|
||||||
Open a DM with @draupnir-main:example.com and if using Element send a message into this DM to finalise creating it. The bot will reject this invite and you will shortly get invited to the Draupnir control room for your newly provisioned Draupnir. From here its just a normal Draupnir experience.
|
|
||||||
|
|
||||||
Congratulations if you made it all the way here because you now have a fully working Draupnir for all deployment.
|
|
||||||
|
|
||||||
### Configuration of D4A
|
|
||||||
|
|
||||||
You can refer to the upstream [documentation](https://github.com/the-draupnir-project/Draupnir) for more configuration documentation. Please note that the playbook ships a full copy of the example config that does transfer to provisioned draupnirs in the production-bots.yaml.j2 file in the template directory of the role.
|
|
||||||
|
|
||||||
Please note that Config extension does not affect the appservices config as this config is not extensible in current Draupnir anyways. Config extension instead touches the config passed to the Draupnirs that your Appservice creates. So for example below makes all provisioned Draupnirs protect all joined rooms.
|
|
||||||
|
|
||||||
You can configure additional options by adding the `matrix_appservice_draupnir_for_all_extension_yaml` variable to your `inventory/host_vars/matrix.example.com/vars.yml` file.
|
|
||||||
|
|
||||||
For example to change draupnir's `protectAllJoinedRooms` option to `true` you would add the following to your `vars.yml` file.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_appservice_draupnir_for_all_extension_yaml: |
|
|
||||||
# Your custom YAML configuration goes here.
|
|
||||||
# This configuration extends the default starting configuration (`matrix_appservice_draupnir_for_all_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_appservice_draupnir_for_all_yaml`.
|
|
||||||
protectAllJoinedRooms: true
|
|
||||||
```
|
|
@ -1,41 +1,41 @@
|
|||||||
# Setting up BorgBackup (optional)
|
# Setting up borg backup (optional)
|
||||||
|
|
||||||
The playbook can install and configure [BorgBackup](https://www.borgbackup.org/) (short: Borg) with [borgmatic](https://torsion.org/borgmatic/) for you.
|
The playbook can install and configure [borgbackup](https://www.borgbackup.org/) with [borgmatic](https://torsion.org/borgmatic/) for you.
|
||||||
|
BorgBackup is a deduplicating backup program with optional compression and encryption.
|
||||||
|
That means your daily incremental backups can be stored in a fraction of the space and is safe whether you store it at home or on a cloud service.
|
||||||
|
|
||||||
BorgBackup is a deduplicating backup program with optional compression and encryption. That means your daily incremental backups can be stored in a fraction of the space and is safe whether you store it at home or on a cloud service.
|
You will need a remote server where borg will store the backups. There are hosted, borg compatible solutions available, such as [BorgBase](https://www.borgbase.com).
|
||||||
|
|
||||||
You will need a remote server where BorgBackup will store the backups. There are hosted, BorgBackup compatible solutions available, such as [BorgBase](https://www.borgbase.com).
|
|
||||||
|
|
||||||
The backup will run based on `backup_borg_schedule` var (systemd timer calendar), default: 4am every day.
|
The backup will run based on `backup_borg_schedule` var (systemd timer calendar), default: 4am every day.
|
||||||
|
|
||||||
By default, if you're using the integrated Postgres database server (as opposed to [an external Postgres server](configuring-playbook-external-postgres.md)), backups with BorgBackup will also include dumps of your Postgres database. An alternative solution for backing up the Postgres database is [postgres backup](configuring-playbook-postgres-backup.md). If you decide to go with another solution, you can disable Postgres-backup support for BorgBackup using the `backup_borg_postgresql_enabled` variable.
|
By default, if you're using the integrated Postgres database server (as opposed to [an external Postgres server](configuring-playbook-external-postgres.md)), Borg backups will also include dumps of your Postgres database. An alternative solution for backing up the Postgres database is [postgres backup](configuring-playbook-postgres-backup.md). If you decide to go with another solution, you can disable Postgres-backup support for Borg using the `backup_borg_postgresql_enabled` variable.
|
||||||
|
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
1. Create a new SSH key:
|
1. Create a new SSH key:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh-keygen -t ed25519 -N '' -f matrix-borg-backup -C matrix
|
ssh-keygen -t ed25519 -N '' -f matrix-borg-backup -C matrix
|
||||||
```
|
```
|
||||||
|
|
||||||
This can be done on any machine and you don't need to place the key in the `.ssh` folder. It will be added to the Ansible config later.
|
This can be done on any machine and you don't need to place the key in the `.ssh` folder. It will be added to the Ansible config later.
|
||||||
|
|
||||||
2. Add the **public** part of this SSH key (the `matrix-borg-backup.pub` file) to your BorgBackup provider/server:
|
2. Add the **public** part of this SSH key (the `matrix-borg-backup.pub` file) to your borg provider/server:
|
||||||
|
|
||||||
If you plan to use a hosted solution, follow their instructions. If you have your own server, copy the key over:
|
If you plan to use a hosted solution, follow their instructions. If you have your own server, copy the key over:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# example to append the new PUBKEY contents, where:
|
# example to append the new PUBKEY contents, where:
|
||||||
# PUBKEY is path to the public key,
|
# PUBKEY is path to the public key,
|
||||||
# USER is a ssh user on a provider / server
|
# USER is a ssh user on a provider / server
|
||||||
# HOST is a ssh host of a provider / server
|
# HOST is a ssh host of a provider / server
|
||||||
cat PUBKEY | ssh USER@HOST 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'
|
cat PUBKEY | ssh USER@HOST 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
Minimal working configuration (`inventory/host_vars/matrix.example.com/vars.yml`) to enable BorgBackup:
|
Minimal working configuration (`inventory/host_vars/matrix.DOMAIN/vars.yml`) to enable borg backup:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
backup_borg_enabled: true
|
backup_borg_enabled: true
|
||||||
@ -56,7 +56,7 @@ where:
|
|||||||
|
|
||||||
* USER - SSH user of a provider/server
|
* USER - SSH user of a provider/server
|
||||||
* HOST - SSH host of a provider/server
|
* HOST - SSH host of a provider/server
|
||||||
* REPO - BorgBackup repository name, it will be initialized on backup start, eg: `matrix`, regarding Syntax see [Remote repositories](https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls)
|
* REPO - borg repository name, it will be initialized on backup start, eg: `matrix`, regarding Syntax see [Remote repositories](https://borgbackup.readthedocs.io/en/stable/usage/general.html#repository-urls)
|
||||||
* PASSPHRASE - passphrase used for encrypting backups, you may generate it with `pwgen -s 64 1` or use any password manager
|
* PASSPHRASE - passphrase used for encrypting backups, you may generate it with `pwgen -s 64 1` or use any password manager
|
||||||
* PRIVATE KEY - the content of the **private** part of the SSH key you created before. The whole key (all of its belonging lines) under `backup_borg_ssh_key_private` needs to be indented with 2 spaces
|
* PRIVATE KEY - the content of the **private** part of the SSH key you created before. The whole key (all of its belonging lines) under `backup_borg_ssh_key_private` needs to be indented with 2 spaces
|
||||||
|
|
||||||
@ -64,11 +64,11 @@ To backup without encryption, add `backup_borg_encryption: 'none'` to your vars.
|
|||||||
|
|
||||||
`backup_borg_location_source_directories` defines the list of directories to back up: it's set to `{{ matrix_base_data_path }}` by default, which is the base directory for every service's data, such as Synapse, Postgres and the bridges. You might want to exclude certain directories or file patterns from the backup using the `backup_borg_location_exclude_patterns` variable.
|
`backup_borg_location_source_directories` defines the list of directories to back up: it's set to `{{ matrix_base_data_path }}` by default, which is the base directory for every service's data, such as Synapse, Postgres and the bridges. You might want to exclude certain directories or file patterns from the backup using the `backup_borg_location_exclude_patterns` variable.
|
||||||
|
|
||||||
Check the [backup_borg role](https://github.com/mother-of-all-self-hosting/ansible-role-backup_borg)'s [defaults/main.yml](https://github.com/mother-of-all-self-hosting/ansible-role-backup_borg/-/blob/main/defaults/main.yml) file for the full list of available options.
|
Check the [backup_borg role](https://gitlab.com/etke.cc/roles/backup_borg)'s [defaults/main.yml](https://gitlab.com/etke.cc/roles/backup_borg/-/blob/main/defaults/main.yml) file for the full list of available options.
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```
|
```
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
@ -76,4 +76,6 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|||||||
|
|
||||||
## Manually start a backup
|
## Manually start a backup
|
||||||
|
|
||||||
For testing your setup it can be helpful to not wait until 4am. If you want to run the backup immediately, log onto the server and run `systemctl start matrix-backup-borg`. This will not return until the backup is done, so possibly a long time. Consider using [tmux](https://en.wikipedia.org/wiki/Tmux) if your SSH connection is unstable.
|
For testing your setup it can be helpful to not wait until 4am. If you want to run the backup immediately, log onto the server
|
||||||
|
and run `systemctl start matrix-backup-borg`. This will not return until the backup is done, so possibly a long time.
|
||||||
|
Consider using [tmux](https://en.wikipedia.org/wiki/Tmux) if your SSH connection is unstable.
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
# Serving the base domain (optional)
|
# Serving the base domain
|
||||||
|
|
||||||
This playbook sets up services on your Matrix server (`matrix.example.com`). To have this server officially be responsible for Matrix services for the base domain (`example.com`), you need to set up [Server Delegation](howto-server-delegation.md). This is normally done by [configuring well-known](configuring-well-known.md) files on the base domain.
|
This playbook sets up services on your Matrix server (`matrix.DOMAIN`).
|
||||||
|
To have this server officially be responsible for Matrix services for the base domain (`DOMAIN`), you need to set up [Server Delegation](howto-server-delegation.md).
|
||||||
|
This is normally done by [configuring well-known](configuring-well-known.md) files on the base domain.
|
||||||
|
|
||||||
People who don't have a separate server to dedicate to the base domain have trouble arranging this.
|
People who don't have a separate server to dedicate to the base domain have trouble arranging this.
|
||||||
|
|
||||||
@ -8,14 +10,14 @@ Usually, there are 2 options:
|
|||||||
|
|
||||||
- either get a separate server for the base domain, just for serving the files necessary for [Server Delegation via a well-known file](howto-server-delegation.md#server-delegation-via-a-well-known-file)
|
- either get a separate server for the base domain, just for serving the files necessary for [Server Delegation via a well-known file](howto-server-delegation.md#server-delegation-via-a-well-known-file)
|
||||||
|
|
||||||
- or, arrange for the Matrix server to serve the base domain. This either involves you [using your own webserver](configuring-playbook-own-webserver.md) or making the integrated webserver serve the base domain for you.
|
- or, arrange for the Matrix server to serve the base domain. This either involves you [using your own webserver](configuring-playbook-own-webserver.md) or making the integrated webserver (`matrix-nginx-proxy`) serve the base domain for you.
|
||||||
|
|
||||||
This documentation page tells you how to do the latter. With some easy changes, we make it possible to serve the base domain from the Matrix server via the integrated webserver.
|
This documentation page tells you how to do the latter. With some easy changes, we make it possible to serve the base domain from the Matrix server via the integrated webserver (`matrix-nginx-proxy`).
|
||||||
|
|
||||||
Just **adjust your DNS records**, so that your base domain is pointed to the Matrix server's IP address (using a DNS `A` record) **and then add the following configuration** to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Just **adjust your DNS records**, so that your base domain is pointed to the Matrix server's IP address (using a DNS `A` record) **and then use the following configuration**:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_static_files_container_labels_base_domain_enabled: true
|
matrix_nginx_proxy_base_domain_serving_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
Doing this, the playbook will:
|
Doing this, the playbook will:
|
||||||
@ -24,48 +26,27 @@ Doing this, the playbook will:
|
|||||||
|
|
||||||
- serve the `/.well-known/matrix/*` files which are necessary for [Federation Server Discovery](configuring-well-known.md#introduction-to-client-server-discovery) (also see [Server Delegation](howto-server-delegation.md)) and [Client-Server discovery](configuring-well-known.md#introduction-to-client-server-discovery)
|
- serve the `/.well-known/matrix/*` files which are necessary for [Federation Server Discovery](configuring-well-known.md#introduction-to-client-server-discovery) (also see [Server Delegation](howto-server-delegation.md)) and [Client-Server discovery](configuring-well-known.md#introduction-to-client-server-discovery)
|
||||||
|
|
||||||
- serve a simple homepage at `https://example.com` with content `Hello from example.com` (configurable via the `matrix_static_files_file_index_html_template` variable). You can also [serve a more complicated static website](#serving-a-static-website-at-the-base-domain).
|
- serve a simple homepage at `https://DOMAIN` with content `Hello from DOMAIN` (configurable via the `matrix_nginx_proxy_base_domain_homepage_template` variable). You can also [serve a more complicated static website](#serving-a-static-website-at-the-base-domain).
|
||||||
|
|
||||||
|
|
||||||
## Serving a static website at the base domain
|
## Serving a static website at the base domain
|
||||||
|
|
||||||
By default, when "serving the base domain" is enabled, the playbook hosts a simple `index.html` webpage at `/matrix/static-files/public/index.html`. The content of this page is taken from the `matrix_static_files_file_index_html_template` variable.
|
By default, when "serving the base domain" is enabled, the playbook hosts a simple `index.html` webpage in `/matrix/nginx-proxy/data/matrix-domain`.
|
||||||
|
The content of this page is taken from the `matrix_nginx_proxy_base_domain_homepage_template` variable.
|
||||||
|
|
||||||
If you'd like to host your own static website (more than a single `index.html` page) at the base domain, you can disable the creation of this default `index.html` page like this:
|
If you'd like to host your own static website (more than a single `index.html` page) at the base domain, you can disable the creation of this default `index.html` page like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Enable base-domain serving
|
matrix_nginx_proxy_base_domain_homepage_enabled: false
|
||||||
matrix_static_files_container_labels_base_domain_enabled: true
|
|
||||||
|
|
||||||
# Prevent the default index.html file from being installed
|
|
||||||
matrix_static_files_file_index_html_enabled: false
|
|
||||||
|
|
||||||
# Disable the automatic redirectin of `https://example.com/` to `https://matrix.example.com/`.
|
|
||||||
# This gets automatically enabled when you disable `matrix_static_files_file_index_html_enabled`, as we're doing above.
|
|
||||||
matrix_static_files_container_labels_base_domain_root_path_redirection_enabled: false
|
|
||||||
```
|
```
|
||||||
|
|
||||||
With this configuration, Ansible will no longer mess around with the `/matrix/static-files/public/index.html` file.
|
With this configuration, Ansible will no longer mess around with the `/matrix/nginx-proxy/data/matrix-domain/index.html` file.
|
||||||
|
|
||||||
You are then free to upload any static website files to `/matrix/static-files/public` and they will get served at the base domain. You can do so manually or by using the [ansible-role-aux](https://github.com/mother-of-all-self-hosting/ansible-role-aux) Ansible role, which is part of this playbook already.
|
You are then free to upload any static website files to `/matrix/nginx-proxy/data/matrix-domain` and they will get served at the base domain.
|
||||||
|
|
||||||
|
|
||||||
## Serving a more complicated website at the base domain
|
## Serving a more complicated website at the base domain
|
||||||
|
|
||||||
If you'd like to serve an even more complicated (dynamic) website from the Matrix server, relying on the playbook to serve the base domain is not the best choice.
|
If you'd like to serve an even more complicated (dynamic) website from the Matrix server, relying on the playbook to serve the base domain is not the best choice.
|
||||||
|
|
||||||
You have 2 options.
|
Instead, we recommend that you switch to [using your own webserver](configuring-playbook-own-webserver.md) (preferrably nginx). You can then make that webserver host anything you wish, and still easily plug in Matrix services into it.
|
||||||
|
|
||||||
**One way is to host your base domain elsewhere**. This involves:
|
|
||||||
- you stopping to serve it from the Matrix server: remove `matrix_static_files_container_labels_base_domain_enabled` from your configuration
|
|
||||||
- [configuring Matrix Delegation via well-known](./configuring-well-known.md)
|
|
||||||
|
|
||||||
**Another way is to serve the base domain from another (your own) container on the Matrix server**. This involves:
|
|
||||||
- telling the playbook to only serve `example.com/.well-known/matrix` files by adjusting your `vars.yml` configuration like this:
|
|
||||||
- keep `matrix_static_files_container_labels_base_domain_enabled: true`
|
|
||||||
- add an extra: `matrix_static_files_container_labels_base_domain_traefik_path_prefix: /.well-known/matrix`
|
|
||||||
- building and running a new container on the Matrix server:
|
|
||||||
- it should be connected to the `traefik` network, so that Traefik can reverse-proxy to it
|
|
||||||
- it should have appropriate [container labels](https://docs.docker.com/config/labels-custom-metadata/), which instruct Traefik to reverse-proxy to it
|
|
||||||
|
|
||||||
How you'll be managing building and running this container is up-to-you. You may use of the primitives from [ansible-role-aux](https://github.com/mother-of-all-self-hosting/ansible-role-aux) Ansible role to organize it yourself, or you can set it up in another way.
|
|
||||||
|
@ -1,429 +0,0 @@
|
|||||||
# Setting up baibot (optional)
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<img src="https://github.com/etkecc/baibot/raw/main/etc/assets/baibot.svg" alt="baibot logo" width="150" />
|
|
||||||
<h1 align="center">baibot</h1>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
🤖 [baibot](https://github.com/etkecc/baibot) (pronounced bye-bot) is a [Matrix](https://matrix.org/) bot developed by [etke.cc](https://etke.cc/) that exposes the power of [AI](https://en.wikipedia.org/wiki/Artificial_intelligence) / [Large Language Models](https://en.wikipedia.org/wiki/Large_language_model) to you. 🤖
|
|
||||||
|
|
||||||
It supports [OpenAI](https://openai.com/)'s [ChatGPT](https://openai.com/blog/chatgpt/) models, as many well as other [☁️ providers](https://github.com/etkecc/baibot/blob/main/docs/providers.md).
|
|
||||||
|
|
||||||
It's designed as a more private and [✨ featureful](https://github.com/etkecc/baibot/?tab=readme-ov-file#-features) alternative to [matrix-chatgpt-bot](./configuring-playbook-bot-chatgpt.md). See the [baibot](https://github.com/etkecc/baibot) project and its documentation for more information.
|
|
||||||
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
API access to one or more LLM [☁️ providers](https://github.com/etkecc/baibot/blob/main/docs/providers.md).
|
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
There are **a lot of configuration options** (some required, some possibly required, some optional), so they're **split into multiple sections below**:
|
|
||||||
|
|
||||||
<!-- no toc -->
|
|
||||||
- [Base configuration](#base-configuration)
|
|
||||||
- [👮♂️ Administrator configuration](#️-administrator-configuration)
|
|
||||||
- [👥 Initial users configuration](#-initial-users-configuration)
|
|
||||||
- [🤖 Configuring agents via Ansible](#-configuring-agents-via-ansible)
|
|
||||||
- [🤝 Configuring initial default handlers](#-configuring-initial-default-handlers)
|
|
||||||
|
|
||||||
Depending on your current `vars.yml` file and desired configuration, **you may require more than just the [base configuration](#base-configuration)**.
|
|
||||||
|
|
||||||
|
|
||||||
### Base configuration
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_bot_baibot_enabled: true
|
|
||||||
|
|
||||||
# Uncomment and adjust this part if you'd like to use a username different than the default
|
|
||||||
# matrix_bot_baibot_config_user_mxid_localpart: baibot
|
|
||||||
|
|
||||||
# Generate a strong password here. Consider generating it with `pwgen -s 64 1`.
|
|
||||||
# If you'd like to change this password subsequently, see the details below.
|
|
||||||
matrix_bot_baibot_config_user_password: 'PASSWORD_FOR_THE_BOT'
|
|
||||||
|
|
||||||
# An optional passphrase to use for backing up and recovering the bot's encryption keys.
|
|
||||||
# You can put any string here, but generating a strong one is preferred (e.g. `pwgen -s 64 1`).
|
|
||||||
#
|
|
||||||
# If set to null, the recovery module will not be used and losing your session/database
|
|
||||||
# will mean you lose access to old messages in encrypted room.
|
|
||||||
# It's highly recommended that you configure this to avoid losing access to encrypted messages.
|
|
||||||
#
|
|
||||||
# Changing this subsequently will also cause you to lose access to old messages in encrypted rooms.
|
|
||||||
# For details about changing this subsequently or resetting, see `defaults/main.yml` in the baibot role.
|
|
||||||
matrix_bot_baibot_config_user_encryption_recovery_passphrase: 'ANY_LONG_AND_SECURE_PASSPHRASE_STRING_HERE'
|
|
||||||
|
|
||||||
# An optional secret for encrypting the bot's session data (see `matrix_bot_baibot_data_path`).
|
|
||||||
# This must be 32-bytes (64 characters when HEX-encoded).
|
|
||||||
# Generate it with: `openssl rand -hex 32`
|
|
||||||
# Set to null or empty to avoid using encryption.
|
|
||||||
# Changing this subsequently requires that you also throw away all data (see `matrix_bot_baibot_data_path`)
|
|
||||||
matrix_bot_baibot_config_persistence_session_encryption_key: 'A_HEX_STRING_OF_64_CHARACTERS_HERE'
|
|
||||||
|
|
||||||
# An optional secret for encrypting bot configuration stored in Matrix's account data.
|
|
||||||
# This must be 32-bytes (64 characters when HEX-encoded).
|
|
||||||
# Generate it with: `openssl rand -hex 32`
|
|
||||||
# Set to null or empty to avoid using encryption.
|
|
||||||
# Changing this subsequently will make you lose your configuration.
|
|
||||||
matrix_bot_baibot_config_persistence_config_encryption_key: 'A_HEX_STRING_OF_64_CHARACTERS_HERE'
|
|
||||||
```
|
|
||||||
|
|
||||||
As mentioned above, **this may not be enough**. Continue with the configuration sections below.
|
|
||||||
|
|
||||||
|
|
||||||
### 👮♂️ Administrator configuration
|
|
||||||
|
|
||||||
This is an addition to the [base configuration](#base-configuration).
|
|
||||||
|
|
||||||
To specify who is considered a bot [👮♂️ Administrator](https://github.com/etkecc/baibot/blob/main/docs/access.md#administrators), you either need to specify `matrix_bot_baibot_config_access_admin_patterns` or `matrix_admin`. The latter is a single variable which affects all bridges and bots.
|
|
||||||
|
|
||||||
If `matrix_admin` is already configured in your `vars.yml` configuration, you can skip this section.
|
|
||||||
|
|
||||||
**If necessary**, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
# Uncomment to add one or more admins to this bridge:
|
|
||||||
#
|
|
||||||
# matrix_bot_baibot_config_access_admin_patterns:
|
|
||||||
# - "@*:example.com"
|
|
||||||
# - "@admin:example.net"
|
|
||||||
#
|
|
||||||
# .. unless you've made yourself an admin of all bots/bridges like this:
|
|
||||||
#
|
|
||||||
# matrix_admin: '@yourAdminAccount:{{ matrix_domain }}'
|
|
||||||
```
|
|
||||||
|
|
||||||
### 👥 Initial users configuration
|
|
||||||
|
|
||||||
By default, **all users on your homeserver are considered allowed users**. If that's OK, you can skip this section.
|
|
||||||
|
|
||||||
This is an addition to the [base configuration](#base-configuration).
|
|
||||||
|
|
||||||
To specify who is considered a bot [👥 User](https://github.com/etkecc/baibot/blob/main/docs/access.md#user), you may:
|
|
||||||
|
|
||||||
- define an **initial** value for `matrix_bot_baibot_config_initial_global_config_user_patterns` Ansible variable, as shown below
|
|
||||||
- configure the list at runtime via the bot's `!bai access set-users SPACE_SEPARATED_PATTERNS` command
|
|
||||||
|
|
||||||
Configuring `matrix_bot_baibot_config_initial_global_config_user_patterns` is optional, but it can be useful to pre-configure the bot with a list of users who should have access to the bot's features.
|
|
||||||
|
|
||||||
**Note**: Once initially configured, the allowed users list **cannot be managed via Ansible anymore**. It can only be managed subsequently via bot commands.
|
|
||||||
|
|
||||||
**If necessary**, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
# Uncomment and adjust the bot users if necessary:
|
|
||||||
#
|
|
||||||
# Subsequent changes to `matrix_bot_baibot_config_initial_global_config_user_patterns` do not affect the bot's behavior.
|
|
||||||
# Once initially configured, the allowed users list is managed via bot commands, not via Ansible.
|
|
||||||
#
|
|
||||||
# matrix_bot_baibot_config_initial_global_config_user_patterns:
|
|
||||||
# - "@*:{{ matrix_bot_baibot_config_homeserver_server_name }}"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 🤖 Configuring agents via Ansible
|
|
||||||
|
|
||||||
You are **not required** to define agents [statically](https://github.com/etkecc/baibot/blob/main/docs/configuration/README.md#static-configuration) via Ansible. **To get started quickly**, you can **skip this section and define agents at runtime via chat commands** (following the bot's guidance).
|
|
||||||
|
|
||||||
Privileged users (like the [👮♂️ Administrator](#️-administrator-configuration), but potentially others too - see the upstream [🔒 access](https://github.com/etkecc/baibot/blob/main/docs/access.md) documentation) can **define agents dynamically at any time** via chat commands.
|
|
||||||
|
|
||||||
The Ansible role includes preset variables for easily enabling some [🤖 agents](https://github.com/etkecc/baibot/blob/main/docs/agents.md) on various [☁️ providers](https://github.com/etkecc/baibot/blob/main/docs/providers.md) (e.g. OpenAI, etc).
|
|
||||||
|
|
||||||
Besides the presets, the Ansible role also includes support for configuring additional statically-defined agents via the `matrix_bot_baibot_config_agents_static_definitions_custom` Ansible variable.
|
|
||||||
|
|
||||||
Agents defined statically and those created dynamically (via chat) are named differently, so **conflict cannot arise**.
|
|
||||||
|
|
||||||
Depending on your propensity for [GitOps](https://en.wikipedia.org/wiki/DevOps#GitOps), you may prefer to define agents statically via Ansible, or you may wish to do it dynamically via chat.
|
|
||||||
|
|
||||||
Before proceeding, we recommend reading the upstream documentation on [How to choose a provider](https://github.com/etkecc/baibot/blob/main/docs/providers.md#how-to-choose-a-provider). In short, it's probably best to go with [OpenAI](#openai).
|
|
||||||
|
|
||||||
|
|
||||||
#### Anthropic
|
|
||||||
|
|
||||||
You can statically-define a single [🤖 agent](https://github.com/etkecc/baibot/blob/main/docs/agents.md) instance powered by the [Anthropic provider](https://github.com/etkecc/baibot/blob/main/docs/providers.md#anthropic) with the help of the playbook's preset variables.
|
|
||||||
|
|
||||||
Here's an example **addition** to your `vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_anthropic_enabled: true
|
|
||||||
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_anthropic_config_api_key: "YOUR_API_KEY_HERE"
|
|
||||||
|
|
||||||
# If you'd like to use another text-generation agent, uncomment and adjust:
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_anthropic_config_text_generation_model_id: claude-3-5-sonnet-20240620
|
|
||||||
|
|
||||||
# The playbook defines a default prompt for all statically-defined agents.
|
|
||||||
# You can adjust it in the `matrix_bot_baibot_config_agents_static_definitions_prompt` variable,
|
|
||||||
# or you can adjust it below only for the Anthropic agent.
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_anthropic_config_text_generation_prompt: "{{ matrix_bot_baibot_config_agents_static_definitions_prompt }}"
|
|
||||||
|
|
||||||
# See `defaults/main.yml` in the baibot role for more configuration options.
|
|
||||||
```
|
|
||||||
|
|
||||||
If you'd like to use more than one model, take a look at the [Configuring additional agents (without a preset)](#configuring-additional-agents-without-a-preset) section below.
|
|
||||||
|
|
||||||
💡 You may also wish to use this new agent for [🤝 Configuring initial default handlers](#-configuring-initial-default-handlers).
|
|
||||||
|
|
||||||
|
|
||||||
#### Groq
|
|
||||||
|
|
||||||
You can statically-define a single [🤖 agent](https://github.com/etkecc/baibot/blob/main/docs/agents.md) instance powered by the [Groq provider](https://github.com/etkecc/baibot/blob/main/docs/providers.md#groq) with the help of the playbook's preset variables.
|
|
||||||
|
|
||||||
Here's an example **addition** to your `vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_groq_enabled: true
|
|
||||||
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_groq_config_api_key: "YOUR_API_KEY_HERE"
|
|
||||||
|
|
||||||
# Specify the text-generation agent you'd like to use
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_groq_config_text_generation_model_id: "llama3-70b-8192"
|
|
||||||
|
|
||||||
# The playbook defines a default prompt for all statically-defined agents.
|
|
||||||
# You can adjust it in the `matrix_bot_baibot_config_agents_static_definitions_prompt` variable,
|
|
||||||
# or you can adjust it below only for the Groq agent.
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_groq_config_text_generation_prompt: "{{ matrix_bot_baibot_config_agents_static_definitions_prompt }}"
|
|
||||||
|
|
||||||
# Uncomment and adjust this part if you're not happy with these speech-to-text defaults:
|
|
||||||
#
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_groq_config_speech_to_text_enabled: true
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_groq_config_speech_to_text_model_id: whisper-large-v3
|
|
||||||
|
|
||||||
# See `defaults/main.yml` in the baibot role for more configuration options.
|
|
||||||
```
|
|
||||||
|
|
||||||
Because this is a [statically](https://github.com/etkecc/baibot/blob/main/docs/configuration/README.md#static-configuration)-defined agent, it will be given a `static/` ID prefix and will be named `static/groq`.
|
|
||||||
|
|
||||||
If you'd like to use more than one model, take a look at the [Configuring additional agents (without a preset)](#configuring-additional-agents-without-a-preset) section below.
|
|
||||||
|
|
||||||
💡 You may also wish to use this new agent for [🤝 Configuring initial default handlers](#-configuring-initial-default-handlers).
|
|
||||||
|
|
||||||
|
|
||||||
#### Mistral
|
|
||||||
|
|
||||||
You can statically-define a single [🤖 agent](https://github.com/etkecc/baibot/blob/main/docs/agents.md) instance powered by the [🇫🇷 Mistral provider](https://github.com/etkecc/baibot/blob/main/docs/providers.md#mistral) with the help of the playbook's preset variables.
|
|
||||||
|
|
||||||
Here's an example **addition** to your `vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_mistral_enabled: true
|
|
||||||
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_mistral_config_api_key: "YOUR_API_KEY_HERE"
|
|
||||||
|
|
||||||
# The playbook defines a default prompt for all statically-defined agents.
|
|
||||||
# You can adjust it in the `matrix_bot_baibot_config_agents_static_definitions_prompt` variable,
|
|
||||||
# or you can adjust it below only for the Mistral agent.
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_mistral_config_text_generation_prompt: "{{ matrix_bot_baibot_config_agents_static_definitions_prompt }}"
|
|
||||||
|
|
||||||
# Uncomment and adjust this part if you're not happy with these defaults:
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_mistral_config_text_generation_model_id: mistral-large-latest
|
|
||||||
|
|
||||||
# See `defaults/main.yml` in the baibot role for more configuration options.
|
|
||||||
```
|
|
||||||
|
|
||||||
Because this is a [statically](https://github.com/etkecc/baibot/blob/main/docs/configuration/README.md#static-configuration)-defined agent, it will be given a `static/` ID prefix and will be named `static/mistral`.
|
|
||||||
|
|
||||||
If you'd like to use more than one model, take a look at the [Configuring additional agents (without a preset)](#configuring-additional-agents-without-a-preset) section below.
|
|
||||||
|
|
||||||
💡 You may also wish to use this new agent for [🤝 Configuring initial default handlers](#-configuring-initial-default-handlers).
|
|
||||||
|
|
||||||
|
|
||||||
#### OpenAI
|
|
||||||
|
|
||||||
You can statically-define a single [🤖 agent](https://github.com/etkecc/baibot/blob/main/docs/agents.md) instance powered by the [OpenAI provider](https://github.com/etkecc/baibot/blob/main/docs/providers.md#openai) with the help of the playbook's preset variables.
|
|
||||||
|
|
||||||
The OpenAI provider is **only meant to be used with OpenAI's official API** and compatibility with other services (which do not fully adhere to the OpenAI API spec completely) is limited. **If you're targeting an OpenAI-compatible service**, use the [OpenAI Compatible](#openai-compatible) provider instead.
|
|
||||||
|
|
||||||
Here's an example **addition** to your `vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_openai_enabled: true
|
|
||||||
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_openai_config_api_key: "YOUR_API_KEY_HERE"
|
|
||||||
|
|
||||||
# The playbook defines a default prompt for all statically-defined agents.
|
|
||||||
# You can adjust it in the `matrix_bot_baibot_config_agents_static_definitions_prompt` variable,
|
|
||||||
# or you can adjust it below only for the OpenAI agent.
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_openai_config_text_generation_prompt: "{{ matrix_bot_baibot_config_agents_static_definitions_prompt }}"
|
|
||||||
|
|
||||||
# If you'd like to use another text-generation agent, uncomment and adjust:
|
|
||||||
# matrix_bot_baibot_config_agents_static_definitions_openai_config_text_generation_model_id: gpt-4o
|
|
||||||
|
|
||||||
# See `defaults/main.yml` in the baibot role for more configuration options.
|
|
||||||
```
|
|
||||||
|
|
||||||
Because this is a [statically](https://github.com/etkecc/baibot/blob/main/docs/configuration/README.md#static-configuration)-defined agent, it will be given a `static/` ID prefix and will be named `static/openai`.
|
|
||||||
|
|
||||||
If you'd like to use more than one model, take a look at the [Configuring additional agents (without a preset)](#configuring-additional-agents-without-a-preset) section below.
|
|
||||||
|
|
||||||
💡 You may also wish to use this new agent for [🤝 Configuring initial default handlers](#-configuring-initial-default-handlers).
|
|
||||||
|
|
||||||
|
|
||||||
#### OpenAI Compatible
|
|
||||||
|
|
||||||
You can statically-define a single [🤖 agent](https://github.com/etkecc/baibot/blob/main/docs/agents.md) instance powered by the [OpenAI Compatible provider](https://github.com/etkecc/baibot/blob/main/docs/providers.md#openai-compatible) with the help of the playbook's preset variables.
|
|
||||||
|
|
||||||
This provider allows you to use OpenAI-compatible API services like [OpenRouter](https://github.com/etkecc/baibot/blob/main/docs/providers.md#openrouter), [Together AI](https://github.com/etkecc/baibot/blob/main/docs/providers.md#together-ai), etc.
|
|
||||||
|
|
||||||
Some of these popular services already have **shortcut** providers (see [supported providers](https://github.com/etkecc/baibot/blob/main/docs/providers.md#supported-providers) leading to this one behind the scenes - this make it easier to get started.
|
|
||||||
|
|
||||||
As of this moment, the playbook does not include presets for any of these services, so you'll need to [Configuring additional agents (without a preset)](#configuring-additional-agents-without-a-preset).
|
|
||||||
|
|
||||||
|
|
||||||
#### Configuring additional agents (without a preset)
|
|
||||||
|
|
||||||
The Ansible role may be lacking preset variables for some [☁️ provider](https://github.com/etkecc/baibot/blob/main/docs/providers.md), or you may wish to statically-define an agent on the same provider twice (or more) with different configuration.
|
|
||||||
|
|
||||||
It's possible to inject your own agent configuration using the `matrix_bot_baibot_config_agents_static_definitions_custom` Ansible variable.
|
|
||||||
|
|
||||||
You can also define providers at runtime, by chatting with the bot, so using Ansible is not a requirement.
|
|
||||||
|
|
||||||
Below is an an **example** demonstrating **statically-defining agents via Ansible without using presets**:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
matrix_bot_baibot_config_agents_static_definitions_custom:
|
|
||||||
# This agent will use the GPT 3.5 model and will only support text-generation,
|
|
||||||
# even though the `openai` provider could support other features (e.g. image-generation).
|
|
||||||
- id: my-openai-gpt-3.5-turbo-agent
|
|
||||||
provider: openai
|
|
||||||
config:
|
|
||||||
base_url: https://api.openai.com/v1
|
|
||||||
api_key: "YOUR_API_KEY_HERE"
|
|
||||||
text_generation:
|
|
||||||
model_id: gpt-3.5-turbo-0125
|
|
||||||
prompt: "{{ matrix_bot_baibot_config_agents_static_definitions_prompt }}"
|
|
||||||
temperature: 1.0
|
|
||||||
max_response_tokens: 4096
|
|
||||||
max_context_tokens: 16385
|
|
||||||
speech_to_text: null
|
|
||||||
text_to_speech: null
|
|
||||||
image_generation: null
|
|
||||||
|
|
||||||
# This agent uses the `openai` provider, but adjusts the base URL, so that it points to some Ollama instance
|
|
||||||
# (which supports an OpenAI-compatible API).
|
|
||||||
- id: my-ollama-agent
|
|
||||||
provider: openai
|
|
||||||
config:
|
|
||||||
base_url: http://ollama-service:1234/v1
|
|
||||||
api_key: ""
|
|
||||||
text_generation:
|
|
||||||
model_id: "llama3.1:8b"
|
|
||||||
prompt: "{{ matrix_bot_baibot_config_agents_static_definitions_prompt }}"
|
|
||||||
temperature: 1.0
|
|
||||||
max_response_tokens: 4096
|
|
||||||
max_context_tokens: 128000
|
|
||||||
speech_to_text: null
|
|
||||||
text_to_speech: null
|
|
||||||
image_generation: null
|
|
||||||
```
|
|
||||||
|
|
||||||
Because these are [statically](https://github.com/etkecc/baibot/blob/main/docs/configuration/README.md#static-configuration)-defined agents, they will be given a `static/` ID prefix and will be named `static/my-openai-gpt-3.5-turbo-agent` and `static/my-ollama-agent`, respectively.
|
|
||||||
|
|
||||||
💡 To figure out what to put in the `config` section, refer to the [☁️ provider](https://github.com/etkecc/baibot/blob/main/docs/providers.md) page, which contains **sample configuration YAML for each provider**.
|
|
||||||
|
|
||||||
As with any [🤖 agent](https://github.com/etkecc/baibot/blob/main/docs/agents.md), defining them means they exist. To actually make use of them, they need to be configured as handlers globally or in a specific room - see [Mixing & matching models](https://github.com/etkecc/baibot/blob/main/docs/features.md#mixing--matching-models).
|
|
||||||
|
|
||||||
💡 You may also wish to use these new agents for [🤝 Configuring initial default handlers](#-configuring-initial-default-handlers).
|
|
||||||
|
|
||||||
|
|
||||||
### 🤝 Configuring initial default handlers
|
|
||||||
|
|
||||||
This section is only useful if you're [🤖 Configuring agents via Ansible](#-configuring-agents-via-ansible), as it lets you put these agents to use as soon as the bot starts (by adjusting the bot's **initial global configuration**).
|
|
||||||
|
|
||||||
If you're not configuring agents via Ansible, you can skip this section.
|
|
||||||
|
|
||||||
This section is only useful the first time around. **Once initially configured the global configuration cannot be managed Ansible**, but only via bot commands.
|
|
||||||
|
|
||||||
baibot supports [various purposes](https://github.com/etkecc/baibot/blob/main/docs/features.md):
|
|
||||||
|
|
||||||
- [💬 text-generation](https://github.com/etkecc/baibot/blob/main/docs/features.md#-text-generation): communicating with you via text
|
|
||||||
|
|
||||||
- [🦻 speech-to-text](https://github.com/etkecc/baibot/blob/main/docs/features.md#-speech-to-text): turning your voice messages into text
|
|
||||||
|
|
||||||
- [🗣️ text-to-speech](https://github.com/etkecc/baibot/blob/main/docs/features.md#-text-to-speech): turning bot or users text messages into voice messages
|
|
||||||
|
|
||||||
- [🖌️ image-generation](https://github.com/etkecc/baibot/blob/main/docs/features.md#-image-generation): generating images based on instructions
|
|
||||||
|
|
||||||
- ❓ catch-all: special purposes, indicating use as a fallback (when no specific handler is configured)
|
|
||||||
|
|
||||||
[Mixing & matching models](https://github.com/etkecc/baibot/blob/main/docs/features.md#mixing--matching-models) is made possible by the bot's ability to have different [🤝 handlers](https://github.com/etkecc/baibot/blob/main/docs/configuration/handlers.md) configured for different purposes.
|
|
||||||
|
|
||||||
This configuration can be done as a global fallback, or per-room. Both of these [🛠️ configurations](https://github.com/etkecc/baibot/blob/main/docs/configuration/README.md) are managed at runtime (viat chat), but **the global configuration can have some initial defaults configured via Ansible**.
|
|
||||||
|
|
||||||
You can configure the **initial values** for these via Ansible, via the `matrix_bot_baibot_config_initial_global_config_handler_*` variables.
|
|
||||||
|
|
||||||
Example **additional** `vars.yml` configuration:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
# Note: these are initial defaults for the bot's global configuration.
|
|
||||||
# As such, changing any of these values subsequently has no effect on the bot's behavior.
|
|
||||||
# Once initially configured, the global configuration is managed via bot commands, not via Ansible.
|
|
||||||
|
|
||||||
matrix_bot_baibot_config_initial_global_config_handler_catch_all: static/openai
|
|
||||||
|
|
||||||
# In this example, there's no need to define any of these below.
|
|
||||||
# Configuring the catch-all purpose handler is enough.
|
|
||||||
matrix_bot_baibot_config_initial_global_config_handler_text_generation: null
|
|
||||||
matrix_bot_baibot_config_initial_global_config_handler_text_to_speech: null
|
|
||||||
matrix_bot_baibot_config_initial_global_config_handler_speech_to_text: null
|
|
||||||
matrix_bot_baibot_config_initial_global_config_handler_image_generation: null
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note**: these are initial defaults for the bot's global configuration. As such, changing any of these values subsequently has no effect on the bot's behavior. **Once initially configured the global configuration cannot be managed Ansible**, but only via bot commands.
|
|
||||||
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
just run-tags install-all,ensure-matrix-users-created,start
|
|
||||||
```
|
|
||||||
|
|
||||||
**Notes**:
|
|
||||||
|
|
||||||
- the `ensure-matrix-users-created` playbook tag makes the playbook automatically create the bot's user account
|
|
||||||
|
|
||||||
- if you change the bot password (`matrix_bot_baibot_config_user_password` in your `vars.yml` file) subsequently, the bot user's credentials on the homeserver won't be updated automatically. If you'd like to change the bot user's password, use a tool like [synapse-admin](configuring-playbook-synapse-admin.md) to change it, and then update `matrix_bot_baibot_config_user_password` to let the bot know its new password
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
To use the bot, invite the `@baibot:example.com` bot user into a room.
|
|
||||||
|
|
||||||
If you're an allowed bot [👥 user](https://github.com/etkecc/baibot/blob/main/docs/access.md#user) (see [👥 Initial users configuration](#-initial-users-configuration)), the bot will accept your invitation and join the room.
|
|
||||||
|
|
||||||
After joining, the bot will introduce itself and show information about the [✨ features](https://github.com/etkecc/baibot/blob/main/docs/features.md) that are enabled for it.
|
|
||||||
|
|
||||||
If you've [🤖 configured one or more agents via Ansible](#-configuring-agents-via-ansible) and have [🤝 configured initial default handlers](#configuring-initial-default-handlers), the bot will immediately be able to make use of these agents for this new room. Otherwise, you will need to configure agents and/or handlers via chat commands.
|
|
||||||
|
|
||||||
Send `!bai help` to the room at any time to see the bot's help menu for additional commands.
|
|
||||||
|
|
||||||
You can also refer to the upstream [baibot](https://github.com/etkecc/baibot) project's documentation.
|
|
||||||
|
|
||||||
|
|
||||||
## Debugging
|
|
||||||
|
|
||||||
As with all other services, you can find service logs in [systemd-journald](https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html) by running something like `journalctl -fu matrix-bot-baibot`
|
|
||||||
|
|
||||||
The default logging level for this service is `info`, but you can increase it to `debug` (or even `trace`) with the following additional configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Adjust the bot's own logging level.
|
|
||||||
matrix_bot_baibot_config_logging_level_baibot: debug
|
|
||||||
|
|
||||||
# Adjust the logging level for the mxlink bot library used by the bot.
|
|
||||||
matrix_bot_baibot_config_logging_level_mxlink: debug
|
|
||||||
|
|
||||||
# Adjust the logging level for other libraries used by the bot.
|
|
||||||
# Having this set to a value other than "warn" can be very noisy.
|
|
||||||
matrix_bot_baibot_config_logging_level_other_libs: debug
|
|
||||||
```
|
|
||||||
|
|
||||||
**Alternatively**, you can use a single variable to set the logging level for all of the above (bot + all libraries):
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_bot_baibot_config_logging: debug
|
|
||||||
```
|
|
@ -1,12 +1,38 @@
|
|||||||
# Setting up Buscarron (optional)
|
# Setting up Buscarron (optional)
|
||||||
|
|
||||||
The playbook can install and configure [Buscarron](https://github.com/etkecc/buscarron) for you.
|
The playbook can install and configure [buscarron](https://gitlab.com/etke.cc/buscarron) for you.
|
||||||
|
|
||||||
Buscarron is bot that receives HTTP POST submissions of web forms and forwards them to a Matrix room.
|
Buscarron is bot that receives HTTP POST submissions of web forms and forwards them to a Matrix room.
|
||||||
|
|
||||||
|
|
||||||
|
## Decide on a domain and path
|
||||||
|
|
||||||
|
By default, Buscarron is configured to use its own dedicated domain (`buscarron.DOMAIN`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
||||||
|
|
||||||
|
You can override the domain and path like this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Switch to the domain used for Matrix services (`matrix.DOMAIN`),
|
||||||
|
# so we won't need to add additional DNS records for Buscarron.
|
||||||
|
matrix_bot_buscarron_hostname: "{{ matrix_server_fqn_matrix }}"
|
||||||
|
|
||||||
|
# Expose under the /buscarron subpath
|
||||||
|
matrix_bot_buscarron_path_prefix: /buscarron
|
||||||
|
```
|
||||||
|
|
||||||
|
**NOTE**: When using `matrix-nginx-proxy` instead of Traefik, you won't be able to override the path prefix. You can only override the domain, but that needs to happen using another variable: `matrix_server_fqn_buscarron` (e.g. `matrix_server_fqn_buscarron: "form.{{ matrix_domain }}"`).
|
||||||
|
|
||||||
|
|
||||||
|
## Adjusting DNS records
|
||||||
|
|
||||||
|
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Buscarron domain to the Matrix server.
|
||||||
|
|
||||||
|
If you've decided to reuse the `matrix.` domain, you won't need to do any extra DNS configuration.
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable Buscarron, 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.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_buscarron_enabled: true
|
matrix_bot_buscarron_enabled: true
|
||||||
@ -19,9 +45,9 @@ matrix_bot_buscarron_password: PASSWORD_FOR_THE_BOT
|
|||||||
|
|
||||||
# Adjust accepted forms
|
# Adjust accepted forms
|
||||||
matrix_bot_buscarron_forms:
|
matrix_bot_buscarron_forms:
|
||||||
- name: contact # (mandatory) Your form name, will be used as endpoint, eg: buscarron.example.com/contact
|
- name: contact # (mandatory) Your form name, will be used as endpoint, eg: buscarron.DOMAIN/contact
|
||||||
room: "!qporfwt:{{ matrix_domain }}" # (mandatory) Room ID where form submission will be posted
|
room: "!yourRoomID:DOMAIN" # (mandatory) Room ID where form submission will be posted
|
||||||
redirect: https://example.com # (mandatory) To what page user will be redirected after the form submission
|
redirect: https://DOMAIN # (mandatory) To what page user will be redirected after the form submission
|
||||||
ratelimit: 1r/m # (optional) rate limit of the form, format: <max requests>r/<interval:s,m>, eg: 1r/s or 54r/m
|
ratelimit: 1r/m # (optional) rate limit of the form, format: <max requests>r/<interval:s,m>, eg: 1r/s or 54r/m
|
||||||
hasemail: 1 # (optional) form has "email" field that should be validated
|
hasemail: 1 # (optional) form has "email" field that should be validated
|
||||||
extensions: [] # (optional) list of form extensions (not used yet)
|
extensions: [] # (optional) list of form extensions (not used yet)
|
||||||
@ -29,34 +55,10 @@ matrix_bot_buscarron_forms:
|
|||||||
matrix_bot_buscarron_spamlist: [] # (optional) list of emails/domains/hosts (with wildcards support) that should be rejected automatically
|
matrix_bot_buscarron_spamlist: [] # (optional) list of emails/domains/hosts (with wildcards support) that should be rejected automatically
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the Buscarron URL
|
|
||||||
|
|
||||||
By default, this playbook installs Buscarron on the `buscarron.` subdomain (`buscarron.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `matrix_bot_buscarron_hostname` and `matrix_bot_buscarron_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
|
||||||
# so we won't need to add additional DNS records for Buscarron.
|
|
||||||
matrix_bot_buscarron_hostname: "{{ matrix_server_fqn_matrix }}"
|
|
||||||
|
|
||||||
# Expose under the /buscarron subpath
|
|
||||||
matrix_bot_buscarron_path_prefix: /buscarron
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Buscarron domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `buscarron`. 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
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start
|
||||||
@ -71,15 +73,15 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-use
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use the bot, invite the `@bot.buscarron:example.com` to the room you specified in a config, after that any point your form to the form url, example for the `contact` form:
|
To use the bot, invite the `@bot.buscarron:DOMAIN` to the room you specified in a config, after that any point your form to the form url, example for the `contact` form:
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<form method="POST" action="https://buscarron.example.com/contact">
|
<form method="POST" action="https://buscarron.DOMAIN/contact">
|
||||||
<!--your fields-->
|
<!--your fields-->
|
||||||
</form>
|
</form>
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: to fight against spam, Buscarron is **very aggressive when it comes to banning** and will ban you if:
|
**NOTE**: to fight against spam, Buscarron is **very aggressive when it comes to banning** and will ban you if:
|
||||||
|
|
||||||
- if you hit the homepage (HTTP `GET` request to `/`)
|
- if you hit the homepage (HTTP `GET` request to `/`)
|
||||||
- if you submit a form to the wrong URL (`POST` request to `/non-existing-form`)
|
- if you submit a form to the wrong URL (`POST` request to `/non-existing-form`)
|
||||||
@ -87,4 +89,4 @@ To use the bot, invite the `@bot.buscarron:example.com` to the room you specifie
|
|||||||
|
|
||||||
If you get banned, you'd need to restart the process by running the playbook with `--tags=start` or running `systemctl restart matrix-bot-buscarron` on the server.
|
If you get banned, you'd need to restart the process by running the playbook with `--tags=start` or running `systemctl restart matrix-bot-buscarron` on the server.
|
||||||
|
|
||||||
You can also refer to the upstream [documentation](https://github.com/etkecc/buscarron).
|
You can also refer to the upstream [documentation](https://gitlab.com/etke.cc/buscarron).
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
# Setting up matrix-bot-chatgpt (optional)
|
# Setting up ChatGPT (optional)
|
||||||
|
|
||||||
**Note**: [matrix-chatgpt-bot](https://github.com/matrixgpt/matrix-chatgpt-bot) is now an archived (**unmaintained**) project. Talking to ChatGPT (and many other LLM providers) can happen via the much more featureful [baibot](https://github.com/etkecc/baibot), which can be installed using [this playbook](configuring-playbook-bot-baibot.md). Consider using that bot instead of this one.
|
|
||||||
|
|
||||||
The playbook can install and configure [matrix-chatgpt-bot](https://github.com/matrixgpt/matrix-chatgpt-bot) for you.
|
The playbook can install and configure [matrix-chatgpt-bot](https://github.com/matrixgpt/matrix-chatgpt-bot) for you.
|
||||||
|
|
||||||
Talk to [ChatGPT](https://openai.com/blog/chatgpt/) via your favourite Matrix client!
|
Talk to [ChatGPT](https://openai.com/blog/chatgpt/) via your favourite Matrix client!
|
||||||
|
|
||||||
|
|
||||||
## 1. Register the bot account
|
## 1. Register the bot account
|
||||||
|
|
||||||
The playbook does not automatically create users for you. The bot requires an access token to be able to connect to your homeserver.
|
The playbook does not automatically create users for you. The bot requires an access token to be able to connect to your homeserver.
|
||||||
@ -30,7 +29,7 @@ To make sure the bot can read encrypted messages, it will need an encryption key
|
|||||||
|
|
||||||
## 3. Adjusting the playbook configuration
|
## 3. Adjusting the playbook configuration
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file (adapt to your needs):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_chatgpt_enabled: true
|
matrix_bot_chatgpt_enabled: true
|
||||||
@ -56,7 +55,7 @@ You will need to get tokens for ChatGPT.
|
|||||||
|
|
||||||
## 4. Installing
|
## 4. Installing
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=install-all,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=install-all,start
|
||||||
@ -65,6 +64,6 @@ ansible-playbook -i inventory/hosts setup.yml --tags=install-all,start
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use the bot, invite the `@bot.chatgpt:example.com` to the room you specified in a config, after that start speaking to it, use the prefix if you configured one or mention the bot.
|
To use the bot, invite the `@bot.chatgpt:DOMAIN` to the room you specified in a config, after that start speaking to it, use the prefix if you configured one or mention the bot.
|
||||||
|
|
||||||
You can also refer to the upstream [documentation](https://github.com/matrixgpt/matrix-chatgpt-bot).
|
You can also refer to the upstream [documentation](https://github.com/matrixgpt/matrix-chatgpt-bot).
|
||||||
|
@ -4,9 +4,6 @@ The playbook can install and configure the [draupnir](https://github.com/the-dra
|
|||||||
|
|
||||||
See the project's [documentation](https://github.com/the-draupnir-project/Draupnir) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/the-draupnir-project/Draupnir) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
This documentation page is about installing Draupnir in bot mode. As an alternative, you can run a multi-instance Draupnir deployment by installing [Draupnir in appservice mode](./configuring-playbook-appservice-draupnir-for-all.md) (called Draupnir-for-all) instead.
|
|
||||||
|
|
||||||
|
|
||||||
If your migrating from Mjolnir skip to step 5b.
|
If your migrating from Mjolnir skip to step 5b.
|
||||||
|
|
||||||
## 1. Register the bot account
|
## 1. Register the bot account
|
||||||
@ -35,67 +32,24 @@ Refer to the documentation on [how to obtain an access token](obtaining-access-t
|
|||||||
|
|
||||||
You will need to prevent Synapse from rate limiting the bot's account. This is not an optional step. If you do not do this step draupnir will crash. This can be done using Synapse's [admin API](https://matrix-org.github.io/synapse/latest/admin_api/user_admin_api.html#override-ratelimiting-for-users). Please ask for help if you are uncomfortable with these steps or run into issues.
|
You will need to prevent Synapse from rate limiting the bot's account. This is not an optional step. If you do not do this step draupnir will crash. This can be done using Synapse's [admin API](https://matrix-org.github.io/synapse/latest/admin_api/user_admin_api.html#override-ratelimiting-for-users). Please ask for help if you are uncomfortable with these steps or run into issues.
|
||||||
|
|
||||||
If your Synapse Admin API is exposed to the internet for some reason like running the Synapse Admin Role [Link](/docs/configuring-playbook-synapse-admin.md) or running `matrix_synapse_container_labels_public_client_synapse_admin_api_enabled: true` in your playbook config. If your API is not externally exposed you should still be able to on the local host for your synapse run these commands.
|
If your Synapse Admin API is exposed to the internet for some reason like running the Synapse Admin Role [Link](/docs/configuring-playbook-synapse-admin.md) or running `matrix_nginx_proxy_proxy_matrix_client_api_forwarded_location_synapse_admin_api_enabled: true` in your playbook config. If your API is not externally exposed you should still be able to on the local host for your synapse run these commands.
|
||||||
|
|
||||||
The following command works on semi up to date Windows 10 installs and All Windows 11 installations and other systems that ship curl. `curl --header "Authorization: Bearer <access_token>" -X POST https://matrix.example.com/_synapse/admin/v1/users/@example:example.com/override_ratelimit` Replace `@example:example.com` with the MXID of your Draupnir and example.com with your homeserver domain. You can easily obtain an access token for a homeserver admin account the same way you can obtain an access token for Draupnir itself. If you made Draupnir Admin you can just use the Draupnir token.
|
The following command works on semi up to date Windows 10 installs and All Windows 11 installations and other systems that ship curl. `curl --header "Authorization: Bearer <access_token>" -X POST https://matrix.example.com/_synapse/admin/v1/users/@example:example.com/override_ratelimit` Replace `@example:example.com` with the MXID of your Draupnir and example.com with your homeserver domain. You can easily obtain an access token for a homeserver admin account the same way you can obtain an access token for Draupnir it self. If you made Draupnir Admin you can just use the Draupnir token.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 4. Create a management room
|
## 4. Create a management room
|
||||||
|
|
||||||
Using your own account, create a new invite only room that you will use to manage the bot. This is the room where you will see the status of the bot and where you will send commands to the bot, such as the command to ban a user from another room. Anyone in this room can control the bot so it is important that you only invite trusted users to this room.
|
Using your own account, create a new invite only room that you will use to manage the bot. This is the room where you will see the status of the bot and where you will send commands to the bot, such as the command to ban a user from another room. Anyone in this room can control the bot so it is important that you only invite trusted users to this room. The room must be unencrypted since the playbook does not support installing Pantalaimon yet.
|
||||||
|
|
||||||
If you make the management room encrypted (E2EE), then you MUST enable and use Pantalaimon (see below).
|
Once you have created the room you need to copy the room ID so you can tell the bot to use that room. In Element you can do this by going to the room's settings, clicking Advanced, and then coping the internal room ID. The room ID will look something like `!QvgVuKq0ha8glOLGMG:DOMAIN`.
|
||||||
|
|
||||||
Once you have created the room you need to copy the room ID so you can tell the bot to use that room. In Element you can do this by going to the room's settings, clicking Advanced, and then copying the internal room ID. The room ID will look something like `!qporfwt:example.com`.
|
Finally invite the `@bot.draupnir:DOMAIN` account you created earlier into the room.
|
||||||
|
|
||||||
Finally invite the `@bot.draupnir:example.com` account you created earlier into the room.
|
|
||||||
|
|
||||||
|
|
||||||
## 5. Adjusting the playbook configuration
|
## 5a. Adjusting the playbook configuration
|
||||||
|
|
||||||
Decide whether you want Draupnir to be capable of operating in end-to-end encrypted (E2EE) rooms. This includes the management room and the moderated rooms. To support E2EE, Draupnir needs to [use Pantalaimon](configuring-playbook-pantalaimon.md).
|
Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file (adapt to your needs):
|
||||||
|
|
||||||
### 5a. Configuration with E2EE support
|
|
||||||
|
|
||||||
When using Pantalaimon, Draupnir will log in to its bot account itself through Pantalaimon, so configure its username and password.
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Enable Pantalaimon. See docs/configuring-playbook-pantalaimon.md
|
|
||||||
matrix_pantalaimon_enabled: true
|
|
||||||
|
|
||||||
# Enable Draupnir
|
|
||||||
matrix_bot_draupnir_enabled: true
|
|
||||||
|
|
||||||
# Tell Draupnir to use Pantalaimon
|
|
||||||
matrix_bot_draupnir_pantalaimon_use: true
|
|
||||||
|
|
||||||
# User name and password for the bot. Required when using Pantalaimon.
|
|
||||||
matrix_bot_draupnir_pantalaimon_username: "DRAUPNIR_USERNAME_FROM_STEP_1"
|
|
||||||
matrix_bot_draupnir_pantalaimon_password: ### you should create a secure password for the bot account
|
|
||||||
|
|
||||||
matrix_bot_draupnir_management_room: "ROOM_ID_FROM_STEP_4_GOES_HERE"
|
|
||||||
```
|
|
||||||
|
|
||||||
The playbook's `group_vars` will configure other required settings. If using this role separately without the playbook, you also need to configure the two URLs that Draupnir uses to reach the homeserver, one through Pantalaimon and one "raw". This example is taken from the playbook's `group_vars`:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Endpoint URL that Draupnir uses to interact with the Matrix homeserver (client-server API).
|
|
||||||
# Set this to the pantalaimon URL if you're using that.
|
|
||||||
matrix_bot_draupnir_homeserver_url: "{{ 'http://matrix-pantalaimon:8009' if matrix_bot_draupnir_pantalaimon_use else matrix_addons_homeserver_client_api_url }}"
|
|
||||||
|
|
||||||
# Endpoint URL that Draupnir could use to fetch events related to reports (client-server API and /_synapse/),
|
|
||||||
# only set this to the public-internet homeserver client API URL, do NOT set this to the pantalaimon URL.
|
|
||||||
matrix_bot_draupnir_raw_homeserver_url: "{{ matrix_addons_homeserver_client_api_url }}"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5b. Configuration without E2EE support
|
|
||||||
|
|
||||||
When NOT using Pantalaimon, Draupnir does not log in by itself and you must give it an access token for its bot account.
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
|
||||||
|
|
||||||
You must replace `ACCESS_TOKEN_FROM_STEP_2_GOES_HERE` and `ROOM_ID_FROM_STEP_4_GOES_HERE` with the your own values.
|
You must replace `ACCESS_TOKEN_FROM_STEP_2_GOES_HERE` and `ROOM_ID_FROM_STEP_4_GOES_HERE` with the your own values.
|
||||||
|
|
||||||
@ -107,10 +61,9 @@ matrix_bot_draupnir_access_token: "ACCESS_TOKEN_FROM_STEP_2_GOES_HERE"
|
|||||||
matrix_bot_draupnir_management_room: "ROOM_ID_FROM_STEP_4_GOES_HERE"
|
matrix_bot_draupnir_management_room: "ROOM_ID_FROM_STEP_4_GOES_HERE"
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5c. Migrating from Mjolnir (Only required if migrating.)
|
## 5b. Migrating from Mjolnir (Only required if migrating.)
|
||||||
|
|
||||||
Replace your `matrix_bot_mjolnir` config with `matrix_bot_draupnir` config. Also disable Mjolnir if you're doing migration.
|
|
||||||
|
|
||||||
|
Replace your `matrix_bot_mjolnir` config with `matrix_bot_draupnir` config. Also disable mjolnir if you're doing migration.
|
||||||
That is all you need to do due to that Draupnir can complete migration on its own.
|
That is all you need to do due to that Draupnir can complete migration on its own.
|
||||||
|
|
||||||
## 6. Installing
|
## 6. Installing
|
||||||
@ -124,76 +77,9 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You can refer to the upstream [documentation](https://the-draupnir-project.github.io/draupnir-documentation/) for additional ways to use and configure Draupnir and for a more detailed usage guide.
|
You can refer to the upstream [documentation](https://github.com/the-draupnir-project/Draupnir) for additional ways to use and configure draupnir. Check out their [quickstart guide](https://github.com/the-draupnir-project/Draupnir/blob/main/docs/moderators.md#quick-usage) for some basic commands you can give to the bot.
|
||||||
|
|
||||||
Below is a **non-exhaustive quick-start guide** for the impatient.
|
You can configure additional options by adding the `matrix_bot_draupnir_configuration_extension_yaml` variable to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file.
|
||||||
|
|
||||||
### Making Draupnir join and protect a room
|
|
||||||
|
|
||||||
Draupnir can be told to self-join public rooms, but it's better to follow this flow which works well for all kinds of rooms:
|
|
||||||
|
|
||||||
1. Invite the bot to the room manually ([inviting Draupnir to rooms](https://the-draupnir-project.github.io/draupnir-documentation/moderator/managing-protected-rooms#inviting-draupnir-to-rooms)). Before joining, the bot *may* ask for confirmation in the Management Room
|
|
||||||
|
|
||||||
2. [Give the bot permissions to do its job](#giving-draupnir-permissions-to-do-its-job)
|
|
||||||
|
|
||||||
3. Tell it to protect the room (using the [rooms command](https://the-draupnir-project.github.io/draupnir-documentation/moderator/managing-protected-rooms#using-the-draupnir-rooms-command)) by sending the following command to the Management Room: `!draupnir rooms add !qporfwt:example.com`
|
|
||||||
|
|
||||||
To have Draupnir provide useful room protection, you need do to a bit more work (at least the first time around). You may wish to [Subscribe to a public policy list](#subscribing-to-a-public-policy-list), [Create your own own policy and rules](#creating-your-own-policy-lists-and-rules) and [Enabling built-in protections](#enabling-built-in-protections).
|
|
||||||
|
|
||||||
### Giving Draupnir permissions to do its job
|
|
||||||
|
|
||||||
For Draupnir to do its job, you need to [give it permissions](https://the-draupnir-project.github.io/draupnir-documentation/moderator/managing-protected-rooms#giving-draupnir-permissions) in rooms it's protecting. This involves **giving it an Administrator power level**.
|
|
||||||
|
|
||||||
**We recommend setting this power level as soon as the bot joins your room** (and before you create new rules), so that it can apply rules as soon as they are available. If the bot is under-privileged, it may fail to apply protections and may not retry for a while (or until your restart it).
|
|
||||||
|
|
||||||
### Subscribing to a public policy list
|
|
||||||
|
|
||||||
We recommend **subscribing to a public [policy list](https://the-draupnir-project.github.io/draupnir-documentation/concepts/policy-lists)** using the [watch command](https://the-draupnir-project.github.io/draupnir-documentation/moderator/managing-policy-lists#using-draupnirs-watch-command-to-subscribe-to-policy-rooms).
|
|
||||||
|
|
||||||
Polcy lists are maintained in Matrix rooms. A popular policy list is maintained in the public `#community-moderation-effort-bl:neko.dev` room.
|
|
||||||
|
|
||||||
You can tell Draupnir to subscribe to it by sending the following command to the Management Room: `!draupnir watch #community-moderation-effort-bl:neko.dev`
|
|
||||||
|
|
||||||
#### Creating your own policy lists and rules
|
|
||||||
|
|
||||||
We also recommend **creating your own policy lists** with the [list create](https://the-draupnir-project.github.io/draupnir-documentation/moderator/managing-policy-lists#using-draupnirs-list-create-command-to-create-a-policy-room) command.
|
|
||||||
|
|
||||||
You can do so by sending the following command to the Management Room: `!draupnir list create my-bans my-bans-bl`. This will create a policy list having a name (shortcode) of `my-bans` and stored in a public `#my-bans-bl:example.com` room on your server. As soon as you run this command, the bot will invite you to the policy list room.
|
|
||||||
|
|
||||||
A policy list does nothing by itself, so the next step is **adding some rules to your policy list**. Policies target a so-called `entity` (one of: `user`, `room` or `server`). These entities are mentioned on the [policy lists](https://the-draupnir-project.github.io/draupnir-documentation/concepts/policy-lists) documentation page and in the Matrix Spec [here](https://spec.matrix.org/v1.11/client-server-api/#mban-recommendation).
|
|
||||||
|
|
||||||
The simplest and most useful entity to target is `user`. Below are a few examples using the [ban command](https://the-draupnir-project.github.io/draupnir-documentation/moderator/managing-users#the-ban-command) and targeting users.
|
|
||||||
|
|
||||||
To create rules, you run commands in the Management Room (**not** in the policy list room).
|
|
||||||
|
|
||||||
- (ban a single user on a given homeserver): `!draupnir ban @someone:example.com my-bans Rude to others`
|
|
||||||
- (ban all users on a given homeserver by using a [wildcard](https://the-draupnir-project.github.io/draupnir-documentation/moderator/managing-users#wildcards)): `!draupnir ban @*:example.org my-bans Spam server - all users are fake`
|
|
||||||
|
|
||||||
As a result of running these commands, you may observe:
|
|
||||||
|
|
||||||
- Draupnir creating `m.policy.rule.user` state events in the `#my-bans-bl:example.com` room on your server
|
|
||||||
- applying these rules against all rooms that Draupnir is an Administrator in
|
|
||||||
|
|
||||||
You can undo bans with the [unban command](https://the-draupnir-project.github.io/draupnir-documentation/moderator/managing-users#the-unban-command).
|
|
||||||
|
|
||||||
### Enabling built-in protections
|
|
||||||
|
|
||||||
You can also **turn on various built-in [protections](https://the-draupnir-project.github.io/draupnir-documentation/protections)** like `JoinWaveShortCircuit` ("If X amount of users join in Y time, set the room to invite-only").
|
|
||||||
|
|
||||||
To **see which protections are available and which are enabled**, send a `!draupnir protections` command to the Management Room.
|
|
||||||
|
|
||||||
To **see the configuration options for a given protection**, send a `!draupnir config get PROTECTION_NAME` (e.g. `!draupnir config get JoinWaveShortCircuit`).
|
|
||||||
|
|
||||||
To **set a specific option for a given protection**, send a command like this: `!draupnir config set PROTECTION_NAME.OPTION VALUE` (e.g. `!draupnir config set JoinWaveShortCircuit.timescaleMinutes 30`).
|
|
||||||
|
|
||||||
To **enable a given protection**, send a command like this: `!draupnir enable PROTECTION_NAME` (e.g. `!draupnir enable JoinWaveShortCircuit`).
|
|
||||||
|
|
||||||
To **disable a given protection**, send a command like this: `!draupnir disable PROTECTION_NAME` (e.g. `!draupnir disable JoinWaveShortCircuit`).
|
|
||||||
|
|
||||||
|
|
||||||
## Extending the configuration
|
|
||||||
|
|
||||||
You can configure additional options by adding the `matrix_bot_draupnir_configuration_extension_yaml` variable to your `inventory/host_vars/matrix.example.com/vars.yml` file.
|
|
||||||
|
|
||||||
For example to change draupnir's `recordIgnoredInvites` option to `true` you would add the following to your `vars.yml` file.
|
For example to change draupnir's `recordIgnoredInvites` option to `true` you would add the following to your `vars.yml` file.
|
||||||
|
|
||||||
@ -213,14 +99,11 @@ matrix_bot_draupnir_configuration_extension_yaml: |
|
|||||||
|
|
||||||
Draupnir supports two methods to receive reports in the management room.
|
Draupnir supports two methods to receive reports in the management room.
|
||||||
|
|
||||||
The first method intercepts the report API endpoint of the client-server API, which requires integration with the reverse proxy in front of the homeserver. If you are using traefik, this playbook can set this up for you:
|
The first method intercepts the report API endpoint of the client-server API, which requires integration with the reverse proxy in front of the homeserver.
|
||||||
|
While this playbook uses reverse proxies, it does not yet implement this.
|
||||||
```yaml
|
|
||||||
matrix_bot_draupnir_abuse_reporting_enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
The other method polls an synapse admin API endpoint and is hence only available when using synapse and when the Draupnir user is an admin user (see step 1). To enable it, set `pollReports: true` in Draupnir's config:
|
|
||||||
|
|
||||||
|
The other method polls an synapse admin API endpoint and is hence only available when using synapse and when the Draupnir user is an admin user (see step 1).
|
||||||
|
To enable it, set `pollReports: true` in Draupnir's config:
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_draupnir_configuration_extension_yaml: |
|
matrix_bot_draupnir_configuration_extension_yaml: |
|
||||||
pollReports: true
|
pollReports: true
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
# Setting up Go-NEB (optional)
|
# Setting up Go-NEB (optional)
|
||||||
|
|
||||||
**Note**: [Go-NEB](https://github.com/matrix-org/go-neb) is now an archived (**unmaintained**) project. We recommend not bothering with installing it. While not a 1:1 replacement, the bridge's author suggests taking a look at [matrix-hookshot](https://github.com/matrix-org/matrix-hookshot) as a replacement, which can also be installed using [this playbook](configuring-playbook-bridge-hookshot.md). Consider using that bot instead of this one.
|
|
||||||
|
|
||||||
The playbook can install and configure [Go-NEB](https://github.com/matrix-org/go-neb) for you.
|
The playbook can install and configure [Go-NEB](https://github.com/matrix-org/go-neb) for you.
|
||||||
|
|
||||||
Go-NEB is a Matrix bot written in Go. It is the successor to Matrix-NEB, the original Matrix bot written in Python.
|
Go-NEB is a Matrix bot written in Go. It is the successor to Matrix-NEB, the original Matrix bot written in Python.
|
||||||
@ -26,9 +24,34 @@ ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=bot.go-neb
|
|||||||
Once the user is created you can [obtain an access token](obtaining-access-tokens.md).
|
Once the user is created you can [obtain an access token](obtaining-access-tokens.md).
|
||||||
|
|
||||||
|
|
||||||
|
## Decide on a domain and path
|
||||||
|
|
||||||
|
By default, Go-NEB is configured to use its own dedicated domain (`goneb.DOMAIN`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
||||||
|
|
||||||
|
You can override the domain and path like this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Switch to the domain used for Matrix services (`matrix.DOMAIN`),
|
||||||
|
# so we won't need to add additional DNS records for Go-NEB.
|
||||||
|
matrix_bot_go_neb_hostname: "{{ matrix_server_fqn_matrix }}"
|
||||||
|
|
||||||
|
# Expose under the /go-neb subpath
|
||||||
|
matrix_bot_go_neb_path_prefix: /go-neb
|
||||||
|
```
|
||||||
|
|
||||||
|
**NOTE**: When using `matrix-nginx-proxy` instead of Traefik, you won't be able to override the path prefix. You can only override the domain, but that needs to happen using another variable: `matrix_server_fqn_go_neb` (e.g. `matrix_server_fqn_go_neb: "mybot.{{ matrix_domain }}"`).
|
||||||
|
|
||||||
|
|
||||||
|
## Adjusting DNS records
|
||||||
|
|
||||||
|
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Go-NEB domain to the Matrix server.
|
||||||
|
|
||||||
|
If you've decided to reuse the `matrix.` domain, you won't need to do any extra DNS configuration.
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable Go-NEB, 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.DOMAIN/vars.yml` file (adapt to your needs):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_go_neb_enabled: true
|
matrix_bot_go_neb_enabled: true
|
||||||
@ -39,7 +62,7 @@ matrix_bot_go_neb_clients:
|
|||||||
- UserID: "@goneb:{{ matrix_domain }}"
|
- UserID: "@goneb:{{ matrix_domain }}"
|
||||||
AccessToken: "MDASDASJDIASDJASDAFGFRGER"
|
AccessToken: "MDASDASJDIASDJASDAFGFRGER"
|
||||||
DeviceID: "DEVICE1"
|
DeviceID: "DEVICE1"
|
||||||
HomeserverURL: "{{ matrix_addons_homeserver_client_api_url }}"
|
HomeserverURL: "{{ matrix_homeserver_container_url }}"
|
||||||
Sync: true
|
Sync: true
|
||||||
AutoJoinRooms: true
|
AutoJoinRooms: true
|
||||||
DisplayName: "Go-NEB!"
|
DisplayName: "Go-NEB!"
|
||||||
@ -48,7 +71,7 @@ matrix_bot_go_neb_clients:
|
|||||||
- UserID: "@another_goneb:{{ matrix_domain }}"
|
- UserID: "@another_goneb:{{ matrix_domain }}"
|
||||||
AccessToken: "MDASDASJDIASDJASDAFGFRGER"
|
AccessToken: "MDASDASJDIASDJASDAFGFRGER"
|
||||||
DeviceID: "DEVICE2"
|
DeviceID: "DEVICE2"
|
||||||
HomeserverURL: "{{ matrix_addons_homeserver_client_api_url }}"
|
HomeserverURL: "{{ matrix_homeserver_container_url }}"
|
||||||
Sync: false
|
Sync: false
|
||||||
AutoJoinRooms: false
|
AutoJoinRooms: false
|
||||||
DisplayName: "Go-NEB!"
|
DisplayName: "Go-NEB!"
|
||||||
@ -127,7 +150,7 @@ matrix_bot_go_neb_services:
|
|||||||
Config:
|
Config:
|
||||||
feeds:
|
feeds:
|
||||||
"http://lorem-rss.herokuapp.com/feed?unit=second&interval=60":
|
"http://lorem-rss.herokuapp.com/feed?unit=second&interval=60":
|
||||||
rooms: ["!qporfwt:{{ matrix_domain }}"]
|
rooms: ["!qmElAGdFYCHoCJuaNt:{{ matrix_domain }}"]
|
||||||
must_include:
|
must_include:
|
||||||
author:
|
author:
|
||||||
- author1
|
- author1
|
||||||
@ -153,15 +176,15 @@ matrix_bot_go_neb_services:
|
|||||||
RealmID: "github_realm"
|
RealmID: "github_realm"
|
||||||
ClientUserID: "@YOUR_USER_ID:{{ matrix_domain }}" # needs to be an authenticated user so Go-NEB can create webhooks. Check the UserID field in the github_realm in matrix_bot_go_neb_sessions.
|
ClientUserID: "@YOUR_USER_ID:{{ matrix_domain }}" # needs to be an authenticated user so Go-NEB can create webhooks. Check the UserID field in the github_realm in matrix_bot_go_neb_sessions.
|
||||||
Rooms:
|
Rooms:
|
||||||
"!qporfwt:example.com":
|
"!someroom:id":
|
||||||
Repos:
|
Repos:
|
||||||
"element-hq/synapse":
|
"matrix-org/synapse":
|
||||||
Events: ["push", "issues"]
|
Events: ["push", "issues"]
|
||||||
"matrix-org/dendron":
|
"matrix-org/dendron":
|
||||||
Events: ["pull_request"]
|
Events: ["pull_request"]
|
||||||
"!aaabaa:example.com":
|
"!anotherroom:id":
|
||||||
Repos:
|
Repos:
|
||||||
"element-hq/synapse":
|
"matrix-org/synapse":
|
||||||
Events: ["push", "issues"]
|
Events: ["push", "issues"]
|
||||||
"matrix-org/dendron":
|
"matrix-org/dendron":
|
||||||
Events: ["pull_request"]
|
Events: ["pull_request"]
|
||||||
@ -172,7 +195,7 @@ matrix_bot_go_neb_services:
|
|||||||
Config:
|
Config:
|
||||||
Hooks:
|
Hooks:
|
||||||
"hook1":
|
"hook1":
|
||||||
RoomID: "!qporfwt:example.com"
|
RoomID: "!someroom:id"
|
||||||
MessageType: "m.text" # default is m.text
|
MessageType: "m.text" # default is m.text
|
||||||
|
|
||||||
- ID: "alertmanager_service"
|
- ID: "alertmanager_service"
|
||||||
@ -186,40 +209,16 @@ matrix_bot_go_neb_services:
|
|||||||
webhook_url: "http://localhost/services/hooks/YWxlcnRtYW5hZ2VyX3NlcnZpY2U"
|
webhook_url: "http://localhost/services/hooks/YWxlcnRtYW5hZ2VyX3NlcnZpY2U"
|
||||||
# Each room will get the notification with the alert rendered with the given template
|
# Each room will get the notification with the alert rendered with the given template
|
||||||
rooms:
|
rooms:
|
||||||
"!qporfwt:example.com":
|
"!someroomid:domain.tld":
|
||||||
text_template: "{% raw %}{{range .Alerts -}} [{{ .Status }}] {{index .Labels \"alertname\" }}: {{index .Annotations \"description\"}} {{ end -}}{% endraw %}"
|
text_template: "{% raw %}{{range .Alerts -}} [{{ .Status }}] {{index .Labels \"alertname\" }}: {{index .Annotations \"description\"}} {{ end -}}{% endraw %}"
|
||||||
html_template: "{% raw %}{{range .Alerts -}} {{ $severity := index .Labels \"severity\" }} {{ if eq .Status \"firing\" }} {{ if eq $severity \"critical\"}} <font color='red'><b>[FIRING - CRITICAL]</b></font> {{ else if eq $severity \"warning\"}} <font color='orange'><b>[FIRING - WARNING]</b></font> {{ else }} <b>[FIRING - {{ $severity }}]</b> {{ end }} {{ else }} <font color='green'><b>[RESOLVED]</b></font> {{ end }} {{ index .Labels \"alertname\"}} : {{ index .Annotations \"description\"}} <a href=\"{{ .GeneratorURL }}\">source</a><br/>{{end -}}{% endraw %}"
|
html_template: "{% raw %}{{range .Alerts -}} {{ $severity := index .Labels \"severity\" }} {{ if eq .Status \"firing\" }} {{ if eq $severity \"critical\"}} <font color='red'><b>[FIRING - CRITICAL]</b></font> {{ else if eq $severity \"warning\"}} <font color='orange'><b>[FIRING - WARNING]</b></font> {{ else }} <b>[FIRING - {{ $severity }}]</b> {{ end }} {{ else }} <font color='green'><b>[RESOLVED]</b></font> {{ end }} {{ index .Labels \"alertname\"}} : {{ index .Annotations \"description\"}} <a href=\"{{ .GeneratorURL }}\">source</a><br/>{{end -}}{% endraw %}"
|
||||||
msg_type: "m.text" # Must be either `m.text` or `m.notice`
|
msg_type: "m.text" # Must be either `m.text` or `m.notice`
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the Go-NEB URL
|
|
||||||
|
|
||||||
By default, this playbook installs Go-NEB on the `goneb.` subdomain (`goneb.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `matrix_bot_go_neb_hostname` and `matrix_bot_go_neb_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
|
||||||
# so we won't need to add additional DNS records for Go-NEB.
|
|
||||||
matrix_bot_go_neb_hostname: "{{ matrix_server_fqn_matrix }}"
|
|
||||||
|
|
||||||
# Expose under the /buscarron subpath
|
|
||||||
matrix_bot_go_neb_path_prefix: /go-neb
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Go-NEB domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `goneb`. 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
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
After potentially [adjusting DNS records](#adjusting-dns-records) and configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```
|
```
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
@ -228,7 +227,7 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use the bot, invite it to any existing Matrix room (`/invite @whatever_you_chose:example.com` where `example.com` is your base domain, not the `matrix.` domain, make sure you have permission from the room owner if that's not you).
|
To use the bot, invite it to any existing Matrix room (`/invite @whatever_you_chose:DOMAIN` where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain, make sure you have permission from the room owner if that's not you).
|
||||||
|
|
||||||
Basic usage is like this: `!echo hi` or `!imgur puppies` or `!giphy matrix`
|
Basic usage is like this: `!echo hi` or `!imgur puppies` or `!giphy matrix`
|
||||||
|
|
||||||
|
@ -1,19 +1,23 @@
|
|||||||
# Setting up Honoroit (optional)
|
# Setting up Honoroit (optional)
|
||||||
|
|
||||||
The playbook can install and configure [Honoroit](https://github.com/etkecc/honoroit) for you.
|
The playbook can install and configure [Honoroit](https://gitlab.com/etke.cc/honoroit) for you.
|
||||||
|
|
||||||
It's a bot you can use to setup **your own helpdesk on matrix**
|
It's a bot you can use to setup **your own helpdesk on matrix**
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/etkecc/honoroit#how-it-looks-like) to learn what it does with screenshots and why it might be useful to you.
|
See the project's [documentation](https://gitlab.com/etke.cc/honoroit#how-it-looks-like) to learn what it does with screenshots and why it might be useful to you.
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable Honoroit, 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.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_honoroit_enabled: true
|
matrix_bot_honoroit_enabled: true
|
||||||
|
|
||||||
|
# Uncomment and adjust if you'd like to change the hostname or path
|
||||||
|
# matrix_bot_honoroit_hostname: "{{ matrix_server_fqn_matrix }}"
|
||||||
|
# matrix_bot_honoroit_path_prefix: /honoroit
|
||||||
|
|
||||||
# Uncomment and adjust this part if you'd like to use a username different than the default
|
# Uncomment and adjust this part if you'd like to use a username different than the default
|
||||||
# matrix_bot_honoroit_login: honoroit
|
# matrix_bot_honoroit_login: honoroit
|
||||||
|
|
||||||
@ -21,34 +25,13 @@ matrix_bot_honoroit_enabled: true
|
|||||||
matrix_bot_honoroit_password: PASSWORD_FOR_THE_BOT
|
matrix_bot_honoroit_password: PASSWORD_FOR_THE_BOT
|
||||||
|
|
||||||
# Adjust this to your room ID
|
# Adjust this to your room ID
|
||||||
matrix_bot_honoroit_roomid: "!qporfwt:{{ matrix_domain }}"
|
matrix_bot_honoroit_roomid: "!yourRoomID:DOMAIN"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the Honoroit URL
|
|
||||||
|
|
||||||
By default, this playbook installs Honoroit on the `matrix.` subdomain, at the `/honoroit` path (https://matrix.example.com/honoroit). This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_bot_honoroit_hostname` and `matrix_bot_honoroit_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix
|
|
||||||
matrix_bot_honoroit_hostname: honoroit.example.com
|
|
||||||
matrix_bot_honoroit_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the Honoroit domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start
|
||||||
@ -63,8 +46,8 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-use
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use the bot, invite the `@honoroit:example.com` to the room you specified in config, after that any Matrix user can send a message to the `@honoroit:example.com` to start a new thread in that room.
|
To use the bot, invite the `@honoroit:DOMAIN` to the room you specified in config, after that any matrix user can send a message to the `@honoroit:DOMAIN` to start a new thread in that room.
|
||||||
|
|
||||||
Send `!ho help` to the room to see the bot's help menu for additional commands.
|
Send `!ho help` to the room to see the bot's help menu for additional commands.
|
||||||
|
|
||||||
You can also refer to the upstream [documentation](https://github.com/etkecc/honoroit#features).
|
You can also refer to the upstream [documentation](https://gitlab.com/etke.cc/honoroit#features).
|
||||||
|
@ -2,20 +2,24 @@
|
|||||||
|
|
||||||
The playbook can install and configure [matrix-registration-bot](https://github.com/moan0s/matrix-registration-bot) for you.
|
The playbook can install and configure [matrix-registration-bot](https://github.com/moan0s/matrix-registration-bot) for you.
|
||||||
|
|
||||||
The bot allows you to easily **create and manage registration tokens** aka. invitation codes. It can be used for an invitation-based server, where you invite someone by sending them a registration token (tokens look like this: `rbalQ0zkaDSRQCOp`). They can register as per normal but have to provide a valid registration token in the final step of the registration process.
|
The bot allows you to easily **create and manage registration tokens** aka. invitation codes.
|
||||||
|
It can be used for an invitation-based server,
|
||||||
|
where you invite someone by sending them a registration token (loook like this: `rbalQ0zkaDSRQCOp`). They can register as normal but have to provide a valid registration token in a final step of the registration.
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/moan0s/matrix-registration-bot#supported-commands) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/moan0s/matrix-registration-bot#supported-commands) to learn what it
|
||||||
|
does and why it might be useful to you.
|
||||||
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
To enable the bot, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
To enable the bot, add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_matrix_registration_bot_enabled: true
|
matrix_bot_matrix_registration_bot_enabled: true
|
||||||
|
|
||||||
# By default, the playbook will set use the bot with a username like this: `@bot.matrix-registration-bot:example.com`.
|
#By default, the playbook will set use the bot with a username like
|
||||||
# Uncomment and adjust this part if you'd like to use a username different than the default
|
## this: `@bot.matrix-registration-bot:DOMAIN`.
|
||||||
|
# To use a different username, uncomment & adjust the variable.
|
||||||
# matrix_bot_matrix_registration_bot_matrix_user_id_localpart: bot.matrix-registration-bot
|
# matrix_bot_matrix_registration_bot_matrix_user_id_localpart: bot.matrix-registration-bot
|
||||||
|
|
||||||
# Generate a strong password here. Consider generating it with `pwgen -s 64 1`
|
# Generate a strong password here. Consider generating it with `pwgen -s 64 1`
|
||||||
@ -28,23 +32,28 @@ matrix_synapse_enable_registration: true
|
|||||||
matrix_synapse_registration_requires_token: true
|
matrix_synapse_registration_requires_token: true
|
||||||
```
|
```
|
||||||
|
|
||||||
The bot account will be created automatically.
|
The bot account will be automatically created.
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use the bot, start a chat with `@bot.matrix-registration-bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
To use the bot, message `@bot.matrix-registration-bot:DOMAIN` (where `DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
In this room send `help` and the bot will reply with all options.
|
In this room send `help` and the bot will reply with all options.
|
||||||
|
|
||||||
You can also refer to the upstream [Usage documentation](https://github.com/moan0s/matrix-registration-bot#supported-commands).
|
You can also refer to the upstream [Usage documentation](https://github.com/moan0s/matrix-registration-bot#supported-commands).
|
||||||
|
If you have any questions, or if you need help setting it up, read the [troublshooting guide](https://github.com/moan0s/matrix-registration-bot/blob/main/docs/troubleshooting.md)
|
||||||
|
or join [#matrix-registration-bot:hyteck.de](https://matrix.to/#/#matrix-registration-bot:hyteck.de).
|
||||||
|
|
||||||
If you have any questions, or if you need help setting it up, read the [troublshooting guide](https://github.com/moan0s/matrix-registration-bot/blob/main/docs/troubleshooting.md) or join [#matrix-registration-bot:hyteck.de](https://matrix.to/#/#matrix-registration-bot:hyteck.de).
|
To clean the cache (session&encryption data) after you changed the bot's username, changed the login methon form access_token to password etc.. you can use
|
||||||
|
|
||||||
To clean the cache (session & encryption data) after you changed the bot's username, changed the login method from access_token to password etc... you can use:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
just run-tags bot-matrix-registration-bot-clean-cache
|
just run-tags bot-matrix-registration-bot-clean-cache
|
||||||
|
@ -9,7 +9,7 @@ See the project's [documentation](https://github.com/anoadragon453/matrix-remind
|
|||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
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.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_matrix_reminder_bot_enabled: true
|
matrix_bot_matrix_reminder_bot_enabled: true
|
||||||
@ -27,7 +27,7 @@ matrix_bot_matrix_reminder_bot_reminders_timezone: Europe/London
|
|||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start
|
||||||
@ -42,9 +42,9 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-use
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To use the bot, start a chat with `@bot.matrix-reminder-bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
To use the bot, start a chat with `@bot.matrix-reminder-bot:DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
You can also add the bot to any existing Matrix room (`/invite @bot.matrix-reminder-bot:example.com`).
|
You can also add the bot to any existing Matrix room (`/invite @bot.matrix-reminder-bot:DOMAIN`).
|
||||||
|
|
||||||
Basic usage is like this: `!remindme in 2 minutes; This is a test`
|
Basic usage is like this: `!remindme in 2 minutes; This is a test`
|
||||||
|
|
||||||
|
@ -2,70 +2,57 @@
|
|||||||
|
|
||||||
The playbook can install and configure [maubot](https://github.com/maubot/maubot) for you.
|
The playbook can install and configure [maubot](https://github.com/maubot/maubot) for you.
|
||||||
|
|
||||||
After setting up maubot, you can use the web management interface to make it do things. The default location of the management interface is `matrix.example.com/_matrix/maubot/`
|
After setting up maubot, you can use the web management interface to make it do things.
|
||||||
|
The default location of the management interface is `matrix.<your-domain>/_matrix/maubot/`
|
||||||
|
|
||||||
See the project's [documentation](https://docs.mau.fi/maubot/usage/basic.html) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://docs.mau.fi/maubot/usage/basic.html) to learn what it
|
||||||
|
does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable maubot, 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.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_maubot_enabled: true
|
matrix_bot_maubot_enabled: true
|
||||||
|
|
||||||
# Uncomment and adjust this part if you'd like to use a username different than the default
|
|
||||||
# matrix_bot_maubot_login: bot.maubot
|
|
||||||
|
|
||||||
# Generate a strong password here. Consider generating it with `pwgen -s 64 1`
|
|
||||||
matrix_bot_maubot_initial_password: PASSWORD_FOR_THE_BOT
|
|
||||||
|
|
||||||
matrix_bot_maubot_admins:
|
matrix_bot_maubot_admins:
|
||||||
- yourusername: securepassword
|
- yourusername: securepassword
|
||||||
```
|
```
|
||||||
|
|
||||||
You can add multiple admins. The admin accounts are only used to access the maubot administration interface.
|
You can add multiple admins. The admin accounts are not connected to any matrix ID and are only used to access the
|
||||||
|
maubot administration interface.
|
||||||
|
|
||||||
### Adjusting the maubot URL
|
|
||||||
|
|
||||||
By default, this playbook installs maubot on the `matrix.` subdomain, at the `/_matrix/maubot/` path (https://matrix.example.com/_matrix/maubot/). This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_bot_maubot_hostname` and `matrix_bot_maubot_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix
|
|
||||||
matrix_bot_maubot_hostname: maubot.example.com
|
|
||||||
matrix_bot_maubot_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the maubot domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all`
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
**Notes**:
|
```
|
||||||
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
- if you change the bot password (`matrix_bot_maubot_initial_password` in your `vars.yml` file) subsequently, the bot user's credentials on the homeserver won't be updated automatically. If you'd like to change the bot user's password, use a tool like [synapse-admin](configuring-playbook-synapse-admin.md) to change it, and then update `matrix_bot_maubot_initial_password` to let the bot know its new password
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
By default, you can visit `matrix.example.com/_matrix/maubot/` to manage your available plugins, clients and instances.
|
You can visit `matrix.<your-domain>/_matrix/maubot/` to manage your available plugins, clients and instances.
|
||||||
|
|
||||||
You should start in the following order
|
You should start in the following order
|
||||||
1. **Create one or more clients**: A client is a Matrix account which the bot will use to message. By default, the playbook creates a `bot.maubot` account (as per the configuration above). You only need to [obtain an access token](#obtaining-an-access-token) for it
|
1. **Create one or more clients:** A client is a matrix account which the bot will use to message.
|
||||||
2. **Upload some Plugins**: Plugins can be obtained from [here](https://github.com/maubot/maubot#plugins) or any other source.
|
2. **Upload some Plugins:** Plugins can be obtained from [here](https://github.com/maubot/maubot#plugins) or any other source.
|
||||||
3. **Create an instance**: An instance is the actual bot. You have to specify a client which the bot instance will use and the plugin (how the bot will behave)
|
3. **Create an instance:** An instance is the actual bot. You have to specify a client which the bot instance will use
|
||||||
|
and the plugin (how the bot will behave)
|
||||||
|
|
||||||
## Obtaining an access token
|
To add a client you first need to create an account and obtain a valid access token.
|
||||||
|
|
||||||
This can be done via `mbc login` then `mbc auth` (see the [maubot documentation](https://docs.mau.fi/maubot/usage/cli/auth.html)). To run these commands, you'll first need to `exec` into the maubot container with `docker exec -it matrix-bot-maubot sh`.
|
## Registering the bot user
|
||||||
|
|
||||||
Alternatively, you can follow our generic [obtain an access token](obtaining-access-tokens.md) documentation. Be aware that you'd better use the **Obtain an access token via curl** method (not **Obtain an access token via Element**) as the latter will give your bot issues in encrypted rooms. Read [more](https://docs.mau.fi/maubot/usage/basic.html#creating-clients).
|
You **need to register the bot user manually** before setting up the bot. You can use the playbook to [register a new user](registering-users.md):
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=bot.maubot password=PASSWORD_FOR_THE_BOT admin=yes' --tags=register-user
|
||||||
|
```
|
||||||
|
|
||||||
|
Choose a strong password for the bot. You can generate a good password with a command like this: `pwgen -s 64 1`.
|
||||||
|
|
||||||
|
## Obtaining an admin access token
|
||||||
|
|
||||||
|
This can be done via `mbc login` then `mbc auth` (see the [maubot documentation](https://docs.mau.fi/maubot/usage/cli/auth.html)). To run these commands you'll need to open the bot docker container with `docker exec -it matrix-bot-maubot sh`
|
||||||
|
Alternatively, use Element or curl to [obtain an access token](obtaining-access-tokens.md). However these two methods won't allow the bot to work in encrypted rooms.
|
||||||
|
@ -31,65 +31,22 @@ Refer to the documentation on [how to obtain an access token](obtaining-access-t
|
|||||||
|
|
||||||
You will need to prevent Synapse from rate limiting the bot's account. This is not an optional step. If you do not do this step Mjolnir will crash. This can be done using Synapse's [admin API](https://matrix-org.github.io/synapse/latest/admin_api/user_admin_api.html#override-ratelimiting-for-users). Please ask for help if you are uncomfortable with these steps or run into issues.
|
You will need to prevent Synapse from rate limiting the bot's account. This is not an optional step. If you do not do this step Mjolnir will crash. This can be done using Synapse's [admin API](https://matrix-org.github.io/synapse/latest/admin_api/user_admin_api.html#override-ratelimiting-for-users). Please ask for help if you are uncomfortable with these steps or run into issues.
|
||||||
|
|
||||||
If your Synapse Admin API is exposed to the internet for some reason like running the Synapse Admin Role [Link](/docs/configuring-playbook-synapse-admin.md) or running `matrix_synapse_container_labels_public_client_synapse_admin_api_enabled: true` in your playbook config. If your API is not externally exposed you should still be able to on the local host for your synapse run these commands.
|
If your Synapse Admin API is exposed to the internet for some reason like running the Synapse Admin Role [Link](/docs/configuring-playbook-synapse-admin.md) or running `matrix_nginx_proxy_proxy_matrix_client_api_forwarded_location_synapse_admin_api_enabled: true` in your playbook config. If your API is not externally exposed you should still be able to on the local host for your synapse run these commands.
|
||||||
|
|
||||||
The following command works on semi up to date Windows 10 installs and All Windows 11 installations and other systems that ship curl. `curl --header "Authorization: Bearer <access_token>" -X POST https://matrix.example.com/_synapse/admin/v1/users/@example:example.com/override_ratelimit` Replace `@example:example.com` with the MXID of your Mjolnir and example.com with your homeserver domain. You can easily obtain an access token for a homeserver admin account the same way you can obtain an access token for Mjolnir itself. If you made Mjolnir Admin you can just use the Mjolnir token.
|
The following command works on semi up to date Windows 10 installs and All Windows 11 installations and other systems that ship curl. `curl --header "Authorization: Bearer <access_token>" -X POST https://matrix.example.com/_synapse/admin/v1/users/@example:example.com/override_ratelimit` Replace `@example:example.com` with the MXID of your Mjolnir and example.com with your homeserver domain. You can easily obtain an access token for a homeserver admin account the same way you can obtain an access token for Mjolnir it self. If you made Mjolnir Admin you can just use the Mjolnir token.
|
||||||
|
|
||||||
## 4. Create a management room
|
## 4. Create a management room
|
||||||
|
|
||||||
Using your own account, create a new invite only room that you will use to manage the bot. This is the room where you will see the status of the bot and where you will send commands to the bot, such as the command to ban a user from another room. Anyone in this room can control the bot so it is important that you only invite trusted users to this room.
|
Using your own account, create a new invite only room that you will use to manage the bot. This is the room where you will see the status of the bot and where you will send commands to the bot, such as the command to ban a user from another room. Anyone in this room can control the bot so it is important that you only invite trusted users to this room. The room must be unencrypted since the playbook does not support installing Pantalaimon yet.
|
||||||
|
|
||||||
If you make the management room encrypted (E2EE), then you MUST enable and use Pantalaimon (see below).
|
Once you have created the room you need to copy the room ID so you can tell the bot to use that room. In Element you can do this by going to the room's settings, clicking Advanced, and then coping the internal room ID. The room ID will look something like `!QvgVuKq0ha8glOLGMG:DOMAIN`.
|
||||||
|
|
||||||
Once you have created the room you need to copy the room ID so you can tell the bot to use that room. In Element you can do this by going to the room's settings, clicking Advanced, and then copying the internal room ID. The room ID will look something like `!qporfwt:example.com`.
|
Finally invite the `@bot.mjolnir:DOMAIN` account you created earlier into the room.
|
||||||
|
|
||||||
Finally invite the `@bot.mjolnir:example.com` account you created earlier into the room.
|
|
||||||
|
|
||||||
|
|
||||||
## 5. Adjusting the playbook configuration
|
## 5. Adjusting the playbook configuration
|
||||||
|
|
||||||
Decide whether you want Mjolnir to be capable of operating in end-to-end encrypted (E2EE) rooms. This includes the management room and the moderated rooms. To support E2EE, Mjolnir needs to [use Pantalaimon](configuring-playbook-pantalaimon.md).
|
Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file (adapt to your needs):
|
||||||
|
|
||||||
### 5a. Configuration with E2EE support
|
|
||||||
|
|
||||||
When using Pantalaimon, Mjolnir will log in to its bot account itself through Pantalaimon, so configure its username and password.
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Enable Pantalaimon. See docs/configuring-playbook-pantalaimon.md
|
|
||||||
matrix_pantalaimon_enabled: true
|
|
||||||
|
|
||||||
# Enable Mjolnir
|
|
||||||
matrix_bot_mjolnir_enabled: true
|
|
||||||
|
|
||||||
# Tell Mjolnir to use Pantalaimon
|
|
||||||
matrix_bot_mjolnir_pantalaimon_use: true
|
|
||||||
|
|
||||||
# User name and password for the bot. Required when using Pantalaimon.
|
|
||||||
matrix_bot_mjolnir_pantalaimon_username: "MJOLNIR_USERNAME_FROM_STEP_1"
|
|
||||||
matrix_bot_mjolnir_pantalaimon_password: ### you should create a secure password for the bot account
|
|
||||||
|
|
||||||
matrix_bot_mjolnir_management_room: "ROOM_ID_FROM_STEP_4_GOES_HERE"
|
|
||||||
```
|
|
||||||
|
|
||||||
The playbook's `group_vars` will configure other required settings. If using this role separately without the playbook, you also need to configure the two URLs that Mjolnir uses to reach the homeserver, one through Pantalaimon and one "raw". This example is taken from the playbook's `group_vars`:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Endpoint URL that Mjolnir uses to interact with the Matrix homeserver (client-server API).
|
|
||||||
# Set this to the pantalaimon URL if you're using that.
|
|
||||||
matrix_bot_mjolnir_homeserver_url: "{{ 'http://matrix-pantalaimon:8009' if matrix_bot_mjolnir_pantalaimon_use else matrix_addons_homeserver_client_api_url }}"
|
|
||||||
|
|
||||||
# Endpoint URL that Mjolnir could use to fetch events related to reports (client-server API and /_synapse/),
|
|
||||||
# only set this to the public-internet homeserver client API URL, do NOT set this to the pantalaimon URL.
|
|
||||||
matrix_bot_mjolnir_raw_homeserver_url: "{{ matrix_addons_homeserver_client_api_url }}"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5b. Configuration without E2EE support
|
|
||||||
|
|
||||||
When NOT using Pantalaimon, Mjolnir does not log in by itself and you must give it an access token for its bot account.
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
|
||||||
|
|
||||||
You must replace `ACCESS_TOKEN_FROM_STEP_2_GOES_HERE` and `ROOM_ID_FROM_STEP_4_GOES_HERE` with the your own values.
|
You must replace `ACCESS_TOKEN_FROM_STEP_2_GOES_HERE` and `ROOM_ID_FROM_STEP_4_GOES_HERE` with the your own values.
|
||||||
|
|
||||||
@ -101,9 +58,9 @@ matrix_bot_mjolnir_access_token: "ACCESS_TOKEN_FROM_STEP_2_GOES_HERE"
|
|||||||
matrix_bot_mjolnir_management_room: "ROOM_ID_FROM_STEP_4_GOES_HERE"
|
matrix_bot_mjolnir_management_room: "ROOM_ID_FROM_STEP_4_GOES_HERE"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 6. Adding Mjolnir synapse antispam module (optional)
|
## 6. Adding mjolnir synapse antispam module (optional)
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file (adapt to your needs):
|
||||||
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@ -126,11 +83,11 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You can refer to the upstream [documentation](https://github.com/matrix-org/mjolnir) for additional ways to use and configure Mjolnir. Check out their [quickstart guide](https://github.com/matrix-org/mjolnir#quickstart-guide) for some basic commands you can give to the bot.
|
You can refer to the upstream [documentation](https://github.com/matrix-org/mjolnir) for additional ways to use and configure mjolnir. Check out their [quickstart guide](https://github.com/matrix-org/mjolnir#quickstart-guide) for some basic commands you can give to the bot.
|
||||||
|
|
||||||
You can configure additional options by adding the `matrix_bot_mjolnir_configuration_extension_yaml` variable to your `inventory/host_vars/matrix.example.com/vars.yml` file.
|
You can configure additional options by adding the `matrix_bot_mjolnir_configuration_extension_yaml` variable to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file.
|
||||||
|
|
||||||
For example to change Mjolnir's `recordIgnoredInvites` option to `true` you would add the following to your `vars.yml` file.
|
For example to change mjolnir's `recordIgnoredInvites` option to `true` you would add the following to your `vars.yml` file.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bot_mjolnir_configuration_extension_yaml: |
|
matrix_bot_mjolnir_configuration_extension_yaml: |
|
||||||
|
88
docs/configuring-playbook-bot-postmoogle.md
Normal file
88
docs/configuring-playbook-bot-postmoogle.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# Setting up Postmoogle (optional)
|
||||||
|
|
||||||
|
**Note**: email bridging can also happen via the [email2matrix](configuring-playbook-email2matrix.md) bridge supported by the playbook.
|
||||||
|
|
||||||
|
The playbook can install and configure [Postmoogle](https://gitlab.com/etke.cc/postmoogle) for you.
|
||||||
|
|
||||||
|
It's a bot/bridge you can use to forward emails to Matrix rooms.
|
||||||
|
Postmoogle runs an SMTP email server and allows you to assign mailbox addresses to Matrix rooms.
|
||||||
|
|
||||||
|
See the project's [documentation](https://gitlab.com/etke.cc/postmoogle) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
### Networking
|
||||||
|
|
||||||
|
Open the following ports on your server to be able to receive incoming emails:
|
||||||
|
|
||||||
|
- `25/tcp`: SMTP
|
||||||
|
- `587/tcp`: Submission (TLS-encrypted SMTP)
|
||||||
|
|
||||||
|
If you don't open these ports, you will still be able to send emails, but not receive any.
|
||||||
|
|
||||||
|
These port numbers are configurable via the `matrix_bot_postmoogle_smtp_host_bind_port` and `matrix_bot_postmoogle_submission_host_bind_port` variables, but other email servers will try to deliver on these default (standard) ports, so changing them is of little use.
|
||||||
|
|
||||||
|
|
||||||
|
### Adjusting the playbook configuration
|
||||||
|
|
||||||
|
Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_bot_postmoogle_enabled: true
|
||||||
|
|
||||||
|
# Uncomment and adjust this part if you'd like to use a username different than the default
|
||||||
|
# matrix_bot_postmoogle_login: postmoogle
|
||||||
|
|
||||||
|
# Generate a strong password here. Consider generating it with `pwgen -s 64 1`
|
||||||
|
matrix_bot_postmoogle_password: PASSWORD_FOR_THE_BOT
|
||||||
|
|
||||||
|
# Uncomment to add one or more admins to this bridge:
|
||||||
|
#
|
||||||
|
# matrix_bot_postmoogle_admins:
|
||||||
|
# - '@yourAdminAccount:domain.com'
|
||||||
|
#
|
||||||
|
# .. unless you've made yourself an admin of all bridges like this:
|
||||||
|
#
|
||||||
|
# matrix_admin: '@yourAdminAccount:domain.com'
|
||||||
|
```
|
||||||
|
|
||||||
|
### DNS
|
||||||
|
|
||||||
|
You will also need to add several DNS records so that Postmoogle can send emails.
|
||||||
|
See [Configuring DNS](configuring-dns.md).
|
||||||
|
|
||||||
|
|
||||||
|
## Installing
|
||||||
|
|
||||||
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start
|
||||||
|
```
|
||||||
|
|
||||||
|
**Notes**:
|
||||||
|
|
||||||
|
- the `ensure-matrix-users-created` playbook tag makes the playbook automatically create the bot's user account
|
||||||
|
|
||||||
|
- if you change the bot password (`matrix_bot_postmoogle_password` in your `vars.yml` file) subsequently, the bot user's credentials on the homeserver won't be updated automatically. If you'd like to change the bot user's password, use a tool like [synapse-admin](configuring-playbook-synapse-admin.md) to change it, and then update `matrix_bot_postmoogle_password` to let the bot know its new password
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
To use the bot, invite the `@postmoogle:DOMAIN` into a room you want to use as a mailbox.
|
||||||
|
|
||||||
|
Then send `!pm mailbox NAME` to expose this Matrix room as an inbox with the email address `NAME@matrix.domain`. Emails sent to that email address will be forwarded to the room.
|
||||||
|
|
||||||
|
Send `!pm help` to the room to see the bot's help menu for additional commands.
|
||||||
|
|
||||||
|
You can also refer to the upstream [documentation](https://gitlab.com/etke.cc/postmoogle).
|
||||||
|
|
||||||
|
### Debug/Logs
|
||||||
|
|
||||||
|
As with all other services, you can find their logs in [systemd-journald](https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html) by running something like `journalctl -fu matrix-bot-postmoogle`
|
||||||
|
|
||||||
|
The default logging level for this bridge is `INFO`, but you can increase it to `DEBUG` with the following additional configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_bot_postmoogle_loglevel: 'DEBUG'
|
||||||
|
```
|
@ -1,37 +1,34 @@
|
|||||||
# Setting up Appservice Discord bridging (optional)
|
# Setting up Appservice Discord (optional)
|
||||||
|
|
||||||
**Note**: bridging to [Discord](https://discordapp.com/) can also happen via the [mx-puppet-discord](configuring-playbook-bridge-mx-puppet-discord.md) and [mautrix-discord](configuring-playbook-bridge-mautrix-discord.md) bridges supported by the playbook.
|
**Note**: bridging to [Discord](https://discordapp.com/) can also happen via the [mx-puppet-discord](configuring-playbook-bridge-mx-puppet-discord.md) and [mautrix-discord](configuring-playbook-bridge-mautrix-discord.md) bridges supported by the playbook.
|
||||||
- For using as a Bot we are recommend the Appservice Discord bridge (the one being discussed here), because it supports plumbing.
|
- For using as a Bot we are recommend the Appservice Discord bridge (the one being discussed here), because it supports plumbing.
|
||||||
- For personal use we recommend the [mautrix-discord](configuring-playbook-bridge-mautrix-discord.md) bridge, because it is the most fully-featured and stable of the 3 Discord bridges supported by the playbook.
|
- For personal use we recommend the [mautrix-discord](configuring-playbook-bridge-mautrix-discord.md) bridge, because it is the most fully-featured and stable of the 3 Discord bridges supported by the playbook.
|
||||||
|
|
||||||
The playbook can install and configure [matrix-appservice-discord](https://github.com/matrix-org/matrix-appservice-discord) for you.
|
The playbook can install and configure [matrix-appservice-discord](https://github.com/Half-Shot/matrix-appservice-discord) for you.
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/matrix-org/matrix-appservice-discord/blob/master/README.md) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/Half-Shot/matrix-appservice-discord/blob/master/README.md) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
|
|
||||||
## Setup Instructions
|
## Setup Instructions
|
||||||
|
|
||||||
Instructions loosely based on [this](https://github.com/matrix-org/matrix-appservice-discord#setting-up).
|
Instructions loosely based on [this](https://github.com/Half-Shot/matrix-appservice-discord#setting-up).
|
||||||
|
|
||||||
1. Create a Discord Application [here](https://discordapp.com/developers/applications).
|
1. Create a Discord Application [here](https://discordapp.com/developers/applications).
|
||||||
2. Retrieve Client ID.
|
2. Retrieve Client ID.
|
||||||
3. Create a bot from the Bot tab and retrieve the Bot token.
|
3. Create a bot from the Bot tab and retrieve the Bot token.
|
||||||
4. Enable the bridge with the following configuration in your `vars.yml` file:
|
4. Enable the bridge with the following configuration in your `vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_appservice_discord_enabled: true
|
matrix_appservice_discord_enabled: true
|
||||||
matrix_appservice_discord_client_id: "YOUR DISCORD APP CLIENT ID"
|
matrix_appservice_discord_client_id: "YOUR DISCORD APP CLIENT ID"
|
||||||
matrix_appservice_discord_bot_token: "YOUR DISCORD APP BOT TOKEN"
|
matrix_appservice_discord_bot_token: "YOUR DISCORD APP BOT TOKEN"
|
||||||
```
|
```
|
||||||
|
|
||||||
5. As of Synapse 1.90.0, you will need to add the following to `matrix_synapse_configuration_extension_yaml` to enable the [backwards compatibility](https://matrix-org.github.io/synapse/latest/upgrade#upgrading-to-v1900) that this bridge needs:
|
5. As of Synapse 1.90.0, you will need to add the following to `matrix_synapse_configuration_extension_yaml` to enable the [backwards compatibility](https://matrix-org.github.io/synapse/latest/upgrade#upgrading-to-v1900) that this bridge needs:
|
||||||
|
```yaml
|
||||||
```yaml
|
matrix_synapse_configuration_extension_yaml: |
|
||||||
matrix_synapse_configuration_extension_yaml: |
|
use_appservice_legacy_authorization: true
|
||||||
use_appservice_legacy_authorization: true
|
```
|
||||||
```
|
*Note*: This deprecated method is considered insecure.
|
||||||
|
|
||||||
**Note**: This deprecated method is considered insecure.
|
|
||||||
|
|
||||||
6. If you've already installed Matrix services using the playbook before, you'll need to re-run it (`--tags=setup-all,start`). If not, proceed with [configuring other playbook services](configuring-playbook.md) and then with [Installing](installing.md). Get back to this guide once ready.
|
6. If you've already installed Matrix services using the playbook before, you'll need to re-run it (`--tags=setup-all,start`). If not, proceed with [configuring other playbook services](configuring-playbook.md) and then with [Installing](installing.md). Get back to this guide once ready.
|
||||||
|
|
||||||
@ -45,20 +42,20 @@ Self-service bridging allows you to bridge specific and existing Matrix rooms to
|
|||||||
matrix_appservice_discord_bridge_enableSelfServiceBridging: true
|
matrix_appservice_discord_bridge_enableSelfServiceBridging: true
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: If self-service bridging is not enabled, `!discord help` commands will return no results.
|
_Note: If self-service bridging is not enabled, `!discord help` commands will return no results._
|
||||||
|
|
||||||
Once self-service is enabled:
|
Once self-service is enabled:
|
||||||
|
|
||||||
1. Start a chat with `@_discord_bot:example.com` and say `!discord help bridge`.
|
1. Start a chat with `@_discord_bot:<YOUR_DOMAIN>` and say `!discord help bridge`.
|
||||||
2. Follow the instructions in the help output message. If the bot is not already in the Discord server, follow the provided invite link. This may require you to be a administrator of the Discord server.
|
2. Follow the instructions in the help output message. If the bot is not already in the Discord server, follow the provided invite link. This may require you to be a administrator of the Discord server.
|
||||||
|
|
||||||
**Note**: Encrypted Matrix rooms are not supported as of writing.
|
_Note: Encrypted Matrix rooms are not supported as of writing._
|
||||||
|
|
||||||
On the Discord side, you can say `!matrix help` to get a list of available commands to manage the bridge and Matrix users.
|
On the Discord side, you can say `!matrix help` to get a list of available commands to manage the bridge and Matrix users.
|
||||||
|
|
||||||
## Portal Bridging (Automatic)
|
## Portal Bridging (Automatic)
|
||||||
|
|
||||||
Through portal bridging, Matrix rooms will automatically be created by the bot and bridged to the relevant Discord room. This is done by simply joining a room with a specific name pattern (`#_discord_<guildID>_<channelID>`).
|
Through portal bridging, Matrix rooms will automatically be created by the bot and bridged to the relevant Discord room. This is done by simply joining a room with a specific name pattern (`#_discord_<guildID>_<channlID>`).
|
||||||
|
|
||||||
All Matrix rooms created this way are **listed publicly** by default, and you will not have admin permissions to change this. To get more control, [make yourself a room Administrator](#getting-administrator-access-in-a-portal-bridged-room). You can then unlist the room from the directory and change the join rules.
|
All Matrix rooms created this way are **listed publicly** by default, and you will not have admin permissions to change this. To get more control, [make yourself a room Administrator](#getting-administrator-access-in-a-portal-bridged-room). You can then unlist the room from the directory and change the join rules.
|
||||||
|
|
||||||
@ -80,9 +77,9 @@ By default, you won't have Administrator access in rooms created by the bridge.
|
|||||||
|
|
||||||
To adjust room access privileges or do various other things (change the room name subsequently, etc.), you'd wish to become an Administrator.
|
To adjust room access privileges or do various other things (change the room name subsequently, etc.), you'd wish to become an Administrator.
|
||||||
|
|
||||||
There's the Discord bridge's guide for [setting privileges on bridge managed rooms](https://github.com/matrix-org/matrix-appservice-discord/blob/master/docs/howto.md#set-privileges-on-bridge-managed-rooms). To do the same with our container setup, run the following command on the server:
|
There's the Discord bridge's guide for [setting privileges on bridge managed rooms](https://github.com/Half-Shot/matrix-appservice-discord/blob/master/docs/howto.md#set-privileges-on-bridge-managed-rooms). To do the same with our container setup, run the following command on the server:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker exec -it matrix-appservice-discord \
|
docker exec -it matrix-appservice-discord \
|
||||||
/bin/sh -c 'cp /cfg/registration.yaml /tmp/discord-registration.yaml && cd /tmp && node /build/tools/adminme.js -c /cfg/config.yaml -m "!qporfwt:example.com" -u "@USER:example.com" -p 100'
|
/bin/sh -c 'cp /cfg/registration.yaml /tmp/discord-registration.yaml && cd /tmp && node /build/tools/adminme.js -c /cfg/config.yaml -m "!ROOM_ID:SERVER" -u "@USER:SERVER" -p 100'
|
||||||
```
|
```
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up Appservice IRC bridging (optional)
|
# Setting up Appservice IRC (optional)
|
||||||
|
|
||||||
**Note**: bridging to [IRC](https://en.wikipedia.org/wiki/Internet_Relay_Chat) can also happen via the [Heisenbridge](configuring-playbook-bridge-heisenbridge.md) bridge supported by the playbook.
|
**Note**: bridging to [IRC](https://en.wikipedia.org/wiki/Internet_Relay_Chat) can also happen via the [Heisenbridge](configuring-playbook-bridge-heisenbridge.md) bridge supported by the playbook.
|
||||||
|
|
||||||
@ -6,9 +6,7 @@ The playbook can install and configure the [matrix-appservice-irc](https://githu
|
|||||||
|
|
||||||
See the project's [documentation](https://github.com/matrix-org/matrix-appservice-irc/blob/master/HOWTO.md) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/matrix-org/matrix-appservice-irc/blob/master/HOWTO.md) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
You'll need to use the following playbook configuration:
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_appservice_irc_enabled: true
|
matrix_appservice_irc_enabled: true
|
||||||
@ -60,10 +58,4 @@ matrix_appservice_irc_ircService_servers:
|
|||||||
lineLimit: 3
|
lineLimit: 3
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
You then need to start a chat with `@irc_bot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
You then need to start a chat with `@irc_bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
# Setting up Appservice Kakaotalk bridging (optional)
|
# Setting up Appservice Kakaotalk (optional)
|
||||||
|
|
||||||
The playbook can install and configure [matrix-appservice-kakaotalk](https://src.miscworks.net/fair/matrix-appservice-kakaotalk) for you. `matrix-appservice-kakaotalk` is a bridge to [Kakaotalk](https://www.kakaocorp.com/page/service/service/KakaoTalk?lang=ENG) based on [node-kakao](https://github.com/storycraft/node-kakao) (now unmaintained) and some [mautrix-facebook](https://github.com/mautrix/facebook) code.
|
The playbook can install and configure [matrix-appservice-kakaotalk](https://src.miscworks.net/fair/matrix-appservice-kakaotalk) for you. `matrix-appservice-kakaotalk` is a bridge to [Kakaotalk](https://www.kakaocorp.com/page/service/service/KakaoTalk?lang=ENG) based on [node-kakao](https://github.com/storycraft/node-kakao) (now unmaintained) and some [mautrix-facebook](https://github.com/mautrix/facebook) code.
|
||||||
|
|
||||||
**Note**: there have been recent reports (~2022-09-16) that **using this bridge may get your account banned**.
|
**NOTE**: there have been recent reports (~2022-09-16) that **using this bridge may get your account banned**.
|
||||||
|
|
||||||
See the project's [documentation](https://src.miscworks.net/fair/matrix-appservice-kakaotalk) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://src.miscworks.net/fair/matrix-appservice-kakaotalk) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
To enable the bridge, add this to your `vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_appservice_kakaotalk_enabled: true
|
matrix_appservice_kakaotalk_enabled: true
|
||||||
@ -17,13 +17,7 @@ matrix_appservice_kakaotalk_enabled: true
|
|||||||
|
|
||||||
You may optionally wish to add some [Additional configuration](#additional-configuration), or to [prepare for double-puppeting](#set-up-double-puppeting) before the initial installation.
|
You may optionally wish to add some [Additional configuration](#additional-configuration), or to [prepare for double-puppeting](#set-up-double-puppeting) before the initial installation.
|
||||||
|
|
||||||
## Installing
|
After adjusting your `vars.yml` file, re-run the playbook and restart all services: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
|
||||||
|
|
||||||
```
|
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|
||||||
```
|
|
||||||
|
|
||||||
To make use of the Kakaotalk bridge, see [Usage](#usage) below.
|
To make use of the Kakaotalk bridge, see [Usage](#usage) below.
|
||||||
|
|
||||||
@ -63,7 +57,7 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Start a chat with `@kakaotalkbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Start a chat with `@kakaotalkbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `login --save EMAIL_OR_PHONE_NUMBER` to the bridge bot to enable bridging for your Kakaotalk account. The `--save` flag may be omitted, if you'd rather not save your password.
|
Send `login --save EMAIL_OR_PHONE_NUMBER` to the bridge bot to enable bridging for your Kakaotalk account. The `--save` flag may be omitted, if you'd rather not save your password.
|
||||||
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
# Setting up Appservice Slack bridging (optional)
|
# Setting up Appservice Slack (optional)
|
||||||
|
|
||||||
**Notes**:
|
**Note**: bridging to [Slack](https://slack.com) can also happen via the [mx-puppet-slack](configuring-playbook-bridge-mx-puppet-slack.md) and [mautrix-slack](configuring-playbook-bridge-mautrix-slack.md) bridges supported by the playbook.
|
||||||
- Bridging to [Slack](https://slack.com) can also happen via the [mx-puppet-slack](configuring-playbook-bridge-mx-puppet-slack.md) and [mautrix-slack](configuring-playbook-bridge-mautrix-slack.md) bridges supported by the playbook.
|
|
||||||
- Currently (as of November, 2024) this component is not available for new installation unless you have already created a classic Slack application (which the bridge makes use of in order to enable bridging between Slack and Matrix), because the creation of classic Slack applications has been discontinued since June 4 2024. The author of the bridge claims [here](https://github.com/matrix-org/matrix-appservice-slack/issues/789#issuecomment-2172947787) that he plans to support the modern Slack application and until then "the best (and only) option for new installations is to use the webhook bridging".
|
|
||||||
|
|
||||||
The playbook can install and configure [matrix-appservice-slack](https://github.com/matrix-org/matrix-appservice-slack) for you.
|
The playbook can install and configure [matrix-appservice-slack](https://github.com/matrix-org/matrix-appservice-slack) for you.
|
||||||
|
|
||||||
@ -12,42 +10,26 @@ See the project's [documentation](https://github.com/matrix-org/matrix-appservic
|
|||||||
|
|
||||||
loosely based on [this](https://github.com/matrix-org/matrix-appservice-slack#Setup)
|
loosely based on [this](https://github.com/matrix-org/matrix-appservice-slack#Setup)
|
||||||
|
|
||||||
1. Create a new Matrix room to act as the administration control room. Note its internal room ID. This can be done in Element by sending a message, opening the options for that message and choosing "view source". The room ID will be displayed near the top.
|
1. Create a new Matrix room to act as the administration control room. Note its internal room ID. This can
|
||||||
|
be done in Element by making a message, opening the options for that message and choosing "view source". The
|
||||||
|
room ID will be displayed near the top.
|
||||||
|
2. Enable the bridge with the following configuration in your `vars.yml` file:
|
||||||
|
|
||||||
2. Enable the bridge by adding the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
```yaml
|
||||||
|
matrix_appservice_slack_enabled: true
|
||||||
|
matrix_appservice_slack_control_room_id: "Your matrix admin room id"
|
||||||
|
```
|
||||||
|
|
||||||
```yaml
|
3. If you've already installed Matrix services using the playbook before, you'll need to re-run it (`--tags=setup-all,start`). If not, proceed with [configuring other playbook services](configuring-playbook.md) and then with [Installing](installing.md). Get back to this guide once ready.
|
||||||
matrix_appservice_slack_enabled: true
|
4. Invite the bridge bot user into the admin room:
|
||||||
matrix_appservice_slack_control_room_id: "Your Matrix admin room ID"
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Enable puppeting (optional, but recommended)
|
```
|
||||||
|
/invite @slackbot:MY.DOMAIN
|
||||||
|
```
|
||||||
|
|
||||||
```yaml
|
Note that the bot's domain is your server's domain **without the `matrix.` prefix.**
|
||||||
matrix_appservice_slack_puppeting_enabled: true
|
|
||||||
matrix_appservice_slack_puppeting_slackapp_client_id: "Your Classic Slack App Client ID"
|
|
||||||
matrix_appservice_slack_puppeting_slackapp_client_secret: "Your Classic Slack App Client Secret"
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Enable Team Sync (optional)
|
5. Create a Classic Slack App [here](https://api.slack.com/apps?new_classic_app=1).
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_appservice_slack_team_sync_enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
See https://matrix-appservice-slack.readthedocs.io/en/latest/team_sync/
|
|
||||||
|
|
||||||
5. If you've already installed Matrix services using the playbook before, you'll need to re-run it (`--tags=setup-all,start`). If not, proceed with [configuring other playbook services](configuring-playbook.md) and then with [Installing](installing.md). Get back to this guide once ready.
|
|
||||||
|
|
||||||
6. Invite the bridge bot user into the admin room:
|
|
||||||
|
|
||||||
```
|
|
||||||
/invite @slackbot:example.com
|
|
||||||
```
|
|
||||||
|
|
||||||
Note that the bot's domain is your server's domain **without the `matrix.` prefix.**
|
|
||||||
|
|
||||||
7. Create a Classic Slack App [here](https://api.slack.com/apps?new_classic_app=1).
|
|
||||||
|
|
||||||
Name the app "matrixbot" (or anything else you'll remember).
|
Name the app "matrixbot" (or anything else you'll remember).
|
||||||
|
|
||||||
@ -55,7 +37,7 @@ loosely based on [this](https://github.com/matrix-org/matrix-appservice-slack#Se
|
|||||||
|
|
||||||
Click on bot users and add a new bot user. We will use this account to bridge the the rooms.
|
Click on bot users and add a new bot user. We will use this account to bridge the the rooms.
|
||||||
|
|
||||||
8. Click on Event Subscriptions and enable them and use the request url `https://matrix.example.com/appservice-slack`. Then add the following events and save:
|
6. Click on Event Subscriptions and enable them and use the request url `https://matrix.DOMAIN/appservice-slack`. Then add the following events and save:
|
||||||
|
|
||||||
Bot User Events:
|
Bot User Events:
|
||||||
|
|
||||||
@ -65,7 +47,7 @@ loosely based on [this](https://github.com/matrix-org/matrix-appservice-slack#Se
|
|||||||
- reaction_added
|
- reaction_added
|
||||||
- reaction_removed
|
- reaction_removed
|
||||||
|
|
||||||
9. Click on OAuth & Permissions and add the following scopes:
|
7. Click on OAuth & Permissions and add the following scopes:
|
||||||
|
|
||||||
- chat:write:bot
|
- chat:write:bot
|
||||||
- users:read
|
- users:read
|
||||||
@ -75,62 +57,56 @@ loosely based on [this](https://github.com/matrix-org/matrix-appservice-slack#Se
|
|||||||
|
|
||||||
- files:write:user
|
- files:write:user
|
||||||
|
|
||||||
**Note**: In order to make Slack files visible to Matrix users, this bridge will make Slack files visible to anyone with the url (including files in private channels). This is different than the current behavior in Slack, which only allows authenticated access to media posted in private channels. See MSC701 for details.
|
Note: In order to make Slack files visible to matrix users, this bridge will make Slack files visible to anyone with the url (including files in private channels). This is different than the current behavior in Slack, which only allows authenticated access to media posted in private channels. See MSC701 for details.
|
||||||
|
|
||||||
10. Click on Install App and Install App to Workspace. Note the access tokens shown. You will need the Bot User OAuth Access Token and if you want to bridge files, the OAuth Access Token whenever you link a room.
|
8. Click on Install App and Install App to Workspace. Note the access tokens shown. You will need the Bot User OAuth Access Token and if you want to bridge files, the OAuth Access Token whenever you link a room.
|
||||||
|
|
||||||
11. If Team Sync is not enabled, for each channel you would like to bridge, perform the following steps:
|
9. For each channel you would like to bridge, perform the following steps:
|
||||||
|
|
||||||
* Create a Matrix room in the usual manner for your client. Take a note of its Matrix room ID - it will look something like !qporfwt:example.com.
|
* Create a Matrix room in the usual manner for your client. Take a note of its Matrix room ID - it will look something like !aBcDeF:example.com.
|
||||||
|
|
||||||
* Invite the bot user to both the Slack and Matrix channels you would like to bridge using `/invite @matrixbot` for Slack and `/invite @slackbot:example.com` for Matrix.
|
* Invite the bot user to both the Slack and Matrix channels you would like to bridge using `/invite @matrixbot` for slack and `/invite @slackbot:MY.DOMAIN` for matrix.
|
||||||
|
|
||||||
* Determine the "channel ID" that Slack uses to identify the channel. You can see it when you open a given Slack channel in a browser. The URL reads like this: `https://app.slack.com/client/XXX/<the channel ID>/details/`.
|
* Determine the "channel ID" that Slack uses to identify the channel. You can see it when you open a given Slack channel in a browser. The URL reads like this: `https://app.slack.com/client/XXX/<the channel id>/details/`.
|
||||||
|
|
||||||
* Issue a link command in the administration control room with these collected values as arguments:
|
* Issue a link command in the administration control room with these collected values as arguments:
|
||||||
|
|
||||||
with file bridging:
|
with file bridging:
|
||||||
|
```
|
||||||
```
|
link --channel_id CHANNELID --room !the-matrix:room.id --slack_bot_token xoxb-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx --slack_user_token xoxp-xxxxxxxx-xxxxxxxxx-xxxxxxxx-xxxxxxxx
|
||||||
link --channel_id CHANNELID --room !qporfwt:example.com --slack_bot_token xoxb-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx --slack_user_token xoxp-xxxxxxxx-xxxxxxxxx-xxxxxxxx-xxxxxxxx
|
```
|
||||||
```
|
|
||||||
|
|
||||||
without file bridging:
|
without file bridging:
|
||||||
|
```
|
||||||
```
|
link --channel_id CHANNELID --room !the-matrix:room.id --slack_bot_token xoxb-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx
|
||||||
link --channel_id CHANNELID --room !qporfwt:example.com --slack_bot_token xoxb-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx
|
```
|
||||||
```
|
|
||||||
|
|
||||||
These arguments can be shortened to single-letter forms:
|
These arguments can be shortened to single-letter forms:
|
||||||
|
```
|
||||||
|
link -I CHANNELID -R !the-matrix:room.id -t xoxb-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx
|
||||||
|
```
|
||||||
|
|
||||||
```
|
Other configuration options are available via the `matrix_appservice_slack_configuration_extension_yaml` variable.
|
||||||
link -I CHANNELID -R !qporfwt:example.com -t xoxb-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx
|
|
||||||
```
|
|
||||||
|
|
||||||
Other configuration options are available via the `matrix_appservice_slack_configuration_extension_yaml` variable.
|
10. Unlinking
|
||||||
|
|
||||||
12. Unlinking
|
|
||||||
|
|
||||||
Channels can be unlinked again like this:
|
Channels can be unlinked again like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
unlink --room !qporfwt:example.com
|
unlink --room !the-matrix:room.id
|
||||||
```
|
```
|
||||||
|
|
||||||
Unlinking doesn't only disconnect the bridge, but also makes the slackbot leave the bridged Matrix room. So in case you want to re-link later, don't forget to re-invite the slackbot into this room again.
|
Unlinking doesn't only disconnect the bridge, but also makes the slackbot leave the bridged matrix room. So in case you want to re-link later, don't forget to re-invite the slackbot into this room again.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
* As always, check the logs: `journalctl -fu matrix-appservice-slack`
|
* as always, check the logs:
|
||||||
|
`journalctl -fu matrix-appservice-slack`
|
||||||
|
|
||||||
* Linking: "Room is now pending-name"
|
* linking: "Room is now pending-name"
|
||||||
|
This typically means that you haven't used the correct slack channel id. Unlink the room and recheck 'Determine the "channel ID"' from above.
|
||||||
This typically means that you haven't used the correct Slack channel ID. Unlink the room and recheck 'Determine the "channel ID"' from above.
|
|
||||||
|
|
||||||
* Messages work from M to S, but not the other way around
|
* Messages work from M to S, but not the other way around
|
||||||
|
Check you logs, if they say something like
|
||||||
|
|
||||||
Check you logs, if they say something like
|
`WARN SlackEventHandler Ignoring message from unrecognised slack channel id : %s (%s) <the channel id> <some other id>`
|
||||||
|
|
||||||
`WARN SlackEventHandler Ignoring message from unrecognised Slack channel ID : %s (%s) <the channel ID> <some other ID>`
|
then unlink your room, reinvite the bot and re-link it again. This may particularly hit you, if you tried to unsuccessfully link
|
||||||
|
your room multiple times without unlinking it after each failed attempt.
|
||||||
then unlink your room, reinvite the bot and re-link it again. This may particularly hit you, if you tried to unsuccessfully link your room multiple times without unlinking it after each failed attempt.
|
|
||||||
|
@ -1,73 +1,72 @@
|
|||||||
# Setting up Appservice Webhooks bridging (optional)
|
# Setting up Appservice Webhooks (optional)
|
||||||
|
|
||||||
**Note**: This bridge has been deprecated. We recommend not bothering with installing it. While not a 1:1 replacement, the bridge's author suggests taking a look at [matrix-hookshot](https://github.com/matrix-org/matrix-hookshot) as a replacement, which can also be installed using [this playbook](configuring-playbook-bridge-hookshot.md). Consider using that bridge instead of this one.
|
The playbook can install and configure [matrix-appservice-webhooks](https://github.com/turt2live/matrix-appservice-webhooks) for you.
|
||||||
|
|
||||||
The playbook can install and configure [matrix-appservice-webhooks](https://github.com/turt2live/matrix-appservice-webhooks) for you. This bridge provides support for Slack-compatible webhooks.
|
Note: This bridge is no longer maintained. While not a 1:1 replacement, the bridge's author suggests taking a look at [matrix-hookshot](https://github.com/Half-Shot/matrix-hookshot) as a replacement, which can also be installed using [this playbook](configuring-playbook-bridge-hookshot.md).
|
||||||
|
|
||||||
|
This bridge provides support for Slack-compatible webhooks.
|
||||||
|
|
||||||
Setup Instructions:
|
Setup Instructions:
|
||||||
|
|
||||||
loosely based on [this](https://github.com/turt2live/matrix-appservice-webhooks/blob/master/README.md)
|
loosely based on [this](https://github.com/turt2live/matrix-appservice-webhooks/blob/master/README.md)
|
||||||
|
|
||||||
1. All you basically need is to adjust your `inventory/host_vars/matrix.example.com/vars.yml`:
|
1. All you basically need is to adjust your `inventory/host_vars/matrix.<domain-name>/vars.yml`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_appservice_webhooks_enabled: true
|
matrix_appservice_webhooks_enabled: true
|
||||||
matrix_appservice_webhooks_api_secret: '<your_secret>'
|
matrix_appservice_webhooks_api_secret: '<your_secret>'
|
||||||
```
|
```
|
||||||
|
|
||||||
2. In case you want to change the verbosity of logging via `journalctl -fu matrix-appservice-webhooks.service` you can adjust this in `inventory/host_vars/matrix.example.com/vars.yml` as well.
|
2. In case you want to change the verbosity of logging via `journalctl -fu matrix-appservice-webhooks.service`
|
||||||
|
you can adjust this in `inventory/host_vars/matrix.<domain-name>/vars.yml` as well.
|
||||||
|
|
||||||
**Note**: default value is: `info` and availabe log levels are : `info`, `verbose`
|
*Note*: default value is: `info` and availabe log levels are : `info`, `verbose`
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_appservice_webhooks_log_level: '<log_level>'
|
matrix_appservice_webhooks_log_level: '<log_level>'
|
||||||
```
|
```
|
||||||
|
|
||||||
3. As of Synapse 1.90.0, you will need to add the following to `matrix_synapse_configuration_extension_yaml` to enable the [backwards compatibility](https://matrix-org.github.io/synapse/latest/upgrade#upgrading-to-v1900) that this bridge needs:
|
3. As of Synapse 1.90.0, you will need to add the following to `matrix_synapse_configuration_extension_yaml` to enable the [backwards compatibility](https://matrix-org.github.io/synapse/latest/upgrade#upgrading-to-v1900) that this bridge needs:
|
||||||
|
```yaml
|
||||||
```yaml
|
matrix_synapse_configuration_extension_yaml: |
|
||||||
matrix_synapse_configuration_extension_yaml: |
|
use_appservice_legacy_authorization: true
|
||||||
use_appservice_legacy_authorization: true
|
```
|
||||||
```
|
*Note*: This deprecated method is considered insecure.
|
||||||
|
|
||||||
**Note**: This deprecated method is considered insecure.
|
|
||||||
|
|
||||||
4. If you've already installed Matrix services using the playbook before, you'll need to re-run it (`--tags=setup-all,start`). If not, proceed with [configuring other playbook services](configuring-playbook.md) and then with [Installing](installing.md). Get back to this guide once ready.
|
4. If you've already installed Matrix services using the playbook before, you'll need to re-run it (`--tags=setup-all,start`). If not, proceed with [configuring other playbook services](configuring-playbook.md) and then with [Installing](installing.md). Get back to this guide once ready.
|
||||||
|
|
||||||
5. If you're using the [Dimension integration manager](configuring-playbook-dimension.md), you can configure the Webhooks bridge by opening the Dimension integration manager -> Settings -> Bridges and selecting edit action for "Webhook Bridge". Press "Add self-hosted Bridge" button and populate "Provisioning URL" & "Shared Secret" values from `/matrix/appservice-webhooks/config/config.yaml` file's homeserver URL value and provisioning secret value, respectively.
|
5. If you're using the [Dimension Integration Manager](configuring-playbook-dimension.md), you can configure the Webhooks bridge by opening the Dimension integration manager -> Settings -> Bridges and selecting edit action for "Webhook Bridge". Press "Add self-hosted Bridge" button and populate "Provisioning URL" & "Shared Secret" values from `/matrix/appservice-webhooks/config/config.yaml` file's homeserver URL value and provisioning secret value, respectively.
|
||||||
|
|
||||||
6. Invite the bridge bot user to your room:
|
6. Invite the bridge bot user to your room:
|
||||||
|
|
||||||
- either with `/invite @_webhook:example.com` (**Note**: Make sure you have administration permissions in your room)
|
- either with `/invite @_webhook:<domain.name>` (*Note*: Make sure you have administration permissions in your room)
|
||||||
|
|
||||||
- or simply add the bridge bot to a private channel (personal channels imply you being an administrator)
|
- or simply add the bridge bot to a private channel (personal channels imply you being an administrator)
|
||||||
|
|
||||||
7. Send a message to the bridge bot in order to receive a private message including the webhook link.
|
7. Send a message to the bridge bot in order to receive a private message including the webhook link.
|
||||||
|
```
|
||||||
```
|
!webhook
|
||||||
!webhook
|
```
|
||||||
```
|
|
||||||
|
|
||||||
8. The JSON body for posting messages will have to look like this:
|
8. The JSON body for posting messages will have to look like this:
|
||||||
|
```json
|
||||||
```json
|
{
|
||||||
{
|
|
||||||
"text": "Hello world!",
|
|
||||||
"format": "plain",
|
|
||||||
"displayName": "My Cool Webhook",
|
|
||||||
"avatar_url": "http://i.imgur.com/IDOBtEJ.png"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
You can test this via curl like so:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
curl --header "Content-Type: application/json" \
|
|
||||||
--data '{
|
|
||||||
"text": "Hello world!",
|
"text": "Hello world!",
|
||||||
"format": "plain",
|
"format": "plain",
|
||||||
"displayName": "My Cool Webhook",
|
"displayName": "My Cool Webhook",
|
||||||
"avatar_url": "http://i.imgur.com/IDOBtEJ.png"
|
"avatar_url": "http://i.imgur.com/IDOBtEJ.png"
|
||||||
}' \
|
}
|
||||||
<the link you've gotten in 5.>
|
```
|
||||||
```
|
|
||||||
|
You can test this via curl like so:
|
||||||
|
|
||||||
|
```
|
||||||
|
curl --header "Content-Type: application/json" \
|
||||||
|
--data '{
|
||||||
|
"text": "Hello world!",
|
||||||
|
"format": "plain",
|
||||||
|
"displayName": "My Cool Webhook",
|
||||||
|
"avatar_url": "http://i.imgur.com/IDOBtEJ.png"
|
||||||
|
}' \
|
||||||
|
<the link you've gotten in 5.>
|
||||||
|
```
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
# Setting up Beeper Linkedin bridging (optional)
|
# Setting up Beeper Linkedin (optional)
|
||||||
|
|
||||||
The playbook can install and configure [beeper-linkedin](https://github.com/beeper/linkedin) for you, for bridging to [LinkedIn](https://www.linkedin.com/) Messaging. This bridge is based on the mautrix-python framework and can be configured in a similar way to the other mautrix bridges
|
The playbook can install and configure [beeper-linkedin](https://github.com/beeper/linkedin) for you, for bridging to [LinkedIn](https://www.linkedin.com/) Messaging. This bridge is based on the mautrix-python framework and can be configured in a similar way to the other mautrix bridges
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/beeper/linkedin/blob/master/README.md) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/beeper/linkedin/blob/master/README.md) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_beeper_linkedin_enabled: true
|
matrix_beeper_linkedin_enabled: true
|
||||||
```
|
```
|
||||||
@ -28,27 +24,22 @@ If you would like to be able to administrate the bridge from your account it can
|
|||||||
matrix_beeper_linkedin_configuration_extension_yaml: |
|
matrix_beeper_linkedin_configuration_extension_yaml: |
|
||||||
bridge:
|
bridge:
|
||||||
permissions:
|
permissions:
|
||||||
'@YOUR_USERNAME:example.com': admin
|
'@YOUR_USERNAME:YOUR_DOMAIN': admin
|
||||||
```
|
```
|
||||||
|
|
||||||
You may wish to look at `roles/custom/matrix-bridge-beeper-linkedin/templates/config.yaml.j2` to find other things you would like to configure.
|
You may wish to look at `roles/custom/matrix-bridge-beeper-linkedin/templates/config.yaml.j2` to find other things you would like to configure.
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
## Set up Double Puppeting
|
||||||
|
|
||||||
## Set up Double Puppeting by enabling Appservice Double Puppet or Shared Secret Auth
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have to enable Shared Secred Auth.
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service or the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
|
||||||
|
|
||||||
Enabling double puppeting by enabling the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service works at the time of writing, but is deprecated and will stop working in the future.
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You then need to start a chat with `@linkedinbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
You then need to start a chat with `@linkedinbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `login YOUR_LINKEDIN_EMAIL_ADDRESS` to the bridge bot to enable bridging for your LinkedIn account.
|
Send `login YOUR_LINKEDIN_EMAIL_ADDRESS` to the bridge bot to enable bridging for your LinkedIn account.
|
||||||
|
|
||||||
|
@ -1,23 +1,23 @@
|
|||||||
# Setting up Go Skype Bridge bridging (optional)
|
# Setting up Go Skype Bridge (optional)
|
||||||
|
|
||||||
The playbook can install and configure [go-skype-bridge](https://github.com/kelaresg/go-skype-bridge) for you.
|
The playbook can install and configure
|
||||||
|
[go-skype-bridge](https://github.com/kelaresg/go-skype-bridge) for you.
|
||||||
|
|
||||||
See the project page to learn what it does and why it might be useful to you.
|
See the project page to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable the [Skype](https://www.skype.com/) bridge just use the following
|
||||||
|
playbook configuration:
|
||||||
|
|
||||||
To enable the [Skype](https://www.skype.com/) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_go_skype_bridge_enabled: true
|
matrix_go_skype_bridge_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled, you need to start a chat with `Skype bridge bot` with the handle `@skypebridgebot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled, you need to start a chat with `Skype bridge bot`
|
||||||
|
with the handle `@skypebridgebot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base
|
||||||
|
domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `help` to the bot to see the commands available.
|
Send `help` to the bot to see the commands available.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up Heisenbridge bouncer-style IRC bridging (optional)
|
# Setting up Heisenbridge (optional)
|
||||||
|
|
||||||
**Note**: bridging to [IRC](https://en.wikipedia.org/wiki/Internet_Relay_Chat) can also happen via the [matrix-appservice-irc](configuring-playbook-bridge-appservice-irc.md) bridge supported by the playbook.
|
**Note**: bridging to [IRC](https://en.wikipedia.org/wiki/Internet_Relay_Chat) can also happen via the [matrix-appservice-irc](configuring-playbook-bridge-appservice-irc.md) bridge supported by the playbook.
|
||||||
|
|
||||||
@ -8,54 +8,30 @@ See the project's [README](https://github.com/hifi/heisenbridge/blob/master/READ
|
|||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
To enable Heisenbridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Below are the common configuration options that you may want to set, exhaustive list is in [the bridge's defaults var file](../roles/custom/matrix-bridge-heisenbridge/defaults/main.yml).
|
||||||
|
|
||||||
|
At a minimum, you only need to enable the bridge to get it up and running (`inventory/host_vars/matrix.DOMAIN/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_heisenbridge_enabled: true
|
matrix_heisenbridge_enabled: true
|
||||||
|
|
||||||
# Setting the owner is optional as the first local user to DM `@heisenbridge:example.com` will be made the owner.
|
# set owner (optional)
|
||||||
# If you are not using a local user you must set it as otherwise you can't DM it at all.
|
matrix_heisenbridge_owner: "@you:your-homeserver"
|
||||||
matrix_heisenbridge_owner: "@you:example.com"
|
|
||||||
|
|
||||||
# Uncomment to enable identd on host port 113/TCP (optional)
|
# to enable identd on host port 113/TCP (optional)
|
||||||
# matrix_heisenbridge_identd_enabled: true
|
matrix_heisenbridge_identd_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
For a more complete list of variables that you could override, see the [`defaults/main.yml` file](../roles/custom/matrix-bridge-heisenbridge/defaults/main.yml) of the Heisenbridge Ansible role.
|
That's it! A registration file is automatically generated during the setup phase.
|
||||||
|
|
||||||
### Adjusting the Heisenbridge URL
|
Setting the owner is optional as the first local user to DM `@heisenbridge:your-homeserver` will be made the owner.
|
||||||
|
If you are not using a local user you must set it as otherwise you can't DM it at all.
|
||||||
By default, this playbook installs Heisenbridge on the `matrix.` subdomain, at the `/heisenbridge` path (https://matrix.example.com/heisenbridge). It would handle media requests there (see the [release notes for Heisenbridge v1.15.0](https://github.com/hifi/heisenbridge/releases/tag/v1.15.0)).
|
|
||||||
|
|
||||||
This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_heisenbridge_hostname` and `matrix_heisenbridge_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix
|
|
||||||
matrix_heisenbridge_hostname: heisenbridge.example.com
|
|
||||||
matrix_heisenbridge_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the Heisenbridge domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
After the bridge is successfully running just DM `@heisenbridge:example.com` to start setting it up. If the bridge ignores you and a DM is not accepted then the owner setting may be wrong.
|
After the bridge is successfully running just DM `@heisenbridge:your-homeserver` to start setting it up.
|
||||||
|
|
||||||
Help is available for all commands with the `-h` switch.
|
Help is available for all commands with the `-h` switch.
|
||||||
|
If the bridge ignores you and a DM is not accepted then the owner setting may be wrong.
|
||||||
|
|
||||||
You can also learn the basics by watching [this demonstration video](https://www.youtube.com/watch?v=nQk1Bp4tk4I).
|
You can also learn the basics by watching [this demonstration video](https://www.youtube.com/watch?v=nQk1Bp4tk4I).
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up matrix-hookshot (optional)
|
# Setting up Hookshot (optional)
|
||||||
|
|
||||||
The playbook can install and configure [matrix-hookshot](https://github.com/matrix-org/matrix-hookshot) for you.
|
The playbook can install and configure [matrix-hookshot](https://github.com/matrix-org/matrix-hookshot) for you.
|
||||||
|
|
||||||
@ -6,7 +6,7 @@ Hookshot can bridge [Webhooks](https://en.wikipedia.org/wiki/Webhook) from softw
|
|||||||
|
|
||||||
See the project's [documentation](https://matrix-org.github.io/matrix-hookshot/latest/hookshot.html) to learn what it does in detail and why it might be useful to you.
|
See the project's [documentation](https://matrix-org.github.io/matrix-hookshot/latest/hookshot.html) to learn what it does in detail and why it might be useful to you.
|
||||||
|
|
||||||
**Note**: the playbook also supports [matrix-appservice-webhooks](configuring-playbook-bridge-appservice-webhooks.md), which however was deprecated by its author.
|
Note: the playbook also supports [matrix-appservice-webhooks](configuring-playbook-bridge-appservice-webhooks.md), which however is soon to be archived by its author and to be replaced by hookshot.
|
||||||
|
|
||||||
|
|
||||||
## Setup Instructions
|
## Setup Instructions
|
||||||
@ -27,19 +27,19 @@ Finally, run the playbook (see [installing](installing.md)).
|
|||||||
|
|
||||||
You can enable [experimental encryption](https://matrix-org.github.io/matrix-hookshot/latest/advanced/encryption.html) for Hookshot by adding `matrix_hookshot_experimental_encryption_enabled: true` to your configuration (`vars.yml`) and [executing the playbook](installing.md) again.
|
You can enable [experimental encryption](https://matrix-org.github.io/matrix-hookshot/latest/advanced/encryption.html) for Hookshot by adding `matrix_hookshot_experimental_encryption_enabled: true` to your configuration (`vars.yml`) and [executing the playbook](installing.md) again.
|
||||||
|
|
||||||
Should the crypto store be corrupted, you can reset it by executing this Ansible playbook with the tag `reset-hookshot-encryption` added, for example `ansible-playbook -i inventory/hosts setup.yml -K --tags=reset-hookshot-encryption`.
|
Should the crypto store be corrupted, you can reset it by executing this Ansible playbook with the tag `reset-hookshot-encryption` added, for example `ansible-playbook -i inventory/hosts setup.yml -K --tags=reset-hookshot-encryption`).
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Create a room and invite the Hookshot bot (`@hookshot:example.com`) to it.
|
Create a room and invite the Hookshot bot (`@hookshot:DOMAIN`) to it.
|
||||||
|
|
||||||
Make sure the bot is able to send state events (usually the Moderator power level in clients).
|
Make sure the bot is able to send state events (usually the Moderator power level in clients).
|
||||||
|
|
||||||
Send a `!hookshot help` message to see a list of help commands.
|
Send a `!hookshot help` message to see a list of help commands.
|
||||||
|
|
||||||
Refer to [Hookshot's documentation](https://matrix-org.github.io/matrix-hookshot/latest/usage.html) for more details about using the bridge's various features.
|
Refer to [Hookshot's documentation](https://matrix-org.github.io/matrix-hookshot/latest/usage.html) for more details about using the brige's various features.
|
||||||
|
|
||||||
**Important**: Note that the different listeners are bound to certain paths which might differ from those assumed by the hookshot documentation, see [URLs for bridges setup](#urls-for-bridges-setup) below.
|
**Important:** Note that the different listeners are bound to certain paths which might differ from those assumed by the hookshot documentation, see [URLs for bridges setup](#urls-for-bridges-setup) below.
|
||||||
|
|
||||||
|
|
||||||
## More setup documentation
|
## More setup documentation
|
||||||
@ -50,17 +50,16 @@ Unless indicated otherwise, the following endpoints are reachable on your `matri
|
|||||||
|
|
||||||
| listener | default path | variable | used as |
|
| listener | default path | variable | used as |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| - | `/hookshot/webhooks/` | `matrix_hookshot_webhook_endpoint` | Webhook-prefix, which affects all webhook-related URLs below |
|
| webhooks | `/hookshot/webhooks/` | `matrix_hookshot_webhook_endpoint` | generics, GitHub "Webhook URL", GitLab "URL", etc. |
|
||||||
| generic | `/hookshot/webhooks/webhook` | `matrix_hookshot_generic_endpoint` | Generic webhooks |
|
|
||||||
| github oauth | `/hookshot/webhooks/oauth` | `matrix_hookshot_github_oauth_endpoint` | GitHub "Callback URL" |
|
| github oauth | `/hookshot/webhooks/oauth` | `matrix_hookshot_github_oauth_endpoint` | GitHub "Callback URL" |
|
||||||
| jira oauth | `/hookshot/webhooks/jira/oauth` | `matrix_hookshot_jira_oauth_endpoint` | JIRA OAuth |
|
| jira oauth | `/hookshot/webhooks/jira/oauth` | `matrix_hookshot_jira_oauth_endpoint` | JIRA OAuth |
|
||||||
| figma endpoint | `/hookshot/webhooks/figma/webhook` | `matrix_hookshot_figma_endpoint` | Figma |
|
| figma endpoint | `/hookshot/webhooks/figma/webhook` | `matrix_hookshot_figma_endpoint` | Figma |
|
||||||
| provisioning | `/hookshot/v1/` | `matrix_hookshot_provisioning_endpoint` | Dimension [provisioning](#provisioning-api) |
|
| provisioning | `/hookshot/v1/` | `matrix_hookshot_provisioning_endpoint` | Dimension [provisioning](#provisioning-api) |
|
||||||
| appservice | `/hookshot/_matrix/app/` | `matrix_hookshot_appservice_endpoint` | Matrix server |
|
| appservice | `/hookshot/_matrix/app/` | `matrix_hookshot_appservice_endpoint` | Matrix server |
|
||||||
| widgets | `/hookshot/widgetapi/` | `matrix_hookshot_widgets_endpoint` | Widgets |
|
| widgets | `/hookshot/widgetapi/` | `matrix_hookshot_widgets_endpoint` | Widgets |
|
||||||
| metrics | `/metrics/hookshot` | `matrix_hookshot_metrics_enabled` and exposure enabled via `matrix_hookshot_metrics_proxying_enabled` or `matrix_metrics_exposure_enabled`. Read more in the [Metrics section](#metrics) below. | Prometheus |
|
| metrics | `/metrics/hookshot` | `matrix_hookshot_metrics_enabled` and `matrix_hookshot_metrics_proxying_enabled`. Requires `/metrics/*` endpoints to also be enabled via `matrix_nginx_proxy_proxy_matrix_metrics_enabled` (see the `matrix-nginx-proxy` role). Read more in the [Metrics section](#metrics) below. | Prometheus |
|
||||||
|
|
||||||
Also see the various `matrix_hookshot_container_labels_*` variables in [default/main.yml](/roles/custom/matrix-bridge-hookshot/default/main.yml), which expose URLs publicly.
|
See also `matrix_hookshot_matrix_nginx_proxy_configuration` in [init.yml](/roles/custom/matrix-bridge-hookshot/tasks/inject_into_nginx_proxy.yml).
|
||||||
|
|
||||||
The different listeners are also reachable *internally* in the docker-network via the container's name (configured by `matrix_hookshot_container_url`) and on different ports (e.g. `matrix_hookshot_appservice_port`). Read [main.yml](/roles/custom/matrix-bridge-hookshot/defaults/main.yml) in detail for more info.
|
The different listeners are also reachable *internally* in the docker-network via the container's name (configured by `matrix_hookshot_container_url`) and on different ports (e.g. `matrix_hookshot_appservice_port`). Read [main.yml](/roles/custom/matrix-bridge-hookshot/defaults/main.yml) in detail for more info.
|
||||||
|
|
||||||
@ -92,12 +91,10 @@ Metrics are **only enabled by default** if the builtin [Prometheus](configuring-
|
|||||||
|
|
||||||
To explicitly enable metrics, use `matrix_hookshot_metrics_enabled: true`. This only exposes metrics over the container network, however.
|
To explicitly enable metrics, use `matrix_hookshot_metrics_enabled: true`. This only exposes metrics over the container network, however.
|
||||||
|
|
||||||
**To collect metrics from an external Prometheus server**, besides enabling metrics as described above, you will also need to enable metrics exposure on `https://matrix.example.com/metrics/hookshot` by:
|
**To collect metrics from an external Prometheus server**, besides enabling metrics as described above, you will also need to:
|
||||||
|
|
||||||
- either enabling metrics exposure for Hookshot via `matrix_hookshot_metrics_proxying_enabled: true`
|
- enable the `https://matrix.DOMAIN/metrics/*` endpoints on `matrix.DOMAIN` using `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true` (see the `matrix-nginx-role` or [the Prometheus and Grafana docs](configuring-playbook-prometheus-grafana.md) for enabling this feature)
|
||||||
- or enabling metrics exposure for all services via `matrix_metrics_exposure_enabled: true`
|
- expose the Hookshot metrics under `https://matrix.DOMAIN/metrics/hookshot` by setting `matrix_hookshot_metrics_proxying_enabled: true`
|
||||||
|
|
||||||
Whichever one you go with, by default metrics are exposed publicly **without** password-protection. See [the Prometheus and Grafana docs](configuring-playbook-prometheus-grafana.md) for details about password-protection for metrics.
|
|
||||||
|
|
||||||
### Collision with matrix-appservice-webhooks
|
### Collision with matrix-appservice-webhooks
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up Matrix SMS bridging (optional)
|
# Setting up matrix-sms-bridge (optional)
|
||||||
|
|
||||||
The playbook can install and configure [matrix-sms-bridge](https://github.com/benkuly/matrix-sms-bridge) for you.
|
The playbook can install and configure [matrix-sms-bridge](https://github.com/benkuly/matrix-sms-bridge) for you.
|
||||||
|
|
||||||
@ -6,15 +6,15 @@ See the project page to learn what it does and why it might be useful to you.
|
|||||||
|
|
||||||
**The bridge uses [android-sms-gateway-server](https://github.com/RebekkaMa/android-sms-gateway-server). You need to configure it first.**
|
**The bridge uses [android-sms-gateway-server](https://github.com/RebekkaMa/android-sms-gateway-server). You need to configure it first.**
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable the bridge just use the following
|
||||||
|
playbook configuration:
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_sms_bridge_enabled: true
|
matrix_sms_bridge_enabled: true
|
||||||
|
|
||||||
# (optional but recommended) a room ID to a default room
|
# (optional but recommended) a room id to a default room
|
||||||
matrix_sms_bridge_default_room: ""
|
matrix_sms_bridge_default_room: ""
|
||||||
|
|
||||||
# (optional but recommended) configure your server location
|
# (optional but recommended) configure your server location
|
||||||
matrix_sms_bridge_default_region: DE
|
matrix_sms_bridge_default_region: DE
|
||||||
@ -31,9 +31,6 @@ matrix_sms_bridge_provider_android_truststore_password: 123
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up Mautrix Discord bridging (optional)
|
# Setting up Mautrix Discord (optional)
|
||||||
|
|
||||||
**Note**: bridging to [Discord](https://discordapp.com/) can also happen via the [mx-puppet-discord](configuring-playbook-bridge-mx-puppet-discord.md) and [matrix-appservice-discord](configuring-playbook-bridge-appservice-discord.md) bridges supported by the playbook.
|
**Note**: bridging to [Discord](https://discordapp.com/) can also happen via the [mx-puppet-discord](configuring-playbook-bridge-mx-puppet-discord.md) and [matrix-appservice-discord](configuring-playbook-bridge-appservice-discord.md) bridges supported by the playbook.
|
||||||
- For using as a Bot we recommend the [Appservice Discord](configuring-playbook-bridge-appservice-discord.md), because it supports plumbing.
|
- For using as a Bot we recommend the [Appservice Discord](configuring-playbook-bridge-appservice-discord.md), because it supports plumbing.
|
||||||
@ -15,9 +15,9 @@ There are 2 ways to login to discord using this bridge, either by [scanning a QR
|
|||||||
|
|
||||||
If this is a dealbreaker for you, consider using one of the other Discord bridges supported by the playbook: [mx-puppet-discord](configuring-playbook-bridge-mx-puppet-discord.md) or [matrix-appservice-discord](configuring-playbook-bridge-appservice-discord.md). These come with their own complexity and limitations, however, so we recommend that you proceed with this one if possible.
|
If this is a dealbreaker for you, consider using one of the other Discord bridges supported by the playbook: [mx-puppet-discord](configuring-playbook-bridge-mx-puppet-discord.md) or [matrix-appservice-discord](configuring-playbook-bridge-appservice-discord.md). These come with their own complexity and limitations, however, so we recommend that you proceed with this one if possible.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Installing
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
To enable the bridge, add this to your `vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_discord_enabled: true
|
matrix_mautrix_discord_enabled: true
|
||||||
@ -25,13 +25,7 @@ matrix_mautrix_discord_enabled: true
|
|||||||
|
|
||||||
You may optionally wish to add some [Additional configuration](#additional-configuration), or to [prepare for double-puppeting](#set-up-double-puppeting) before the initial installation.
|
You may optionally wish to add some [Additional configuration](#additional-configuration), or to [prepare for double-puppeting](#set-up-double-puppeting) before the initial installation.
|
||||||
|
|
||||||
## Installing
|
After adjusting your `vars.yml` file, re-run the playbook and restart all services: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
|
||||||
|
|
||||||
```
|
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|
||||||
```
|
|
||||||
|
|
||||||
To make use of the bridge, see [Usage](#usage) below.
|
To make use of the bridge, see [Usage](#usage) below.
|
||||||
|
|
||||||
@ -50,13 +44,11 @@ Take a look at:
|
|||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
||||||
|
|
||||||
#### Method 1: automatically, by enabling Appservice Double Puppet or Shared Secret Auth
|
#### Method 1: automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service or the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
Enabling double puppeting by enabling the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service works at the time of writing, but is deprecated and will stop working in the future.
|
|
||||||
|
|
||||||
#### Method 2: manually, by asking each user to provide a working access token
|
#### Method 2: manually, by asking each user to provide a working access token
|
||||||
|
|
||||||
@ -87,13 +79,13 @@ To acquire the token, open Discord in a private browser window. Then open the de
|
|||||||
|
|
||||||
### Bridging
|
### Bridging
|
||||||
|
|
||||||
1. Start a chat with `@discordbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
1. Start a chat with `@discordbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
2. If you would like to login to Discord using a token, send `login-token` command, otherwise, send `login-qr` command.
|
2. If you would like to login to Discord using a token, send `login-token` command, otherwise, send `login-qr` command.
|
||||||
3. You'll see a QR code which you need to scan with the Discord app on your phone. You can scan it with the camera app too, which will open Discord, which will then instruct you to scan it a 2nd time in the Discord app.
|
3. You'll see a QR code which you need to scan with the Discord app on your phone. You can scan it with the camera app too, which will open Discord, which will then instruct you to scan it a 2nd time in the Discord app.
|
||||||
4. After confirming (in the Discord app) that you'd like to allow this login, the bot should respond with "Succcessfully authenticated as ..."
|
4. After confirming (in the Discord app) that you'd like to allow this login, the bot should respond with "Succcessfully authenticated as ..."
|
||||||
5. Now that you're logged in, you can send a `help` command to the bot again, to see additional commands you have access to
|
5. Now that you're logged in, you can send a `help` command to the bot again, to see additional commands you have access to
|
||||||
6. Some Direct Messages from Discord should start syncing automatically
|
6. Some Direct Messages from Discord should start syncing automatically
|
||||||
7. If you'd like to bridge guilds:
|
7. If you'd like to bridge guilds:
|
||||||
- send `guilds status` to see the list of guilds
|
- send `guilds status` to see the list of guilds
|
||||||
- for each guild that you'd like bridged, send `guilds bridge GUILD_ID --entire`
|
- for each guild that you'd like bridged, send `guilds bridge GUILD_ID --entire`
|
||||||
8. You may wish to uninstall the Discord app from your phone now. It's not needed for the bridge to function.
|
8. You may wish to uninstall the Discord app from your phone now. It's not needed for the bridge to function.
|
||||||
|
@ -1,15 +1,9 @@
|
|||||||
# Setting up Mautrix Facebook bridging (optional)
|
# Setting up Mautrix Facebook (optional)
|
||||||
|
|
||||||
**Note**: This bridge has been deprecated in favor of the [mautrix-meta](https://github.com/mautrix/meta) Messenger/Instagram bridge, which can be installed using [this playbook](configuring-playbook-bridge-mautrix-meta-messenger.md). Consider using that bridge instead of this one.
|
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-facebook](https://github.com/mautrix/facebook) for you.
|
The playbook can install and configure [mautrix-facebook](https://github.com/mautrix/facebook) for you.
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/mautrix/facebook/blob/master/ROADMAP.md) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/mautrix/facebook/blob/master/ROADMAP.md) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_facebook_enabled: true
|
matrix_mautrix_facebook_enabled: true
|
||||||
```
|
```
|
||||||
@ -47,9 +41,6 @@ matrix_mautrix_facebook_configuration_extension_yaml: |
|
|||||||
|
|
||||||
You may wish to look at `roles/custom/matrix-bridge-mautrix-facebook/templates/config.yaml.j2` and `roles/custom/matrix-bridge-mautrix-facebook/defaults/main.yml` to find other things you would like to configure.
|
You may wish to look at `roles/custom/matrix-bridge-mautrix-facebook/templates/config.yaml.j2` and `roles/custom/matrix-bridge-mautrix-facebook/defaults/main.yml` to find other things you would like to configure.
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
@ -76,7 +67,7 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You then need to start a chat with `@facebookbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
You then need to start a chat with `@facebookbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `login YOUR_FACEBOOK_EMAIL_ADDRESS` to the bridge bot to enable bridging for your Facebook Messenger account. You can learn more here about authentication from the bridge's [official documentation on Authentication](https://docs.mau.fi/bridges/python/facebook/authentication.html).
|
Send `login YOUR_FACEBOOK_EMAIL_ADDRESS` to the bridge bot to enable bridging for your Facebook Messenger account. You can learn more here about authentication from the bridge's [official documentation on Authentication](https://docs.mau.fi/bridges/python/facebook/authentication.html).
|
||||||
|
|
||||||
@ -98,7 +89,7 @@ The easiest way to do this may be to use [sshuttle](https://sshuttle.readthedocs
|
|||||||
Example command for proxying your traffic through the Matrix server:
|
Example command for proxying your traffic through the Matrix server:
|
||||||
|
|
||||||
```
|
```
|
||||||
sshuttle -r root@matrix.example.com:22 0/0
|
sshuttle -r root@matrix.DOMAIN:22 0/0
|
||||||
```
|
```
|
||||||
|
|
||||||
Once connected, you should be able to verify that you're browsing the web through the Matrix server's IP by checking [icanhazip](https://icanhazip.com/).
|
Once connected, you should be able to verify that you're browsing the web through the Matrix server's IP by checking [icanhazip](https://icanhazip.com/).
|
||||||
@ -107,4 +98,4 @@ Then proceed to log in to [Facebook/Messenger](https://www.facebook.com/).
|
|||||||
|
|
||||||
Once logged in, proceed to [set up bridging](#usage).
|
Once logged in, proceed to [set up bridging](#usage).
|
||||||
|
|
||||||
If that doesn't work, enable 2FA (see: [Facebook help page on enabling 2FA](https://www.facebook.com/help/148233965247823)) and try to login again with a new password, and entering the 2FA code when prompted, it may take more then one try, in between attempts, check facebook.com to see if they are requiring another password change
|
If that doesn't work, enable 2FA [Facebook help page on enabling 2FA](https://www.facebook.com/help/148233965247823) and try to login again with a new password, and entering the 2FA code when prompted, it may take more then one try, in between attempts, check facebook.com to see if they are requiring another password change
|
||||||
|
@ -1,30 +1,24 @@
|
|||||||
# Setting up Mautrix Google Messages bridging (optional)
|
# Setting up Mautrix gmessages (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-gmessages](https://github.com/mautrix/gmessages) for you, for bridging to [Google Messages](https://messages.google.com/).
|
The playbook can install and configure [mautrix-gmessages](https://github.com/mautrix/gmessages) for you, for bridging to [Google Messages](https://messages.google.com/).
|
||||||
|
|
||||||
See the project's [documentation](https://docs.mau.fi/bridges/go/gmessages/index.html) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://docs.mau.fi/bridges/go/gmessages/index.html) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
Use the following playbook configuration:
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_gmessages_enabled: true
|
matrix_mautrix_gmessages_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
||||||
|
|
||||||
### Method 1: automatically, by enabling Appservice Double Puppet
|
### Method 1: automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
### Method 2: manually, by asking each user to provide a working access token
|
### Method 2: manually, by asking each user to provide a working access token
|
||||||
|
|
||||||
@ -41,4 +35,4 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You then need to start a chat with `@gmessagesbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
You then need to start a chat with `@gmessagesbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
@ -1,32 +1,26 @@
|
|||||||
# Setting up Mautrix Google Chat bridging (optional)
|
# Setting up Mautrix Google Chat (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-googlechat](https://github.com/mautrix/googlechat) for you.
|
The playbook can install and configure [mautrix-googlechat](https://github.com/mautrix/googlechat) for you.
|
||||||
|
|
||||||
See the project's [documentation](https://docs.mau.fi/bridges/python/googlechat/index.html) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://docs.mau.fi/bridges/python/googlechat/index.html) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable the [Google Chat](https://chat.google.com/) bridge just use the following playbook configuration:
|
||||||
|
|
||||||
To enable the [Google Chat](https://chat.google.com/) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_googlechat_enabled: true
|
matrix_mautrix_googlechat_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
||||||
|
|
||||||
### Method 1: automatically, by enabling Appservice Double Puppet or Shared Secret Auth
|
### Method 1: automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service or the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
Enabling double puppeting by enabling the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service works at the time of writing, but is deprecated and will stop working in the future.
|
|
||||||
|
|
||||||
|
|
||||||
### Method 2: manually, by asking each user to provide a working access token
|
### Method 2: manually, by asking each user to provide a working access token
|
||||||
@ -44,7 +38,7 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled you need to start a chat with `googlechat bridge bot` with handle `@googlechatbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled you need to start a chat with `googlechat bridge bot` with handle `@googlechatbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `login` to the bridge bot to receive a link to the portal from which you can enable the bridging. Open the link sent by the bot and follow the instructions.
|
Send `login` to the bridge bot to receive a link to the portal from which you can enable the bridging. Open the link sent by the bot and follow the instructions.
|
||||||
|
|
||||||
@ -55,3 +49,4 @@ Once logged in, recent chats should show up as new conversations automatically.
|
|||||||
You can learn more about authentication from the bridge's [official documentation on Authentication](https://docs.mau.fi/bridges/python/googlechat/authentication.html).
|
You can learn more about authentication from the bridge's [official documentation on Authentication](https://docs.mau.fi/bridges/python/googlechat/authentication.html).
|
||||||
|
|
||||||
After successfully enabling bridging, you may wish to [set up Double Puppeting](#set-up-double-puppeting), if you haven't already done so.
|
After successfully enabling bridging, you may wish to [set up Double Puppeting](#set-up-double-puppeting), if you haven't already done so.
|
||||||
|
|
||||||
|
@ -1,22 +1,18 @@
|
|||||||
# Setting up Mautrix Hangouts bridging (optional)
|
# The [Mautrix Hangouts Bridge](https://mau.dev/mautrix/hangouts) is no longer maintained. It has changed to a [Google Chat Bridge](https://github.com/mautrix/googlechat). Setup instructions for the Google Chat Bridge can be [found here](configuring-playbook-bridge-mautrix-googlechat.md).
|
||||||
|
|
||||||
**Note**: This bridge has been deprecated in favor of [Google Chat bridge](https://github.com/mautrix/googlechat), which can be installed using [this playbook](configuring-playbook-bridge-mautrix-googlechat.md). Consider using that bridge instead of this one.
|
# Setting up Mautrix Hangouts (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-hangouts](https://github.com/mautrix/hangouts) for you.
|
The playbook can install and configure [mautrix-hangouts](https://github.com/mautrix/hangouts) for you.
|
||||||
|
|
||||||
See the project's [documentation](https://docs.mau.fi/bridges/python/hangouts/index.html) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://docs.mau.fi/bridges/python/hangouts/index.html) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable the [Google Hangouts](https://hangouts.google.com/) bridge just use the following playbook configuration:
|
||||||
|
|
||||||
To enable the [Google Hangouts](https://hangouts.google.com/) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_hangouts_enabled: true
|
matrix_mautrix_hangouts_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
@ -44,7 +40,7 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled you need to start a chat with `Hangouts bridge bot` with handle `@hangoutsbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled you need to start a chat with `Hangouts bridge bot` with handle `@hangoutsbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `login` to the bridge bot to receive a link to the portal from which you can enable the bridging. Open the link sent by the bot and follow the instructions.
|
Send `login` to the bridge bot to receive a link to the portal from which you can enable the bridging. Open the link sent by the bot and follow the instructions.
|
||||||
|
|
||||||
@ -55,3 +51,4 @@ Once logged in, recent chats should show up as new conversations automatically.
|
|||||||
You can learn more about authentication from the bridge's [official documentation on Authentication](https://docs.mau.fi/bridges/python/hangouts/authentication.html).
|
You can learn more about authentication from the bridge's [official documentation on Authentication](https://docs.mau.fi/bridges/python/hangouts/authentication.html).
|
||||||
|
|
||||||
After successfully enabling bridging, you may wish to [set up Double Puppeting](#set-up-double-puppeting), if you haven't already done so.
|
After successfully enabling bridging, you may wish to [set up Double Puppeting](#set-up-double-puppeting), if you haven't already done so.
|
||||||
|
|
||||||
|
@ -1,19 +1,12 @@
|
|||||||
# Setting up Mautrix Instagram bridging (optional)
|
# Setting up Mautrix Instagram (optional)
|
||||||
|
|
||||||
**Note**: This bridge has been deprecated in favor of the [mautrix-meta](https://github.com/mautrix/meta) Messenger/Instagram bridge, which can be installed using [this playbook](configuring-playbook-bridge-mautrix-meta-instagram.md). Consider using that bridge instead of this one.
|
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-instagram](https://github.com/mautrix/instagram) for you.
|
The playbook can install and configure [mautrix-instagram](https://github.com/mautrix/instagram) for you.
|
||||||
|
|
||||||
See the project's [documentation](https://docs.mau.fi/bridges/python/instagram/index.html) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://docs.mau.fi/bridges/python/instagram/index.html) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_instagram_enabled: true
|
matrix_mautrix_instagram_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
There are some additional things you may wish to configure about the bridge before you continue.
|
There are some additional things you may wish to configure about the bridge before you continue.
|
||||||
|
|
||||||
Encryption support is off by default. If you would like to enable encryption, add the following to your `vars.yml` file:
|
Encryption support is off by default. If you would like to enable encryption, add the following to your `vars.yml` file:
|
||||||
@ -35,18 +28,15 @@ matrix_admin: "@YOUR_USERNAME:{{ matrix_domain }}"
|
|||||||
matrix_mautrix_instagram_configuration_extension_yaml: |
|
matrix_mautrix_instagram_configuration_extension_yaml: |
|
||||||
bridge:
|
bridge:
|
||||||
permissions:
|
permissions:
|
||||||
'@YOUR_USERNAME:example.com': admin
|
'@YOUR_USERNAME:YOUR_DOMAIN': admin
|
||||||
```
|
```
|
||||||
|
|
||||||
You may wish to look at `roles/custom/matrix-bridge-mautrix-instagram/templates/config.yaml.j2` and `roles/custom/matrix-bridge-mautrix-instagram/defaults/main.yml` to find other things you would like to configure.
|
You may wish to look at `roles/custom/matrix-bridge-mautrix-instagram/templates/config.yaml.j2` and `roles/custom/matrix-bridge-mautrix-instagram/defaults/main.yml` to find other things you would like to configure.
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You then need to start a chat with `@instagrambot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
You then need to start a chat with `@instagrambot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `login YOUR_INSTAGRAM_EMAIL_ADDRESS YOUR_INSTAGRAM_PASSWORD` to the bridge bot to enable bridging for your instagram/Messenger account.
|
Send `login YOUR_INSTAGRAM_EMAIL_ADDRESS YOUR_INSTAGRAM_PASSWORD` to the bridge bot to enable bridging for your instagram/Messenger account.
|
||||||
|
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
# Setting up Instagram bridging via Mautrix Meta (optional)
|
|
||||||
|
|
||||||
The playbook can install and configure the [mautrix-meta](https://github.com/mautrix/meta) Messenger/Instagram bridge for you.
|
|
||||||
|
|
||||||
Since this bridge component can bridge to both [Messenger](https://messenger.com/) and [Instagram](https://instagram.com/) and you may wish to do both at the same time, the playbook makes it available via 2 different Ansible roles (`matrix-bridge-mautrix-meta-messenger` and `matrix-bridge-mautrix-meta-instagram`). The latter is a reconfigured copy of the first one (created by `just rebuild-mautrix-meta-instagram` and `bin/rebuild-mautrix-meta-instagram.sh`).
|
|
||||||
|
|
||||||
This documentation page only deals with the bridge's ability to bridge to Instagram. For bridging to Facebook/Messenger, see [Setting up Messenger bridging via Mautrix Meta](configuring-playbook-bridge-mautrix-meta-messenger.md).
|
|
||||||
|
|
||||||
|
|
||||||
## Migrating from the old mautrix-instagram bridge
|
|
||||||
|
|
||||||
If you've been using the [mautrix-instagram](./configuring-playbook-bridge-mautrix-instagram.md) bridge, **you'd better get rid of it first** or the 2 bridges will be in conflict:
|
|
||||||
|
|
||||||
- both trying to use `@instagrambot:example.com` as their username. This conflict may be resolved by adjusting `matrix_mautrix_instagram_appservice_bot_username` or `matrix_mautrix_meta_instagram_appservice_username`
|
|
||||||
- both trying to bridge the same DMs
|
|
||||||
|
|
||||||
To do so, send a `clean-rooms` command to the management room with the old bridge bot (`@instagrambot:example.com`).
|
|
||||||
|
|
||||||
This would give you a list of portals and groups of portals you may purge. Proceed with sending commands like `clean recommended`, etc.
|
|
||||||
|
|
||||||
Then, consider disabling the old bridge in your configuration, so it won't recreate the portals when you receive new messages.
|
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_mautrix_meta_instagram_enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
Before proceeding to [re-running the playbook](./installing.md), you may wish to adjust the configuration further. See below.
|
|
||||||
|
|
||||||
### Bridge permissions
|
|
||||||
|
|
||||||
By default, any user on your homeserver will be able to use the bridge.
|
|
||||||
|
|
||||||
Different levels of permission can be granted to users:
|
|
||||||
|
|
||||||
- `relay` - Allowed to be relayed through the bridge, no access to commands
|
|
||||||
- `user` - Use the bridge with puppeting
|
|
||||||
- `admin` - Use and administer the bridge
|
|
||||||
|
|
||||||
The permissions are following the sequence: nothing < `relay` < `user` < `admin`.
|
|
||||||
|
|
||||||
The default permissions are set via `matrix_mautrix_meta_instagram_bridge_permissions_default` and are somewhat like this:
|
|
||||||
```yaml
|
|
||||||
matrix_mautrix_meta_instagram_bridge_permissions_default:
|
|
||||||
'*': relay
|
|
||||||
example.com: user
|
|
||||||
'{{ matrix_admin }}': admin
|
|
||||||
```
|
|
||||||
|
|
||||||
If you don't define the `matrix_admin` in your configuration (e.g. `matrix_admin: @user:example.com`), then there's no admin by default.
|
|
||||||
|
|
||||||
You may redefine `matrix_mautrix_meta_instagram_bridge_permissions_default` any way you see fit, or add extra permissions using `matrix_mautrix_meta_instagram_bridge_permissions_custom` like this:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_mautrix_meta_instagram_bridge_permissions_custom:
|
|
||||||
'@YOUR_USERNAME:example.com': admin
|
|
||||||
```
|
|
||||||
|
|
||||||
You may wish to look at `roles/custom/matrix-bridge-mautrix-meta-instagram/templates/config.yaml.j2` to find more information on the permissions settings and other options you would like to configure.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
|
||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
|
||||||
|
|
||||||
### Method 1: automatically, by enabling Appservice Double Puppet
|
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service for this playbook.
|
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
|
||||||
|
|
||||||
### Method 2: manually, by asking each user to provide a working access token
|
|
||||||
|
|
||||||
**Note**: This method for enabling Double Puppeting can be configured only after you've already set up bridging (see [Usage](#usage)).
|
|
||||||
|
|
||||||
When using this method, **each user** that wishes to enable Double Puppeting needs to follow the following steps:
|
|
||||||
|
|
||||||
- retrieve a Matrix access token for yourself. Refer to the documentation on [how to do that](obtaining-access-tokens.md).
|
|
||||||
|
|
||||||
- send the access token to the bot. Example: `login-matrix MATRIX_ACCESS_TOKEN_HERE`
|
|
||||||
|
|
||||||
- make sure you don't log out the session for which you obtained an access token some time in the future, as that would break the Double Puppeting feature
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
You then need to start a chat with `@instagrambot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
|
@ -1,109 +0,0 @@
|
|||||||
# Setting up Messenger bridging via Mautrix Meta (optional)
|
|
||||||
|
|
||||||
The playbook can install and configure the [mautrix-meta](https://github.com/mautrix/meta) Messenger/Instagram bridge for you.
|
|
||||||
|
|
||||||
Since this bridge component can bridge to both [Messenger](https://messenger.com/) and [Instagram](https://instagram.com/) and you may wish to do both at the same time, the playbook makes it available via 2 different Ansible roles (`matrix-bridge-mautrix-meta-messenger` and `matrix-bridge-mautrix-meta-instagram`). The latter is a reconfigured copy of the first one (created by `just rebuild-mautrix-meta-instagram` and `bin/rebuild-mautrix-meta-instagram.sh`).
|
|
||||||
|
|
||||||
This documentation page only deals with the bridge's ability to bridge to Facebook Messenger. For bridging to Instagram, see [Setting up Instagram bridging via Mautrix Meta](configuring-playbook-bridge-mautrix-meta-instagram.md).
|
|
||||||
|
|
||||||
|
|
||||||
## Migrating from the old mautrix-facebook bridge
|
|
||||||
|
|
||||||
If you've been using the [mautrix-facebook](./configuring-playbook-bridge-mautrix-facebook.md) bridge, it's possible to migrate the database using [instructions from the bridge documentation](https://docs.mau.fi/bridges/go/meta/facebook-migration.html) (advanced).
|
|
||||||
|
|
||||||
Then you may wish to get rid of the Facebook bridge. To do so, send a `clean-rooms` command to the management room with the old bridge bot (`@facebookbot:example.com`).
|
|
||||||
|
|
||||||
This would give you a list of portals and groups of portals you may purge. Proceed with sending commands like `clean recommended`, etc.
|
|
||||||
|
|
||||||
Then, consider disabling the old bridge in your configuration, so it won't recreate the portals when you receive new messages.
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_mautrix_meta_messenger_enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
Before proceeding to [re-running the playbook](./installing.md), you may wish to adjust the configuration further. See below.
|
|
||||||
|
|
||||||
### Bridge mode
|
|
||||||
|
|
||||||
As mentioned above, the [mautrix-meta](https://github.com/mautrix/meta) bridge supports multiple modes of operation.
|
|
||||||
|
|
||||||
The bridge can pull your Messenger messages via 3 different methods:
|
|
||||||
|
|
||||||
- (`facebook`) Facebook via `facebook.com`
|
|
||||||
- (`facebook-tor`) Facebook via `facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion` ([Tor](https://www.torproject.org/)) - does not currently proxy media downloads
|
|
||||||
- (default) (`messenger`) Messenger via `messenger.com` - usable even without a Facebook account
|
|
||||||
|
|
||||||
You may switch the mode via the `matrix_mautrix_meta_messenger_meta_mode` variable. The playbook defaults to the `messenger` mode, because it's most universal (every Facebook user has a Messenger account, but the opposite is not true).
|
|
||||||
|
|
||||||
Note that switching the mode (especially between `facebook*` and `messenger`) will intentionally make the bridge use another database (`matrix_mautrix_meta_facebook` or `matrix_mautrix_meta_messenger`) to isolate the 2 instances. Switching between Tor and non-Tor may be possible without dataloss, but your mileage may vary. Before switching to a new mode, you may wish to de-configure the old one (send `help` to the bridge bot and unbridge your portals, etc.).
|
|
||||||
|
|
||||||
|
|
||||||
### Bridge permissions
|
|
||||||
|
|
||||||
By default, any user on your homeserver will be able to use the bridge.
|
|
||||||
|
|
||||||
Different levels of permission can be granted to users:
|
|
||||||
|
|
||||||
- `relay` - Allowed to be relayed through the bridge, no access to commands
|
|
||||||
- `user` - Use the bridge with puppeting
|
|
||||||
- `admin` - Use and administer the bridge
|
|
||||||
|
|
||||||
The permissions are following the sequence: nothing < `relay` < `user` < `admin`.
|
|
||||||
|
|
||||||
The default permissions are set via `matrix_mautrix_meta_messenger_bridge_permissions_default` and are somewhat like this:
|
|
||||||
```yaml
|
|
||||||
matrix_mautrix_meta_messenger_bridge_permissions_default:
|
|
||||||
'*': relay
|
|
||||||
example.com: user
|
|
||||||
'{{ matrix_admin }}': admin
|
|
||||||
```
|
|
||||||
|
|
||||||
If you don't define the `matrix_admin` in your configuration (e.g. `matrix_admin: @user:example.com`), then there's no admin by default.
|
|
||||||
|
|
||||||
You may redefine `matrix_mautrix_meta_messenger_bridge_permissions_default` any way you see fit, or add extra permissions using `matrix_mautrix_meta_messenger_bridge_permissions_custom` like this:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_mautrix_meta_messenger_bridge_permissions_custom:
|
|
||||||
'@YOUR_USERNAME:example.com': admin
|
|
||||||
```
|
|
||||||
|
|
||||||
You may wish to look at `roles/custom/matrix-bridge-mautrix-meta-messenger/templates/config.yaml.j2` to find more information on the permissions settings and other options you would like to configure.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
|
||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
|
||||||
|
|
||||||
### Method 1: automatically, by enabling Appservice Double Puppet
|
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service for this playbook.
|
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
|
||||||
|
|
||||||
### Method 2: manually, by asking each user to provide a working access token
|
|
||||||
|
|
||||||
**Note**: This method for enabling Double Puppeting can be configured only after you've already set up bridging (see [Usage](#usage)).
|
|
||||||
|
|
||||||
When using this method, **each user** that wishes to enable Double Puppeting needs to follow the following steps:
|
|
||||||
|
|
||||||
- retrieve a Matrix access token for yourself. Refer to the documentation on [how to do that](obtaining-access-tokens.md).
|
|
||||||
|
|
||||||
- send the access token to the bot. Example: `login-matrix MATRIX_ACCESS_TOKEN_HERE`
|
|
||||||
|
|
||||||
- make sure you don't log out the session for which you obtained an access token some time in the future, as that would break the Double Puppeting feature
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
You then need to start a chat with `@messengerbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
|
||||||
|
|
||||||
You then need to send a `login` command and follow the bridge bot's instructions.
|
|
||||||
|
|
||||||
Given that the bot is configured in `messenger` [bridge mode](#bridge-mode) by default, you will need to log in to [messenger.com](https://messenger.com/) (not `facebook.com`!) and obtain the cookies from there as per [the bridge's authentication instructions](https://docs.mau.fi/bridges/go/meta/authentication.html).
|
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up Mautrix Signal bridging (optional)
|
# Setting up Mautrix Signal (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-signal](https://github.com/mautrix/signal) for you.
|
The playbook can install and configure [mautrix-signal](https://github.com/mautrix/signal) for you.
|
||||||
|
|
||||||
@ -6,11 +6,7 @@ See the project's [documentation](https://docs.mau.fi/bridges/python/signal/inde
|
|||||||
|
|
||||||
**Note/Prerequisite**: If you're running with the Postgres database server integrated by the playbook (which is the default), you don't need to do anything special and can easily proceed with installing. However, if you're [using an external Postgres server](configuring-playbook-external-postgres.md), you'd need to manually prepare a Postgres database for this bridge and adjust the variables related to that (`matrix_mautrix_signal_database_*`).
|
**Note/Prerequisite**: If you're running with the Postgres database server integrated by the playbook (which is the default), you don't need to do anything special and can easily proceed with installing. However, if you're [using an external Postgres server](configuring-playbook-external-postgres.md), you'd need to manually prepare a Postgres database for this bridge and adjust the variables related to that (`matrix_mautrix_signal_database_*`).
|
||||||
|
|
||||||
**Note**: This revamped version of the [mautrix-signal (legacy)](configuring-playbook-bridge-mautrix-signal.md) may increase the CPU usage of your homeserver.
|
Use the following playbook configuration:
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_signal_enabled: true
|
matrix_mautrix_signal_enabled: true
|
||||||
@ -18,7 +14,14 @@ matrix_mautrix_signal_enabled: true
|
|||||||
|
|
||||||
There are some additional things you may wish to configure about the bridge before you continue.
|
There are some additional things you may wish to configure about the bridge before you continue.
|
||||||
|
|
||||||
|
The relay bot functionality is off by default. If you would like to enable the relay bot, add the following to your `vars.yml` file:
|
||||||
|
```yaml
|
||||||
|
matrix_mautrix_signal_relaybot_enabled: true
|
||||||
|
```
|
||||||
|
If you want to activate the relay bot in a room, use `!signal set-relay`.
|
||||||
|
Use `!signal unset-relay` to deactivate.
|
||||||
By default, any user on your homeserver will be able to use the bridge.
|
By default, any user on your homeserver will be able to use the bridge.
|
||||||
|
If you enable the relay bot functionality, it will relay every user's messages in a portal room - no matter which homeserver they're from.
|
||||||
|
|
||||||
Different levels of permission can be granted to users:
|
Different levels of permission can be granted to users:
|
||||||
|
|
||||||
@ -32,7 +35,7 @@ The default permissions are set as follows:
|
|||||||
```yaml
|
```yaml
|
||||||
permissions:
|
permissions:
|
||||||
'*': relay
|
'*': relay
|
||||||
example.com: user
|
YOUR_DOMAIN: user
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to augment the preset permissions, you might want to set the additional permissions with the following settings in your `vars.yml` file:
|
If you want to augment the preset permissions, you might want to set the additional permissions with the following settings in your `vars.yml` file:
|
||||||
@ -40,31 +43,27 @@ If you want to augment the preset permissions, you might want to set the additio
|
|||||||
matrix_mautrix_signal_configuration_extension_yaml: |
|
matrix_mautrix_signal_configuration_extension_yaml: |
|
||||||
bridge:
|
bridge:
|
||||||
permissions:
|
permissions:
|
||||||
'@YOUR_USERNAME:example.com': admin
|
'@YOUR_USERNAME:YOUR_DOMAIN': admin
|
||||||
```
|
```
|
||||||
|
|
||||||
This will add the admin permission to the specific user, while keeping the default permissions.
|
This will add the admin permission to the specific user, while keepting the default permissions.
|
||||||
|
|
||||||
In case you want to replace the default permissions settings **completely**, populate the following item within your `vars.yml` file:
|
In case you want to replace the default permissions settings **completely**, populate the following item within your `vars.yml` file:
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_signal_bridge_permissions:
|
matrix_mautrix_signal_bridge_permissions: |
|
||||||
'@ADMIN:example.com': admin
|
'@ADMIN:YOUR_DOMAIN': admin
|
||||||
'@USER:example.com' : user
|
'@USER:YOUR_DOMAIN' : user
|
||||||
```
|
```
|
||||||
|
|
||||||
You may wish to look at `roles/custom/matrix-bridge-mautrix-signal/templates/config.yaml.j2` to find more information on the permissions settings and other options you would like to configure.
|
You may wish to look at `roles/custom/matrix-bridge-mautrix-signal/templates/config.yaml.j2` to find more information on the permissions settings and other options you would like to configure.
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
||||||
|
|
||||||
### Method 1: automatically, by enabling Appservice Double Puppet
|
### Method 1: automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
@ -83,4 +82,4 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You then need to start a chat with `@signalbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
You then need to start a chat with `@signalbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Setting up Mautrix Slack bridging (optional)
|
# Setting up Mautrix Slack (optional)
|
||||||
|
|
||||||
**Note**: bridging to [Slack](https://slack.com/) can also happen via the [mx-puppet-slack](configuring-playbook-bridge-mx-puppet-slack.md) and [matrix-appservice-slack](configuring-playbook-bridge-appservice-slack.md) bridges supported by the playbook.
|
**Note**: bridging to [Slack](https://slack.com/) can also happen via the [mx-puppet-slack](configuring-playbook-bridge-mx-puppet-slack.md) and [matrix-appservice-slack](configuring-playbook-bridge-appservice-slack.md) bridges supported by the playbook.
|
||||||
- For using as a Bot we recommend the [Appservice Slack](configuring-playbook-bridge-appservice-slack.md), because it supports plumbing. Note that it is not available for new installation unless you have already created a classic Slack application, because the creation of classic Slack applications, which this bridge makes use of, has been discontinued.
|
- For using as a Bot we recommend the [Appservice Slack](configuring-playbook-bridge-appservice-slack.md), because it supports plumbing.
|
||||||
- For personal use with a slack account we recommend the `mautrix-slack` bridge (the one being discussed here), because it is the most fully-featured and stable of the 3 Slack bridges supported by the playbook.
|
- For personal use with a slack account we recommend the `mautrix-slack` bridge (the one being discussed here), because it is the most fully-featured and stable of the 3 Slack bridges supported by the playbook.
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-slack](https://github.com/mautrix/slack) for you.
|
The playbook can install and configure [mautrix-slack](https://github.com/mautrix/slack) for you.
|
||||||
@ -18,9 +18,9 @@ For using this bridge, you would need to authenticate by **providing your userna
|
|||||||
Note that neither of these methods are officially supported by Slack. [matrix-appservice-slack](configuring-playbook-bridge-appservice-slack.md) uses a Slack bot account which is the only officially supported method for bridging a Slack channel.
|
Note that neither of these methods are officially supported by Slack. [matrix-appservice-slack](configuring-playbook-bridge-appservice-slack.md) uses a Slack bot account which is the only officially supported method for bridging a Slack channel.
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Installing
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
To enable the bridge, add this to your `vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_slack_enabled: true
|
matrix_mautrix_slack_enabled: true
|
||||||
@ -28,13 +28,7 @@ matrix_mautrix_slack_enabled: true
|
|||||||
|
|
||||||
You may optionally wish to add some [Additional configuration](#additional-configuration), or to [prepare for double-puppeting](#set-up-double-puppeting) before the initial installation.
|
You may optionally wish to add some [Additional configuration](#additional-configuration), or to [prepare for double-puppeting](#set-up-double-puppeting) before the initial installation.
|
||||||
|
|
||||||
## Installing
|
After adjusting your `vars.yml` file, re-run the playbook and restart all services: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
|
||||||
|
|
||||||
```
|
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|
||||||
```
|
|
||||||
|
|
||||||
To make use of the bridge, see [Usage](#usage) below.
|
To make use of the bridge, see [Usage](#usage) below.
|
||||||
|
|
||||||
@ -53,9 +47,9 @@ Take a look at:
|
|||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
||||||
|
|
||||||
#### Method 1: automatically, by enabling Appservice Double Puppet
|
#### Method 1: automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
@ -74,7 +68,7 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
1. Start a chat with `@slackbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
1. Start a chat with `@slackbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
2. If you would like to login to Slack using a token, send the `login-token` command, otherwise, send the `login-password` command. Read [here](https://docs.mau.fi/bridges/go/slack/authentication.html) on how to retrieve your token and cookie token.
|
2. If you would like to login to Slack using a token, send the `login-token` command, otherwise, send the `login-password` command. Read [here](https://docs.mau.fi/bridges/go/slack/authentication.html) on how to retrieve your token and cookie token.
|
||||||
3. The bot should respond with "Successfully logged into <email> for team <workspace>"
|
3. The bot should respond with "Successfully logged into <email> for team <workspace>"
|
||||||
4. Now that you're logged in, you can send a `help` command to the bot again, to see additional commands you have access to.
|
4. Now that you're logged in, you can send a `help` command to the bot again, to see additional commands you have access to.
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
# Setting up Mautrix Telegram bridging (optional)
|
# Setting up Mautrix Telegram (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-telegram](https://github.com/mautrix/telegram) for you.
|
The playbook can install and configure [mautrix-telegram](https://github.com/mautrix/telegram) for you.
|
||||||
|
|
||||||
See the project's [documentation](https://docs.mau.fi/bridges/python/telegram/index.html) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://docs.mau.fi/bridges/python/telegram/index.html) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
You'll need to obtain API keys from [https://my.telegram.org/apps](https://my.telegram.org/apps) and then use the following playbook configuration:
|
||||||
|
|
||||||
You'll need to obtain API keys from [https://my.telegram.org/apps](https://my.telegram.org/apps) and then add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_telegram_enabled: true
|
matrix_mautrix_telegram_enabled: true
|
||||||
@ -14,21 +12,15 @@ matrix_mautrix_telegram_api_id: YOUR_TELEGRAM_APP_ID
|
|||||||
matrix_mautrix_telegram_api_hash: YOUR_TELEGRAM_API_HASH
|
matrix_mautrix_telegram_api_hash: YOUR_TELEGRAM_API_HASH
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
||||||
|
|
||||||
### Method 1: automatically, by enabling Appservice Double Puppet or Shared Secret Auth
|
### Method 1: automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service or the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
Enabling double puppeting by enabling the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service works at the time of writing, but is deprecated and will stop working in the future.
|
|
||||||
|
|
||||||
### Method 2: manually, by asking each user to provide a working access token
|
### Method 2: manually, by asking each user to provide a working access token
|
||||||
|
|
||||||
@ -45,9 +37,9 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You then need to start a chat with `@telegrambot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
You then need to start a chat with `@telegrambot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
If you want to use the relay-bot feature ([relay bot documentation](https://docs.mau.fi/bridges/python/telegram/relay-bot.html)), which allows anonymous user to chat with telegram users, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
If you want to use the relay-bot feature ([relay bot documentation](https://docs.mau.fi/bridges/python/telegram/relay-bot.html)), which allows anonymous user to chat with telegram users, use the following additional playbook configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_telegram_bot_token: YOUR_TELEGRAM_BOT_TOKEN
|
matrix_mautrix_telegram_bot_token: YOUR_TELEGRAM_BOT_TOKEN
|
||||||
@ -62,10 +54,11 @@ You might also want to give permissions to administrate the bot:
|
|||||||
matrix_mautrix_telegram_configuration_extension_yaml: |
|
matrix_mautrix_telegram_configuration_extension_yaml: |
|
||||||
bridge:
|
bridge:
|
||||||
permissions:
|
permissions:
|
||||||
'@user:example.com': admin
|
'@user:DOMAIN': admin
|
||||||
```
|
```
|
||||||
|
|
||||||
More details about permissions in this example: https://github.com/mautrix/telegram/blob/master/mautrix_telegram/example-config.yaml#L410
|
More details about permissions in this example:
|
||||||
|
https://github.com/mautrix/telegram/blob/master/mautrix_telegram/example-config.yaml#L410
|
||||||
|
|
||||||
If you like to exclude all groups from syncing and use the Telgeram-Bridge only for direct chats, you can add the following additional playbook configuration:
|
If you like to exclude all groups from syncing and use the Telgeram-Bridge only for direct chats, you can add the following additional playbook configuration:
|
||||||
```yaml
|
```yaml
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up Mautrix Twitter bridging (optional)
|
# Setting up Mautrix Twitter (optional)
|
||||||
|
|
||||||
**Note**: bridging to [Twitter](https://twitter.com/) can also happen via the [mx-puppet-twitter](configuring-playbook-bridge-mx-puppet-twitter.md) bridge supported by the playbook.
|
**Note**: bridging to [Twitter](https://twitter.com/) can also happen via the [mx-puppet-twitter](configuring-playbook-bridge-mx-puppet-twitter.md) bridge supported by the playbook.
|
||||||
|
|
||||||
@ -6,29 +6,20 @@ The playbook can install and configure [mautrix-twitter](https://github.com/maut
|
|||||||
|
|
||||||
See the project's [documentation](https://github.com/mautrix/twitter) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/mautrix/twitter) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_twitter_enabled: true
|
matrix_mautrix_twitter_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
||||||
|
|
||||||
### Method 1: automatically, by enabling Appservice Double Puppet or Shared Secret Auth
|
### Method 1: automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service or the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
Enabling double puppeting by enabling the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service works at the time of writing, but is deprecated and will stop working in the future.
|
|
||||||
|
|
||||||
### Method 2: manually, by asking each user to provide a working access token
|
### Method 2: manually, by asking each user to provide a working access token
|
||||||
|
|
||||||
@ -36,7 +27,7 @@ This method is currently not available for the Mautrix-Twitter bridge, but is on
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
1. You then need to start a chat with `@twitterbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
1. You then need to start a chat with `@twitterbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
2. Send login-cookie to start the login. The bot should respond with instructions on how to proceed.
|
2. Send login-cookie to start the login. The bot should respond with instructions on how to proceed.
|
||||||
|
|
||||||
You can learn more here about authentication from the bridge's [official documentation on Authentication](https://docs.mau.fi/bridges/python/twitter/authentication.html).
|
You can learn more here about authentication from the bridge's [official documentation on Authentication](https://docs.mau.fi/bridges/python/twitter/authentication.html).
|
||||||
|
@ -1,48 +1,55 @@
|
|||||||
# Setting up Mautrix Whatsapp bridging (optional)
|
# Setting up Mautrix Whatsapp (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-whatsapp](https://github.com/mautrix/whatsapp) for you.
|
The playbook can install and configure [mautrix-whatsapp](https://github.com/mautrix/whatsapp) for you.
|
||||||
|
|
||||||
See the project's [documentation](https://docs.mau.fi/bridges/go/whatsapp/index.html) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://docs.mau.fi/bridges/go/whatsapp/index.html) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
Use the following playbook configuration:
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_whatsapp_enabled: true
|
matrix_mautrix_whatsapp_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
Whatsapp multidevice beta is required, now it is enough if Whatsapp is connected to the Internet every 2 weeks.
|
Whatsapp multidevice beta is required, now it is enough if Whatsapp is connected to the Internet every 2 weeks.
|
||||||
|
|
||||||
The relay bot functionality is off by default. If you would like to enable the relay bot, add the following to your `vars.yml` file:
|
The relay bot functionality is off by default. If you would like to enable the relay bot, add the following to your `vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_whatsapp_bridge_relay_enabled: true
|
matrix_mautrix_whatsapp_bridge_relay_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
By default, only admins are allowed to set themselves as relay users. To allow anyone on your homeserver to set themselves as relay users add this to your `vars.yml` file:
|
By default, only admins are allowed to set themselves as relay users. To allow anyone on your homeserver to set themselves as relay users add this to your `vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_whatsapp_bridge_relay_admin_only: false
|
matrix_mautrix_whatsapp_bridge_relay_admin_only: false
|
||||||
```
|
```
|
||||||
|
|
||||||
If you want to activate the relay bot in a room, send `!wa set-relay`. To deactivate, send `!wa unset-relay`.
|
If you want to activate the relay bot in a room, use `!wa set-relay`.
|
||||||
|
Use `!wa unset-relay` to deactivate.
|
||||||
|
|
||||||
## Installing
|
## Enable backfilling history
|
||||||
|
This requires a server with MSC2716 support, which is currently an experimental feature in synapse.
|
||||||
|
Note that as of Synapse 1.46, there are still some bugs with the implementation, especially if using event persistence workers.
|
||||||
|
Use the following playbook configuration:
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
```yaml
|
||||||
|
matrix_synapse_configuration_extension_yaml: |
|
||||||
|
experimental_features:
|
||||||
|
msc2716_enabled: true
|
||||||
|
```
|
||||||
|
```yaml
|
||||||
|
matrix_mautrix_whatsapp_configuration_extension_yaml:
|
||||||
|
bridge:
|
||||||
|
history_sync:
|
||||||
|
backfill: true
|
||||||
|
```
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
If you'd like to use [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) (hint: you most likely do), you have 2 ways of going about it.
|
||||||
|
|
||||||
### Method 1: automatically, by enabling Appservice Double Puppet or Shared Secret Auth
|
### Method 1: automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service or the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service for this playbook.
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook.
|
||||||
|
|
||||||
Enabling [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
Enabling double puppeting by enabling the [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) service works at the time of writing, but is deprecated and will stop working in the future.
|
|
||||||
|
|
||||||
### Method 2: manually, by asking each user to provide a working access token
|
### Method 2: manually, by asking each user to provide a working access token
|
||||||
|
|
||||||
@ -59,4 +66,4 @@ When using this method, **each user** that wishes to enable Double Puppeting nee
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You then need to start a chat with `@whatsappbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
You then need to start a chat with `@whatsappbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
@ -1,12 +1,19 @@
|
|||||||
# Setting up Mautrix wsproxy for bridging Android SMS or Apple iMessage (optional)
|
# Setting up Mautrix wsproxy (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mautrix-wsproxy](https://github.com/mautrix/wsproxy) for you.
|
The playbook can install and configure [mautrix-wsproxy](https://github.com/mautrix/wsproxy) for you.
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/mautrix/wsproxy#readme) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/mautrix/wsproxy#readme) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
## DNS
|
||||||
|
|
||||||
|
You need to create a `wsproxy.DOMAIN` DNS record pointing to your Matrix server (a `CNAME` pointing to `matrix.DOMAIN`) to use wsproxy.
|
||||||
|
The hostname is configurable via a `matrix_mautrix_wsproxy_hostname` variable.
|
||||||
|
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Use the following playbook configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_wsproxy_enabled: true
|
matrix_mautrix_wsproxy_enabled: true
|
||||||
@ -20,28 +27,6 @@ matrix_mautrix_wsproxy_syncproxy_shared_secret: 'secret token from bridge'
|
|||||||
|
|
||||||
Note that the tokens must match what is compiled into the [mautrix-imessage](https://github.com/mautrix/imessage) bridge running on your Mac or Android device.
|
Note that the tokens must match what is compiled into the [mautrix-imessage](https://github.com/mautrix/imessage) bridge running on your Mac or Android device.
|
||||||
|
|
||||||
### Adjusting the wsproxy URL
|
|
||||||
|
|
||||||
By default, this playbook installs wsproxy on the `wsproxy.` subdomain (`wsproxy.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `matrix_mautrix_wsproxy_hostname` variable, you can easily make the service available at a **different hostname** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname
|
|
||||||
matrix_mautrix_wsproxy_hostname: ws.example.com
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain, **you may need to adjust your DNS** records to point the wsproxy domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `wsproxy`. See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -1,33 +1,38 @@
|
|||||||
# Setting up MX Puppet Discord bridging (optional)
|
# Setting up MX Puppet Discord (optional)
|
||||||
|
|
||||||
**Note**: bridging to [Discord](https://discordapp.com/) can also happen via the [matrix-appservice-discord](configuring-playbook-bridge-appservice-discord.md)and [mautrix-discord](configuring-playbook-bridge-mautrix-discord.md) bridges supported by the playbook.
|
**Note**: bridging to [Discord](https://discordapp.com/) can also happen via the [matrix-appservice-discord](configuring-playbook-bridge-appservice-discord.md)and [mautrix-discord](configuring-playbook-bridge-mautrix-discord.md) bridges supported by the playbook.
|
||||||
- For using as a Bot we recommend the [Appservice Discord](configuring-playbook-bridge-appservice-discord.md), because it supports plumbing.
|
- For using as a Bot we recommend the [Appservice Discord](configuring-playbook-bridge-appservice-discord.md), because it supports plumbing.
|
||||||
- For personal use with a discord account we recommend the [mautrix-discord](configuring-playbook-bridge-mautrix-discord.md) bridge, because it is the most fully-featured and stable of the 3 Discord bridges supported by the playbook.
|
- For personal use with a discord account we recommend the [mautrix-discord](configuring-playbook-bridge-mautrix-discord.md) bridge, because it is the most fully-featured and stable of the 3 Discord bridges supported by the playbook.
|
||||||
|
|
||||||
The playbook can install and configure [mx-puppet-discord](https://gitlab.com/mx-puppet/discord/mx-puppet-discord) for you.
|
The playbook can install and configure
|
||||||
|
[mx-puppet-discord](https://github.com/matrix-discord/mx-puppet-discord) for you.
|
||||||
|
|
||||||
See the project page to learn what it does and why it might be useful to you.
|
See the project page to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
**Note**: we actually use the [Beeper](https://www.beeper.com/)-maintained [fork of mx-puppet-discord](https://gitlab.com/beeper/mx-puppet-monorepo), because `matrix-discord/mx-puppet-discord` is a low-quality and poorly maintained project.
|
||||||
|
|
||||||
|
To enable the [Discord](https://discordapp.com/) bridge just use the following
|
||||||
|
playbook configuration:
|
||||||
|
|
||||||
To enable the [Discord](https://discordapp.com/) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mx_puppet_discord_enabled: true
|
matrix_mx_puppet_discord_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled you need to start a chat with `Discord Puppet Bridge` with the handle `@_discordpuppet_bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled you need to start a chat with `Discord Puppet Bridge` with
|
||||||
|
the handle `@_discordpuppet_bot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base
|
||||||
|
domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Three authentication methods are available, Legacy Token, OAuth and xoxc token. See mx-puppet-discord [documentation](https://gitlab.com/mx-puppet/discord/mx-puppet-discord) for more information about how to configure the bridge.
|
Three authentication methods are available, Legacy Token, OAuth and xoxc token.
|
||||||
|
See mx-puppet-discord [documentation](https://github.com/matrix-discord/mx-puppet-discord)
|
||||||
|
for more information about how to configure the bridge.
|
||||||
|
|
||||||
Once logged in, send `list` to the bot user to list the available rooms.
|
Once logged in, send `list` to the bot user to list the available rooms.
|
||||||
|
|
||||||
Clicking rooms in the list will result in you receiving an invitation to the bridged room.
|
Clicking rooms in the list will result in you receiving an invitation to the
|
||||||
|
bridged room.
|
||||||
|
|
||||||
Also send `help` to the bot to see the commands available.
|
Also send `help` to the bot to see the commands available.
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
# Setting up MX Puppet GroupMe bridging (optional)
|
# Setting up MX Puppet GroupMe (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mx-puppet-groupme](https://gitlab.com/xangelix-pub/matrix/mx-puppet-groupme) for you.
|
The playbook can install and configure
|
||||||
|
[mx-puppet-groupme](https://gitlab.com/xangelix-pub/matrix/mx-puppet-groupme) for you.
|
||||||
|
|
||||||
See the project page to learn what it does and why it might be useful to you.
|
See the project page to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable the [GroupMe](https://groupme.com/) bridge just use the following
|
||||||
|
playbook configuration:
|
||||||
|
|
||||||
To enable the [GroupMe](https://groupme.com/) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mx_puppet_groupme_enabled: true
|
matrix_mx_puppet_groupme_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled you need to start a chat with `GroupMe Puppet Bridge` with the handle `@_groupmepuppet_bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled you need to start a chat with `GroupMe Puppet Bridge` with
|
||||||
|
the handle `@_groupmepuppet_bot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base
|
||||||
|
domain, not the `matrix.` domain).
|
||||||
|
|
||||||
One authentication method is available.
|
One authentication method is available.
|
||||||
|
|
||||||
@ -30,6 +30,7 @@ link <access token>
|
|||||||
|
|
||||||
Once logged in, send `listrooms` to the bot user to list the available rooms.
|
Once logged in, send `listrooms` to the bot user to list the available rooms.
|
||||||
|
|
||||||
Clicking rooms in the list will result in you receiving an invitation to the bridged room.
|
Clicking rooms in the list will result in you receiving an invitation to the
|
||||||
|
bridged room.
|
||||||
|
|
||||||
Also send `help` to the bot to see the commands available.
|
Also send `help` to the bot to see the commands available.
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
# Setting up MX Puppet Instagram bridging (optional)
|
# Setting up mx-puppet-instagram (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mx-puppet-instagram](https://github.com/Sorunome/mx-puppet-instagram) for you.
|
The playbook can install and configure
|
||||||
|
[mx-puppet-instagram](https://github.com/Sorunome/mx-puppet-instagram) for you.
|
||||||
|
|
||||||
This allows you to bridge Instagram DirectMessages into Matrix.
|
This allows you to bridge Instagram DirectMessages into Matrix.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable the [Instagram](https://www.instagram.com/) bridge just use the following
|
||||||
|
playbook configuration:
|
||||||
|
|
||||||
To enable the [Instagram](https://www.instagram.com/) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mx_puppet_instagram_enabled: true
|
matrix_mx_puppet_instagram_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled, you need to start a chat with `Instagram Puppet Bridge` with the handle `@_instagrampuppet_bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled, you need to start a chat with `Instagram Puppet Bridge` with
|
||||||
|
the handle `@_instagrampuppet_bot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base
|
||||||
|
domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `link <username> <password>` to the bridge bot to link your instagram account.
|
Send `link <username> <password>` to the bridge bot to link your instagram account.
|
||||||
|
|
||||||
@ -33,3 +33,4 @@ For double-puppeting, you probably want to issue these commands:
|
|||||||
If you are linking only one Instagram account, your `$puppetId` is probably 1, but use the `list` command find out.
|
If you are linking only one Instagram account, your `$puppetId` is probably 1, but use the `list` command find out.
|
||||||
|
|
||||||
The `help` command shows which commands are available, though at the time of writing, not every command is fully implemented.
|
The `help` command shows which commands are available, though at the time of writing, not every command is fully implemented.
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up MX Puppet Skype bridging (optional)
|
# Setting up MX Puppet Skype (optional)
|
||||||
|
|
||||||
The playbook used to be able to install and configure [mx-puppet-skype](https://github.com/Sorunome/mx-puppet-skype), but no longer includes this component, because it has been broken and unmaintaned for a long time.
|
The playbook used to be able to install and configure [mx-puppet-skype](https://github.com/Sorunome/mx-puppet-skype), but no longer includes this component, because it has been broken and unmaintaned for a long time.
|
||||||
|
|
||||||
|
@ -1,42 +1,46 @@
|
|||||||
# Setting up MX Puppet Slack bridging (optional)
|
# Setting up MX Puppet Slack (optional)
|
||||||
|
|
||||||
**Note**: bridging to [Slack](https://slack.com) can also happen via the [matrix-appservice-slack](configuring-playbook-bridge-appservice-slack.md) and [mautrix-slack](configuring-playbook-bridge-mautrix-slack.md) bridges supported by the playbook. Note that `matrix-appservice-slack` is not available for new installation unless you have already created a classic Slack application, because the creation of classic Slack applications, which this bridge makes use of, has been discontinued.
|
**Note**: bridging to [Slack](https://slack.com) can also happen via the
|
||||||
|
[matrix-appservice-slack](configuring-playbook-bridge-appservice-slack.md) and [mautrix-slack](configuring-playbook-bridge-mautrix-slack.md) bridges supported by the playbook.
|
||||||
|
|
||||||
The playbook can install and configure [mx-puppet-slack](https://gitlab.com/mx-puppet/slack/mx-puppet-slack) for you.
|
The playbook can install and configure [Beeper](https://www.beeper.com/)-maintained fork of
|
||||||
|
[mx-puppet-slack](https://gitlab.com/beeper/mx-puppet-monorepo) for you.
|
||||||
|
|
||||||
See the project page to learn what it does and why it might be useful to you.
|
See the project page to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Prerequisite
|
## Setup
|
||||||
|
|
||||||
Follow the [OAuth credentials](https://gitlab.com/mx-puppet/slack/mx-puppet-slack#option-2-oauth) instructions to create a new Slack app, setting the redirect URL to `https://matrix.example.com/slack/oauth`.
|
To enable the [Slack](https://slack.com/) bridge:
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
1. Follow the
|
||||||
|
[OAuth credentials](https://github.com/Sorunome/mx-puppet-slack#option-2-oauth)
|
||||||
To enable the [Slack](https://slack.com/) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
instructions to create a new Slack app, setting the redirect URL to
|
||||||
|
`https://matrix.YOUR_DOMAIN/slack/oauth`.
|
||||||
```yaml
|
2. Update your `vars.yml` with the following:
|
||||||
matrix_mx_puppet_slack_enabled: true
|
```yaml
|
||||||
# Client ID must be quoted so YAML does not parse it as a float.
|
matrix_mx_puppet_slack_enabled: true
|
||||||
matrix_mx_puppet_slack_oauth_client_id: "<SLACK_APP_CLIENT_ID>"
|
# Client ID must be quoted so YAML does not parse it as a float.
|
||||||
matrix_mx_puppet_slack_oauth_client_secret: "<SLACK_APP_CLIENT_SECRET>"
|
matrix_mx_puppet_slack_oauth_client_id: "<SLACK_APP_CLIENT_ID>"
|
||||||
```
|
matrix_mx_puppet_slack_oauth_client_secret: "<SLACK_APP_CLIENT_SECRET>"
|
||||||
|
```
|
||||||
## Installing
|
3. Run playbooks with `setup-all` and `start` tags:
|
||||||
|
```
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
|
```
|
||||||
```
|
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled you need to start a chat with `Slack Puppet Bridge` with the handle `@_slackpuppet_bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled you need to start a chat with `Slack Puppet Bridge` with
|
||||||
|
the handle `@_slackpuppet_bot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base
|
||||||
|
domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Three authentication methods are available, Legacy Token, OAuth and xoxc token. See mx-puppet-slack [documentation](https://gitlab.com/mx-puppet/slack/mx-puppet-slack) for more information about how to configure the bridge.
|
Three authentication methods are available, Legacy Token, OAuth and xoxc token.
|
||||||
|
See mx-puppet-slack [documentation](https://github.com/Sorunome/mx-puppet-slack)
|
||||||
|
for more information about how to configure the bridge.
|
||||||
|
|
||||||
Once logged in, send `list` to the bot user to list the available rooms.
|
Once logged in, send `list` to the bot user to list the available rooms.
|
||||||
|
|
||||||
Clicking rooms in the list will result in you receiving an invitation to the bridged room.
|
Clicking rooms in the list will result in you receiving an invitation to the
|
||||||
|
bridged room.
|
||||||
|
|
||||||
Also send `help` to the bot to see the commands available.
|
Also send `help` to the bot to see the commands available.
|
||||||
|
@ -1,29 +1,32 @@
|
|||||||
# Setting up MX Puppet Steam bridging (optional)
|
# Setting up MX Puppet Steam (optional)
|
||||||
|
|
||||||
The playbook can install and configure [mx-puppet-steam](https://github.com/icewind1991/mx-puppet-steam) for you.
|
The playbook can install and configure
|
||||||
|
[mx-puppet-steam](https://github.com/icewind1991/mx-puppet-steam) for you.
|
||||||
|
|
||||||
See the project page to learn what it does and why it might be useful to you.
|
See the project page to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable the [Steam](https://steampowered.com/) bridge just use the following
|
||||||
|
playbook configuration:
|
||||||
|
|
||||||
To enable the [Steam](https://steampowered.com/) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mx_puppet_steam_enabled: true
|
matrix_mx_puppet_steam_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled you need to start a chat with `Steam Puppet Bridge` with the handle `@_steampuppet_bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled you need to start a chat with `Steam Puppet Bridge` with
|
||||||
|
the handle `@_steampuppet_bot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base
|
||||||
|
domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Three authentication methods are available, Legacy Token, OAuth and xoxc token. See mx-puppet-steam [documentation](https://github.com/icewind1991/mx-puppet-steam) for more information about how to configure the bridge.
|
Three authentication methods are available, Legacy Token, OAuth and xoxc token.
|
||||||
|
See mx-puppet-steam [documentation](https://github.com/icewind1991/mx-puppet-steam)
|
||||||
|
for more information about how to configure the bridge.
|
||||||
|
|
||||||
Once logged in, send `list` to the bot user to list the available rooms.
|
Once logged in, send `list` to the bot user to list the available rooms.
|
||||||
|
|
||||||
Clicking rooms in the list will result in you receiving an invitation to the bridged room.
|
Clicking rooms in the list will result in you receiving an invitation to the
|
||||||
|
bridged room.
|
||||||
|
|
||||||
Also send `help` to the bot to see the commands available.
|
Also send `help` to the bot to see the commands available.
|
||||||
|
@ -1,18 +1,14 @@
|
|||||||
# Setting up MX Puppet Twitter bridging (optional)
|
# Setting up MX Puppet Twitter (optional)
|
||||||
|
|
||||||
**Note**: bridging to [Twitter](https://twitter.com/) can also happen via the [mautrix-twitter](configuring-playbook-bridge-mautrix-twitter.md) bridge supported by the playbook.
|
**Note**: bridging to [Twitter](https://twitter.com/) can also happen via the [mautrix-twitter](configuring-playbook-bridge-mautrix-twitter.md) bridge supported by the playbook.
|
||||||
|
|
||||||
The playbook can install and configure [mx-puppet-twitter](https://github.com/Sorunome/mx-puppet-twitter) for you.
|
The playbook can install and configure
|
||||||
|
[mx-puppet-twitter](https://github.com/Sorunome/mx-puppet-twitter) for you.
|
||||||
|
|
||||||
See the project page to learn what it does and why it might be useful to you.
|
See the project page to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Prerequisite
|
To enable the [Twitter](https://twitter.com) bridge, make an app on [developer.twitter.com](https://developer.twitter.com/en/apps)
|
||||||
|
and fill out the following playbook configuration.
|
||||||
Make an app on [developer.twitter.com](https://developer.twitter.com/en/apps).
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the [Twitter](https://twitter.com) bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mx_puppet_twitter_enabled: true
|
matrix_mx_puppet_twitter_enabled: true
|
||||||
@ -23,18 +19,18 @@ matrix_mx_puppet_twitter_access_token_secret: ''
|
|||||||
matrix_mx_puppet_twitter_environment: ''
|
matrix_mx_puppet_twitter_environment: ''
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once the bot is enabled you need to start a chat with `Twitter Puppet Bridge` with the handle `@_twitterpuppet_bot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
Once the bot is enabled you need to start a chat with `Twitter Puppet Bridge` with
|
||||||
|
the handle `@_twitterpuppet_bot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base
|
||||||
|
domain, not the `matrix.` domain).
|
||||||
|
|
||||||
To log in, use `link` and click the link.
|
To log in, use `link` and click the link.
|
||||||
|
|
||||||
Once logged in, send `list` to the bot user to list the available rooms.
|
Once logged in, send `list` to the bot user to list the available rooms.
|
||||||
|
|
||||||
Clicking rooms in the list will result in you receiving an invitation to the bridged room.
|
Clicking rooms in the list will result in you receiving an invitation to the
|
||||||
|
bridged room.
|
||||||
|
|
||||||
Also send `help` to the bot to see the commands available.
|
Also send `help` to the bot to see the commands available.
|
||||||
|
@ -1,83 +0,0 @@
|
|||||||
# Setting up Postmoogle email bridging (optional)
|
|
||||||
|
|
||||||
**Note**: email bridging can also happen via the [email2matrix](configuring-playbook-email2matrix.md) bridge supported by the playbook.
|
|
||||||
|
|
||||||
The playbook can install and configure [Postmoogle](https://github.com/etkecc/postmoogle) for you.
|
|
||||||
|
|
||||||
Postmoogle is a bridge you can use to have its bot user forward emails to Matrix rooms. It runs an SMTP email server and allows you to assign mailbox addresses to the rooms.
|
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/etkecc/postmoogle) to learn what it does and why it might be useful to you.
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
Open the following ports on your server to be able to receive incoming emails:
|
|
||||||
|
|
||||||
- `25/tcp`: SMTP
|
|
||||||
- `587/tcp`: Submission (TLS-encrypted SMTP)
|
|
||||||
|
|
||||||
If you don't open these ports, you will still be able to send emails, but not receive any.
|
|
||||||
|
|
||||||
These port numbers are configurable via the `matrix_postmoogle_smtp_host_bind_port` and `matrix_postmoogle_submission_host_bind_port` variables, but other email servers will try to deliver on these default (standard) ports, so changing them is of little use.
|
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_postmoogle_enabled: true
|
|
||||||
|
|
||||||
# Uncomment and adjust this part if you'd like to use a username different than the default
|
|
||||||
# matrix_postmoogle_login: postmoogle
|
|
||||||
|
|
||||||
# Generate a strong password here. Consider generating it with `pwgen -s 64 1`
|
|
||||||
matrix_postmoogle_password: PASSWORD_FOR_THE_BOT
|
|
||||||
|
|
||||||
# Uncomment to add one or more admins to this bridge:
|
|
||||||
#
|
|
||||||
# matrix_postmoogle_admins:
|
|
||||||
# - '@yourAdminAccount:{{ matrix_domain }}'
|
|
||||||
#
|
|
||||||
# .. unless you've made yourself an admin of all bots/bridges like this:
|
|
||||||
#
|
|
||||||
# matrix_admin: '@yourAdminAccount:{{ matrix_domain }}'
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
You will also need to add several DNS records so that Postmoogle can send emails. See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,ensure-matrix-users-created,start
|
|
||||||
```
|
|
||||||
|
|
||||||
**Notes**:
|
|
||||||
|
|
||||||
- the `ensure-matrix-users-created` playbook tag makes the playbook automatically create a user account of the bridge's bot
|
|
||||||
|
|
||||||
- if you change the bridge's bot password (`matrix_postmoogle_password` in your `vars.yml` file) subsequently, the bot user's credentials on the homeserver won't be updated automatically. If you'd like to change the bot user's password, use a tool like [synapse-admin](configuring-playbook-synapse-admin.md) to change it, and then update `matrix_postmoogle_password` to let the bot know its new password
|
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
To use the bridge, invite the `@postmoogle:example.com` bot user into a room you want to use as a mailbox.
|
|
||||||
|
|
||||||
Then send `!pm mailbox NAME` to expose this Matrix room as an inbox with the email address `NAME@matrix.example.com`. Emails sent to that email address will be forwarded to the room.
|
|
||||||
|
|
||||||
Send `!pm help` to the room to see the bridge's help menu for additional commands.
|
|
||||||
|
|
||||||
You can also refer to the upstream [documentation](https://github.com/etkecc/postmoogle).
|
|
||||||
|
|
||||||
### Debug/Logs
|
|
||||||
|
|
||||||
As with all other services, you can find their logs in [systemd-journald](https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html) by running something like `journalctl -fu matrix-postmoogle`
|
|
||||||
|
|
||||||
The default logging level for this bridge is `INFO`, but you can increase it to `DEBUG` with the following additional configuration:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_postmoogle_loglevel: 'DEBUG'
|
|
||||||
```
|
|
@ -1,23 +0,0 @@
|
|||||||
# Setting up WeChat bridging (optional)
|
|
||||||
|
|
||||||
The playbook can install and configure the [matrix-wechat](https://github.com/duo/matrix-wechat) bridge for you (for bridging to the [WeChat](https://www.wechat.com/) network).
|
|
||||||
|
|
||||||
See the project page to learn what it does and why it might be useful to you.
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_wechat_enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Once the bridge is installed, start a chat with `@wechatbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
|
||||||
|
|
||||||
Send `help` to the bot to see the available commands.
|
|
@ -1,113 +1,65 @@
|
|||||||
# Setting up Cactus Comments (optional)
|
# Setting up Cactus Comments (optional)
|
||||||
|
|
||||||
The playbook can install and configure the [Cactus Comments](https://cactus.chat) system for you.
|
The playbook can install and configure [Cactus Comments](https://cactus.chat) for you.
|
||||||
|
|
||||||
Cactus Comments is a **federated comment system** built on Matrix. It respects your privacy, and puts you in control.
|
Cactus Comments is a **federated comment system** built on Matrix. The role allows you to self-host the system.
|
||||||
|
It respects your privacy, and puts you in control.
|
||||||
|
|
||||||
See the project's [documentation](https://cactus.chat/docs/getting-started/introduction/) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://cactus.chat/docs/getting-started/introduction/) to learn what it
|
||||||
|
does and why it might be useful to you.
|
||||||
|
|
||||||
The playbook contains 2 roles for configuring different pieces of the Cactus Comments system:
|
|
||||||
|
|
||||||
- `matrix-cactus-comments` - the backend appservice integrating with the Matrix homeserver
|
|
||||||
|
|
||||||
- `matrix-cactus-comments-client` - a static website server serving the [cactus-client](https://cactus.chat/docs/client/introduction/) static assets (`cactus.js` and `styles.css`)
|
|
||||||
|
|
||||||
You can enable whichever component you need (typically both).
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
To enable Cactus Comments, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Add the following block to your `vars.yaml` and make sure to exchange the tokens to randomly generated values.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
#################
|
#################
|
||||||
## Cactus Comments ##
|
## Cactus Chat ##
|
||||||
#################
|
#################
|
||||||
|
|
||||||
# This enables the backend (appservice)
|
|
||||||
matrix_cactus_comments_enabled: true
|
matrix_cactus_comments_enabled: true
|
||||||
|
|
||||||
# To allow guest comments without users needing to log in, you need to have guest registration enabled.
|
# To allow guest comments without users needing to log in, you need to have guest registration enabled.
|
||||||
# To do this you need to uncomment one of the following lines (depending if you are using Synapse or Dendrite as a homeserver)
|
# To do this you need to uncomment one of the following lines (depending if you are using synapse or dentrite as a homeserver)
|
||||||
# If you don't know which one you use: The default is Synapse ;)
|
# If you don't know which one you use: The default is synapse ;)
|
||||||
# matrix_synapse_allow_guest_access: true
|
# matrix_synapse_allow_guest_access: true
|
||||||
# matrix_dendrite_allow_guest_access: true
|
# matrix_dentrite_allow_guest_access: true
|
||||||
|
|
||||||
# This enables client assets static files serving on `https://matrix.example.com/cactus-comments`.
|
|
||||||
# When the backend (appservice) is enabled, this is also enabled automatically,
|
|
||||||
# but we explicitly enable it here.
|
|
||||||
matrix_cactus_comments_client_enabled: true
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the Cactus Comments' client URL
|
|
||||||
|
|
||||||
By default, this playbook installs Cactus Comments' client on the `matrix.` subdomain, at the `/cactus-comments` path (https://matrix.example.com/cactus-comments). This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_cactus_comments_client_hostname` and `matrix_cactus_comments_client_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix to host the client assets at a different location
|
|
||||||
# These variables are used only if (`matrix_cactus_comments_client_enabled: true`)
|
|
||||||
matrix_cactus_comments_client_hostname: cactus.example.com
|
|
||||||
matrix_cactus_comments_client_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the Cactus Comments' client domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Upon starting Cactus Comments, a `bot.cactusbot` user account is created automatically.
|
Upon starting Cactus Comments, a `bot.cactusbot` user account is created automatically.
|
||||||
|
|
||||||
To get started, send a `help` message to the `@bot.cactusbot:example.com` bot to confirm it's working.
|
To get started, send a `help` message to the `@bot.cactusbot:your-homeserver.com` bot to confirm it's working.
|
||||||
|
Then, register a site by typing: `register <sitename>`. You will then be invited into a moderation room.
|
||||||
|
Now you are good to go and can include the comment section on your website!
|
||||||
|
|
||||||
Then, register a site by sending `register <YourSiteName>` (where `<YourSiteName>` is a unique identifier you choose. It does not have to match your domain). You will then be invited into a moderation room.
|
**Careful:** To really make use of self-hosting you need change a few things in comparison to the official docs!
|
||||||
|
|
||||||
Now you are good to go and can embed the comment section on your website!
|
Insert the following snippet into you page and make sure to replace `example.com` with your base domain!
|
||||||
|
|
||||||
## Embed Cactus Comments
|
|
||||||
|
|
||||||
The official [documentation](https://cactus.chat/docs/getting-started/quick-start/) provides a useful guide to embed Cactus Comments on your website.
|
|
||||||
|
|
||||||
After including the JavaScript and CSS asset files, insert a `<div>` where you'd like to display the comment section:
|
|
||||||
|
|
||||||
````html
|
|
||||||
<div id="comment-section"></div>
|
|
||||||
````
|
|
||||||
|
|
||||||
Then, you need to initialize the comment section. Make sure to replace `example.com` with your base domain and `<YourSiteName>` with the one that has been registered above:
|
|
||||||
|
|
||||||
```html
|
```html
|
||||||
|
<script type="text/javascript" src="https://matrix.example.com/cactus-comments/cactus.js"></script>
|
||||||
|
<link rel="stylesheet" href="https://matrix.example.com/cactus-comments/style.css" type="text/css">
|
||||||
|
<div id="comment-section"></div>
|
||||||
<script>
|
<script>
|
||||||
initComments({
|
initComments({
|
||||||
node: document.getElementById("comment-section"),
|
node: document.getElementById("comment-section"),
|
||||||
defaultHomeserverUrl: "https://matrix.example.com:8448",
|
defaultHomeserverUrl: "https://matrix.example.com:8448",
|
||||||
serverName: "example.com",
|
serverName: "example.com",
|
||||||
siteName: "<YourSiteName>",
|
siteName: "YourSiteName",
|
||||||
commentSectionId: "1"
|
commentSectionId: "1"
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjust the domain name for self-hosting
|
|
||||||
|
|
||||||
To have the assets served from your homeserver (not from `cactus.chat`), you need to adjust the domain name on the official documentation.
|
|
||||||
|
|
||||||
Make sure to replace `example.com` with your base domain before you include the following lines, instead of the one provided by the official documentation:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script type="text/javascript" src="https://matrix.example.com/cactus-comments/cactus.js"></script>
|
|
||||||
<link rel="stylesheet" href="https://matrix.example.com/cactus-comments/style.css" type="text/css">
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note**: if the `matrix_cactus_comments_client_hostname` and `matrix_cactus_comments_client_path_prefix` variables are tweaked, you would need to adjust the URLs of the assets accordingly.
|
|
||||||
|
@ -1,40 +1,21 @@
|
|||||||
# Setting up Cinny (optional)
|
# Configuring Cinny (optional)
|
||||||
|
|
||||||
This playbook can install the [Cinny](https://github.com/ajbura/cinny) Matrix web client for you.
|
This playbook can install the [cinny](https://github.com/ajbura/cinny) Matrix web client for you.
|
||||||
|
cinny is a web client focusing primarily on simple, elegant and secure interface.
|
||||||
|
cinny can be installed alongside or instead of Element.
|
||||||
|
|
||||||
Cinny is a web client focusing primarily on simple, elegant and secure interface. It can be installed alongside or instead of Element.
|
If you'd like cinny to be installed, add the following to your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable Cinny, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_client_cinny_enabled: true
|
matrix_client_cinny_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the Cinny URL
|
You will also need to add a DNS record so that cinny can be accessed.
|
||||||
|
By default cinny will use https://cinny.DOMAIN so you will need to create an CNAME record
|
||||||
|
for `cinny`. See [Configuring DNS](configuring-dns.md).
|
||||||
|
|
||||||
By default, this playbook installs Cinny on the `cinny.` subdomain (`cinny.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
If you would like to use a different domain, add the following to your configuration file (changing it to use your preferred domain):
|
||||||
|
|
||||||
By tweaking the `matrix_client_cinny_hostname` variable, you can easily make the service available at a **different hostname** than the default one.
|
|
||||||
|
|
||||||
While a `matrix_client_cinny_path_prefix` variable exists for tweaking the path-prefix, it's [not supported anymore](https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/3701), because Cinny requires an application rebuild (with a tweaked build config) to be functional under a custom path.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Switch to a different domain (`app.example.com`) than the default one (`cinny.example.com`)
|
matrix_server_fqn_cinny: "app.{{ matrix_domain }}"
|
||||||
matrix_client_cinny_hostname: "app.{{ matrix_domain }}"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain, **you may need to adjust your DNS** records to point the Cinny domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `cinny`. See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've adjusted `matrix_client_cinny_hostname`, you will need to adjust your DNS configuration accordingly.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook and [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
@ -1,24 +1,25 @@
|
|||||||
# Configuring Element (optional)
|
# Configuring Element (optional)
|
||||||
|
|
||||||
By default, this playbook installs the [Element](https://github.com/element-hq/element-web) Matrix web client for you. If that's okay, you can skip this document.
|
By default, this playbook installs the [Element](https://github.com/vector-im/element-web) Matrix client web application.
|
||||||
|
If that's okay, you can skip this document.
|
||||||
|
|
||||||
|
|
||||||
## Disabling Element
|
## Disabling Element
|
||||||
|
|
||||||
If you'd like for the playbook to not install Element (or to uninstall it if it was previously installed), add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
If you'd like for the playbook to not install Element (or to uninstall it if it was previously installed), you can disable it in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_client_element_enabled: false
|
matrix_client_element_enabled: false
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Configuring Element settings
|
||||||
|
|
||||||
The playbook provides some customization variables you could use to change Element's settings.
|
The playbook provides some customization variables you could use to change Element's settings.
|
||||||
|
|
||||||
Their defaults are defined in [`roles/custom/matrix-client-element/defaults/main.yml`](../roles/custom/matrix-client-element/defaults/main.yml) and they ultimately end up in the generated `/matrix/element/config.json` file (on the server). This file is generated from the [`roles/custom/matrix-client-element/templates/config.json.j2`](../roles/custom/matrix-client-element/templates/config.json.j2) template.
|
Their defaults are defined in [`roles/custom/matrix-client-element/defaults/main.yml`](../roles/custom/matrix-client-element/defaults/main.yml) and they ultimately end up in the generated `/matrix/element/config.json` file (on the server). This file is generated from the [`roles/custom/matrix-client-element/templates/config.json.j2`](../roles/custom/matrix-client-element/templates/config.json.j2) template.
|
||||||
|
|
||||||
**If there's an existing variable** which controls a setting you wish to change, you can simply define that variable in your configuration file (`inventory/host_vars/matrix.example.com/vars.yml`) and [re-run the playbook](installing.md) to apply the changes.
|
**If there's an existing variable** which controls a setting you wish to change, you can simply define that variable in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`) and [re-run the playbook](installing.md) to apply the changes.
|
||||||
|
|
||||||
Alternatively, **if there is no pre-defined variable** for an Element setting you wish to change:
|
Alternatively, **if there is no pre-defined variable** for an Element setting you wish to change:
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ Alternatively, **if there is no pre-defined variable** for an Element setting yo
|
|||||||
- or, if extending the configuration is still not powerful enough for your needs, you can **override the configuration completely** using `matrix_client_element_configuration_default` (or `matrix_client_element_configuration`). You can find information about this in [`roles/custom/matrix-client-element/defaults/main.yml`](../roles/custom/matrix-client-element/defaults/main.yml).
|
- or, if extending the configuration is still not powerful enough for your needs, you can **override the configuration completely** using `matrix_client_element_configuration_default` (or `matrix_client_element_configuration`). You can find information about this in [`roles/custom/matrix-client-element/defaults/main.yml`](../roles/custom/matrix-client-element/defaults/main.yml).
|
||||||
|
|
||||||
|
|
||||||
### Themes
|
## Themes
|
||||||
|
|
||||||
To change the look of Element, you can define your own themes manually by using the `matrix_client_element_setting_defaults_custom_themes` setting.
|
To change the look of Element, you can define your own themes manually by using the `matrix_client_element_setting_defaults_custom_themes` setting.
|
||||||
|
|
||||||
@ -38,32 +39,3 @@ Or better yet, you can automatically pull it all themes provided by the [aaronra
|
|||||||
If you make your own theme, we encourage you to submit it to the **aaronraimist/element-themes** project, so that the whole community could easily enjoy it.
|
If you make your own theme, we encourage you to submit it to the **aaronraimist/element-themes** project, so that the whole community could easily enjoy it.
|
||||||
|
|
||||||
Note that for a custom theme to work well, all Element instances that you use must have the same theme installed.
|
Note that for a custom theme to work well, all Element instances that you use must have the same theme installed.
|
||||||
|
|
||||||
### Adjusting the Element URL
|
|
||||||
|
|
||||||
By default, this playbook installs Element on the `element.` subdomain (`element.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `matrix_client_element_hostname` and `matrix_client_element_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
|
||||||
# so we won't need to add additional DNS records for Element.
|
|
||||||
matrix_client_element_hostname: "{{ matrix_server_fqn_matrix }}"
|
|
||||||
|
|
||||||
# Expose under the /element subpath
|
|
||||||
matrix_client_element_path_prefix: /element
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Element domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `element`. 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 potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
@ -1,42 +1,21 @@
|
|||||||
# Setting up Hydrogen (optional)
|
# Configuring Hydrogen (optional)
|
||||||
|
|
||||||
This playbook can install the [Hydrogen](https://github.com/element-hq/hydrogen-web) Matrix web client for you.
|
This playbook can install the [Hydrogen](https://github.com/vector-im/hydrogen-web) Matrix web client for you.
|
||||||
|
Hydrogen is a lightweight web client that supports mobile and legacy web browsers.
|
||||||
|
Hydrogen can be installed alongside or instead of Element.
|
||||||
|
|
||||||
Hydrogen is a lightweight web client that supports mobile and legacy web browsers. It can be installed alongside or instead of Element.
|
If you'd like Hydrogen to be installed, add the following to your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable Hydrogen, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_client_hydrogen_enabled: true
|
matrix_client_hydrogen_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the Hydrogen URL
|
You will also need to add a DNS record so that Hydrogen can be accessed.
|
||||||
|
By default Hydrogen will use https://hydrogen.DOMAIN so you will need to create an CNAME record
|
||||||
|
for `hydrogen`. See [Configuring DNS](configuring-dns.md).
|
||||||
|
|
||||||
By default, this playbook installs Hydrogen on the `hydrogen.` subdomain (`hydrogen.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
If you would like to use a different domain, add the following to your configuration file (changing it to use your preferred domain):
|
||||||
|
|
||||||
By tweaking the `matrix_client_hydrogen_hostname` and `matrix_client_hydrogen_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
matrix_server_fqn_hydrogen: "helium.{{ matrix_domain }}"
|
||||||
# so we won't need to add additional DNS records for Hydrogen.
|
|
||||||
matrix_client_hydrogen_hostname: "{{ matrix_server_fqn_matrix }}"
|
|
||||||
|
|
||||||
# Expose under the /hydrogen subpath
|
|
||||||
matrix_client_hydrogen_path_prefix: /hydrogen
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Hydrogen domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `hydrogen`. 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 potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
@ -1,68 +1,42 @@
|
|||||||
# Setting up SchildiChat (optional)
|
# Configuring SchildiChat (optional)
|
||||||
|
|
||||||
This playbook can install the [SchildiChat](https://github.com/SchildiChat/schildichat-desktop) Matrix web client for you.
|
By default, this playbook does not install the [SchildiChat](https://github.com/SchildiChat/schildichat-desktop) Matrix client web application.
|
||||||
|
|
||||||
SchildiChat is a feature-rich messenger for Matrix based on Element with some extras and tweaks. It can be installed alongside or instead of Element.
|
**WARNING**: SchildiChat is based on Element-web, but its releases are lagging behind. As an example (from 2023-08-31), SchildiChat is 10 releases behind (it being based on element-web `v1.11.30`, while element-web is now on `v1.11.40`). Element-web frequently suffers from security issues, so running something based on an ancient Element-web release is **dangerous**. Use SchildiChat at your own risk!
|
||||||
|
|
||||||
**WARNING**: SchildiChat Web is based on Element-web, but its releases are lagging behind. As an example (from 2024-02-26), SchildiChat Web is 22 releases behind (it being based on element-web `v1.11.36`, while element-web is now on `v1.11.58`). Element-web frequently suffers from security issues, so running something based on an ancient Element-web release is **dangerous**. Use SchildiChat Web at your own risk!
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Enabling SchildiChat
|
||||||
|
|
||||||
To enable SchildiChat, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
If you'd like for the playbook to install SchildiChat, you can enable it in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_client_schildichat_enabled: true
|
matrix_client_schildichat_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
The playbook provides some customization variables you could use to change SchildiChat's settings.
|
|
||||||
|
## Configuring SchildiChat settings
|
||||||
|
|
||||||
|
The playbook provides some customization variables you could use to change schildichat's settings.
|
||||||
|
|
||||||
Their defaults are defined in [`roles/custom/matrix-client-schildichat/defaults/main.yml`](../roles/custom/matrix-client-schildichat/defaults/main.yml) and they ultimately end up in the generated `/matrix/schildichat/config.json` file (on the server). This file is generated from the [`roles/custom/matrix-client-schildichat/templates/config.json.j2`](../roles/custom/matrix-client-schildichat/templates/config.json.j2) template.
|
Their defaults are defined in [`roles/custom/matrix-client-schildichat/defaults/main.yml`](../roles/custom/matrix-client-schildichat/defaults/main.yml) and they ultimately end up in the generated `/matrix/schildichat/config.json` file (on the server). This file is generated from the [`roles/custom/matrix-client-schildichat/templates/config.json.j2`](../roles/custom/matrix-client-schildichat/templates/config.json.j2) template.
|
||||||
|
|
||||||
**If there's an existing variable** which controls a setting you wish to change, you can simply define that variable in your configuration file (`inventory/host_vars/matrix.example.com/vars.yml`) and [re-run the playbook](installing.md) to apply the changes.
|
**If there's an existing variable** which controls a setting you wish to change, you can simply define that variable in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`) and [re-run the playbook](installing.md) to apply the changes.
|
||||||
|
|
||||||
Alternatively, **if there is no pre-defined variable** for a SchildiChat setting you wish to change:
|
Alternatively, **if there is no pre-defined variable** for an schildichat setting you wish to change:
|
||||||
|
|
||||||
- you can either **request a variable to be created** (or you can submit such a contribution yourself). Keep in mind that it's **probably not a good idea** to create variables for each one of SchildiChat's various settings that rarely get used.
|
- you can either **request a variable to be created** (or you can submit such a contribution yourself). Keep in mind that it's **probably not a good idea** to create variables for each one of schildichat's various settings that rarely get used.
|
||||||
|
|
||||||
- or, you can **extend and override the default configuration** ([`config.json.j2`](../roles/custom/matrix-client-schildichat/templates/config.json.j2)) by making use of the `matrix_client_schildichat_configuration_extension_json_` variable. You can find information about this in [`roles/custom/matrix-client-schildichat/defaults/main.yml`](../roles/custom/matrix-client-schildichat/defaults/main.yml).
|
- or, you can **extend and override the default configuration** ([`config.json.j2`](../roles/custom/matrix-client-schildichat/templates/config.json.j2)) by making use of the `matrix_client_schildichat_configuration_extension_json_` variable. You can find information about this in [`roles/custom/matrix-client-schildichat/defaults/main.yml`](../roles/custom/matrix-client-schildichat/defaults/main.yml).
|
||||||
|
|
||||||
- or, if extending the configuration is still not powerful enough for your needs, you can **override the configuration completely** using `matrix_client_schildichat_configuration_default` (or `matrix_client_schildichat_configuration`). You can find information about this in [`roles/custom/matrix-client-schildichat/defaults/main.yml`](../roles/custom/matrix-client-schildichat/defaults/main.yml).
|
- or, if extending the configuration is still not powerful enough for your needs, you can **override the configuration completely** using `matrix_client_schildichat_configuration_default` (or `matrix_client_schildichat_configuration`). You can find information about this in [`roles/custom/matrix-client-schildichat/defaults/main.yml`](../roles/custom/matrix-client-schildichat/defaults/main.yml).
|
||||||
|
|
||||||
### Themes
|
|
||||||
|
|
||||||
To change the look of SchildiChat, you can define your own themes manually by using the `matrix_client_schildichat_setting_defaults_custom_themes` setting.
|
## Themes
|
||||||
|
|
||||||
|
To change the look of schildichat, you can define your own themes manually by using the `matrix_client_schildichat_setting_defaults_custom_themes` setting.
|
||||||
|
|
||||||
Or better yet, you can automatically pull it all themes provided by the [aaronraimist/element-themes](https://github.com/aaronraimist/element-themes) project by simply flipping a flag (`matrix_client_schildichat_themes_enabled: true`).
|
Or better yet, you can automatically pull it all themes provided by the [aaronraimist/element-themes](https://github.com/aaronraimist/element-themes) project by simply flipping a flag (`matrix_client_schildichat_themes_enabled: true`).
|
||||||
|
|
||||||
If you make your own theme, we encourage you to submit it to the **aaronraimist/element-themes** project, so that the whole community could easily enjoy it.
|
If you make your own theme, we encourage you to submit it to the **aaronraimist/element-themes** project, so that the whole community could easily enjoy it.
|
||||||
|
|
||||||
Note that for a custom theme to work well, all SchildiChat instances that you use must have the same theme installed.
|
Note that for a custom theme to work well, all schildichat instances that you use must have the same theme installed.
|
||||||
|
|
||||||
### Adjusting the SchildiChat URL
|
|
||||||
|
|
||||||
By default, this playbook installs SchildiChat on the `schildichat.` subdomain (`schildichat.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `matrix_client_schildichat_hostname` and `matrix_client_schildichat_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
|
||||||
# so we won't need to add additional DNS records for SchildiChat.
|
|
||||||
matrix_client_schildichat_hostname: "{{ matrix_server_fqn_matrix }}"
|
|
||||||
|
|
||||||
# Expose under the /schildichat subpath
|
|
||||||
matrix_client_schildichat_path_prefix: /schildichat
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the SchildiChat domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `schildichat`. 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 potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
@ -1,24 +1,23 @@
|
|||||||
# Configuring Conduit (optional)
|
# Configuring Conduit (optional)
|
||||||
|
|
||||||
By default, this playbook configures the [Synapse](https://github.com/element-hq/synapse) Matrix server, but you can also use [Conduit](https://conduit.rs).
|
By default, this playbook configures the [Synapse](https://github.com/matrix-org/synapse) Matrix server, but you can also use [Conduit](https://conduit.rs).
|
||||||
|
|
||||||
**Notes**:
|
**NOTES**:
|
||||||
|
|
||||||
- **You can't switch an existing Matrix server's implementation** (e.g. Synapse -> Conduit). Proceed below only if you're OK with losing data or you're dealing with a server on a new domain name, which hasn't participated in the Matrix federation yet.
|
- **You can't switch an existing Matrix server's implementation** (e.g. Synapse -> Conduit). Proceed below only if you're OK with losing data or you're dealing with a server on a new domain name, which hasn't participated in the Matrix federation yet.
|
||||||
|
|
||||||
- **homeserver implementations other than Synapse may not be fully functional**. The playbook may also not assist you in an optimal way (like it does with Synapse). Make yourself familiar with the downsides before proceeding
|
- **homeserver implementations other than Synapse may not be fully functional**. The playbook may also not assist you in an optimal way (like it does with Synapse). Make yourself familiar with the downsides before proceeding
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To use Conduit, you **generally** need to add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
## Installation
|
||||||
|
|
||||||
|
To use Conduit, you **generally** need the following additional `vars.yml` configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_homeserver_implementation: conduit
|
matrix_homeserver_implementation: conduit
|
||||||
```
|
```
|
||||||
|
|
||||||
## Creating the first user account
|
However, since Conduit is difficult (see [famedly/conduit#276](https://gitlab.com/famedly/conduit/-/issues/276) and [famedly/conduit#354](https://gitlab.com/famedly/conduit/-/merge_requests/354)) when it comes to creating the first user account and does not support [registering users](registering-users.md) (via the command line or via the playbook) like Synapse and Dendrite do, we recommend the following flow:
|
||||||
|
|
||||||
Since it is difficult to create the first user account on Conduit (see [famedly/conduit#276](https://gitlab.com/famedly/conduit/-/issues/276) and [famedly/conduit#354](https://gitlab.com/famedly/conduit/-/merge_requests/354)) and it does not support [registering users](registering-users.md) (via the command line or via the playbook) like Synapse and Dendrite do, we recommend the following procedure:
|
|
||||||
|
|
||||||
1. Add `matrix_conduit_allow_registration: true` to your `vars.yml` the first time around, temporarily
|
1. Add `matrix_conduit_allow_registration: true` to your `vars.yml` the first time around, temporarily
|
||||||
2. Run the playbook (`ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start` - see [Installing](installing.md))
|
2. Run the playbook (`ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start` - see [Installing](installing.md))
|
||||||
@ -30,14 +29,14 @@ Since it is difficult to create the first user account on Conduit (see [famedly/
|
|||||||
|
|
||||||
## Configuring bridges / appservices
|
## Configuring bridges / appservices
|
||||||
|
|
||||||
Automatic appservice setup is currently unsupported when using Conduit. After setting up the service as usual you may notice that it is unable to start.
|
Automatic appservice setup is currently unsupported when using conduit. After setting up the service as usual you may notice that it is unable to start.
|
||||||
|
|
||||||
You will have to manually register appservices using the the [register-appservice](https://gitlab.com/famedly/conduit/-/blob/next/APPSERVICES.md) command.
|
You will have to manually register appservices using the the [register-appservice](https://gitlab.com/famedly/conduit/-/blob/next/APPSERVICES.md) command.
|
||||||
|
|
||||||
Find the `registration.yaml` in the `/matrix` directory, for example `/matrix/mautrix-signal/bridge/registration.yaml`, then pass the content to Conduit:
|
Find the `registration.yaml` in the `/matrix` directory, for example `/matrix/mautrix-signal/bridge/registration.yaml`, then pass the content to conduit:
|
||||||
|
|
||||||
|
|
||||||
@conduit:example.com: register-appservice
|
@conduit:your.server.name: register-appservice
|
||||||
```
|
```
|
||||||
as_token: <token>
|
as_token: <token>
|
||||||
de.sorunome.msc2409.push_ephemeral: true
|
de.sorunome.msc2409.push_ephemeral: true
|
||||||
@ -56,3 +55,4 @@ Find the `registration.yaml` in the `/matrix` directory, for example `/matrix/ma
|
|||||||
sender_localpart: _bot_signalbot
|
sender_localpart: _bot_signalbot
|
||||||
url: http://matrix-mautrix-signal:29328
|
url: http://matrix-mautrix-signal:29328
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -1,26 +1,16 @@
|
|||||||
# Configuring Dendrite (optional)
|
# Configuring Dendrite (optional)
|
||||||
|
|
||||||
By default, this playbook configures the [Synapse](https://github.com/element-hq/synapse) Matrix server, but you can also use [Dendrite](https://github.com/matrix-org/dendrite).
|
By default, this playbook configures the [Synapse](https://github.com/matrix-org/synapse) Matrix server, but you can also use [Dendrite](https://github.com/matrix-org/dendrite).
|
||||||
|
|
||||||
**Notes**:
|
**NOTES**:
|
||||||
|
|
||||||
- **You can't switch an existing Matrix server's implementation** (e.g. Synapse -> Dendrite). Proceed below only if you're OK with losing data or you're dealing with a server on a new domain name, which hasn't participated in the Matrix federation yet.
|
- **You can't switch an existing Matrix server's implementation** (e.g. Synapse -> Dendrite). Proceed below only if you're OK with losing data or you're dealing with a server on a new domain name, which hasn't participated in the Matrix federation yet.
|
||||||
|
|
||||||
- **homeserver implementations other than Synapse may not be fully functional**. The playbook may also not assist you in an optimal way (like it does with Synapse). Make yourself familiar with the downsides before proceeding
|
- **homeserver implementations other than Synapse may not be fully functional**. The playbook may also not assist you in an optimal way (like it does with Synapse). Make yourself familiar with the downsides before proceeding
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
The playbook provided settings for Dendrite are defined in [`roles/custom/matrix-dendrite/defaults/main.yml`](../roles/custom/matrix-dendrite/defaults/main.yml) and they ultimately end up in the generated `/matrix/dendrite/config/dendrite.yaml` file (on the server). This file is generated from the [`roles/custom/matrix-dendrite/templates/dendrite/dendrite.yaml.j2`](../roles/custom/matrix-dendrite/templates/dendrite/dendrite.yaml.j2) template.
|
||||||
|
|
||||||
To use Dendrite, you **generally** need to add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
**If there's an existing variable** which controls a setting you wish to change, you can simply define that variable in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`) and [re-run the playbook](installing.md) to apply the changes.
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_homeserver_implementation: dendrite
|
|
||||||
```
|
|
||||||
|
|
||||||
The playbook provides lots of customization variables you could use to change Dendrite's settings.
|
|
||||||
|
|
||||||
Their defaults are defined in [`roles/custom/matrix-dendrite/defaults/main.yml`](../roles/custom/matrix-dendrite/defaults/main.yml) and they ultimately end up in the generated `/matrix/dendrite/config/dendrite.yaml` file (on the server). This file is generated from the [`roles/custom/matrix-dendrite/templates/dendrite/dendrite.yaml.j2`](../roles/custom/matrix-dendrite/templates/dendrite/dendrite.yaml.j2) template.
|
|
||||||
|
|
||||||
**If there's an existing variable** which controls a setting you wish to change, you can simply define that variable in your configuration file (`inventory/host_vars/matrix.example.com/vars.yml`) and [re-run the playbook](installing.md) to apply the changes.
|
|
||||||
|
|
||||||
Alternatively, **if there is no pre-defined variable** for a Dendrite setting you wish to change:
|
Alternatively, **if there is no pre-defined variable** for a Dendrite setting you wish to change:
|
||||||
|
|
||||||
@ -32,6 +22,11 @@ Alternatively, **if there is no pre-defined variable** for a Dendrite setting yo
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Installing
|
## Installation
|
||||||
|
|
||||||
|
To use Dendrite, you **generally** need the following additional `vars.yml` configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_homeserver_implementation: dendrite
|
||||||
|
```
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
@ -1,22 +1,46 @@
|
|||||||
# Setting up Dimension integration manager (optional)
|
# Setting up Dimension (optional)
|
||||||
|
|
||||||
**[Dimension](https://dimension.t2bot.io) can only be installed after Matrix services are installed and running.** If you're just installing Matrix services for the first time, please continue with the [Configuration](configuring-playbook.md) / [Installation](installing.md) flow and come back here later.
|
**[Dimension](https://dimension.t2bot.io) can only be installed after Matrix services are installed and running.**
|
||||||
|
If you're just installing Matrix services for the first time, please continue with the [Configuration](configuring-playbook.md) / [Installation](installing.md) flow and come back here later.
|
||||||
|
|
||||||
**Note**: Dimension is **[officially unmaintained](https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/2806#issuecomment-1673559299)**. We recommend not bothering with installing it.
|
**Note**: Dimension is **[officially unmaintained](https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/2806#issuecomment-1673559299)**. We recommend not bothering with installing it.
|
||||||
|
|
||||||
**Note**: This playbook now supports running [Dimension](https://dimension.t2bot.io) in both a federated and [unfederated](https://github.com/turt2live/matrix-dimension/blob/master/docs/unfederated.md) environments. This is handled automatically based on the value of `matrix_homeserver_federation_enabled`. Enabling Dimension, means that the `openid` API endpoints will be exposed on the Matrix Federation port (usually `8448`), even if [federation](configuring-playbook-federation.md) is disabled. It's something to be aware of, especially in terms of firewall whitelisting (make sure port `8448` is accessible).
|
**Note**: This playbook now supports running [Dimension](https://dimension.t2bot.io) in both a federated and [unfederated](https://github.com/turt2live/matrix-dimension/blob/master/docs/unfederated.md) environments. This is handled automatically based on the value of `matrix_synapse_federation_enabled`. Enabling Dimension, means that the `openid` API endpoints will be exposed on the Matrix Federation port (usually `8448`), even if [federation](configuring-playbook-federation.md) is disabled. It's something to be aware of, especially in terms of firewall whitelisting (make sure port `8448` is accessible).
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable Dimension, add this to your configuration file (`inventory/host_vars/matrix.example.com/vars.yml`):
|
## Decide on a domain and path
|
||||||
|
|
||||||
|
By default, Dimension is configured to use its own dedicated domain (`dimension.DOMAIN`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
||||||
|
|
||||||
|
You can override the domain and path like this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Switch to another hostname compared to the default (`dimension.{{ matrix_domain }}`)
|
||||||
|
matrix_dimension_hostname: "integrations.{{ matrix_domain }}"
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
While there is a `matrix_dimension_path_prefix` variable for changing the path where Dimension is served, overriding it is not possible right now due to [this Dimension issue](https://github.com/turt2live/matrix-dimension/issues/510). You must serve Dimension at a dedicated subdomain until this issue is solved.
|
||||||
|
|
||||||
|
|
||||||
|
## Adjusting DNS records
|
||||||
|
|
||||||
|
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Dimension domain to the Matrix server.
|
||||||
|
|
||||||
|
|
||||||
|
## Enable
|
||||||
|
|
||||||
|
To enable Dimension, add this to your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_dimension_enabled: true
|
matrix_dimension_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Define admin users
|
|
||||||
|
|
||||||
These users can modify the integrations this Dimension supports. Add this to your configuration file (`inventory/host_vars/matrix.example.com/vars.yml`):
|
## Define admin users
|
||||||
|
|
||||||
|
These users can modify the integrations this Dimension supports.
|
||||||
|
Add this to your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_dimension_admins:
|
matrix_dimension_admins:
|
||||||
@ -26,15 +50,17 @@ matrix_dimension_admins:
|
|||||||
|
|
||||||
The admin interface is accessible within Element by accessing it in any room and clicking the cog wheel/settings icon in the top right. Currently, Dimension can be opened in Element by the "Add widgets, bridges, & bots" link in the room information.
|
The admin interface is accessible within Element by accessing it in any room and clicking the cog wheel/settings icon in the top right. Currently, Dimension can be opened in Element by the "Add widgets, bridges, & bots" link in the room information.
|
||||||
|
|
||||||
### Access token
|
## Access token
|
||||||
|
|
||||||
We recommend that you create a dedicated Matrix user for Dimension (`dimension` is a good username). Follow our [Registering users](registering-users.md) guide to learn how to register **a regular (non-admin) user**.
|
We recommend that you create a dedicated Matrix user for Dimension (`dimension` is a good username).
|
||||||
|
Follow our [Registering users](registering-users.md) guide to learn how to register **a regular (non-admin) user**.
|
||||||
|
|
||||||
You are required to specify an access token (belonging to this new user) for Dimension to work. To get an access token for the Dimension user, you can follow the documentation on [how to do obtain an access token](obtaining-access-tokens.md).
|
You are required to specify an access token (belonging to this new user) for Dimension to work.
|
||||||
|
To get an access token for the Dimension user, you can follow the documentation on [how to do obtain an access token](obtaining-access-tokens.md).
|
||||||
|
|
||||||
**Access tokens are sensitive information. Do not include them in any bug reports, messages, or logs. Do not share the access token with anyone.**
|
**Access tokens are sensitive information. Do not include them in any bug reports, messages, or logs. Do not share the access token with anyone.**
|
||||||
|
|
||||||
Add access token to your configuration file (`inventory/host_vars/matrix.example.com/vars.yml`):
|
Add access token to your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_dimension_access_token: "YOUR ACCESS TOKEN HERE"
|
matrix_dimension_access_token: "YOUR ACCESS TOKEN HERE"
|
||||||
@ -42,40 +68,16 @@ matrix_dimension_access_token: "YOUR ACCESS TOKEN HERE"
|
|||||||
|
|
||||||
For more information on how to acquire an access token, visit [https://t2bot.io/docs/access_tokens](https://t2bot.io/docs/access_tokens).
|
For more information on how to acquire an access token, visit [https://t2bot.io/docs/access_tokens](https://t2bot.io/docs/access_tokens).
|
||||||
|
|
||||||
### Adjusting the Dimension URL
|
|
||||||
|
|
||||||
By default, this playbook installs Dimension on the `dimension.` subdomain (`dimension.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
## Installation
|
||||||
|
|
||||||
By tweaking the `matrix_dimension_hostname` and `matrix_dimension_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
After these variables have been set and you have potentially [adjusted your DNS records](#adjusting-dns-records), please run the following command to re-run setup and to restart Dimension:
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
|
||||||
# so we won't need to add additional DNS records for Dimension.
|
|
||||||
matrix_dimension_hostname: "{{ matrix_server_fqn_matrix }}"
|
|
||||||
|
|
||||||
# Expose under the /dimension subpath
|
|
||||||
# matrix_dimension_path_prefix: /dimension
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note**: While there is a `matrix_dimension_path_prefix` variable for changing the path where Dimension is served, overriding it is not possible due to [this Dimension issue](https://github.com/turt2live/matrix-dimension/issues/510). You must serve Dimension at a dedicated subdomain.
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Dimension domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `dimension`. See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
```
|
```
|
||||||
|
|
||||||
After Dimension has been installed you may need to log out and log back in for it to pick up the new integration manager. Then you can access integrations in Element by opening a room, clicking the Room info button (`i`) button in the top right corner of the screen, and then clicking Add widgets, bridges & bots.
|
After Dimension has been installed you may need to log out and log back in for it to pick up the new integrations manager. Then you can access integrations in Element by opening a room, clicking the Room info button (`i`) button in the top right corner of the screen, and then clicking Add widgets, bridges & bots.
|
||||||
|
|
||||||
|
|
||||||
## Jitsi domain
|
## Jitsi domain
|
||||||
@ -87,6 +89,7 @@ In the interim until the above limitation is resolved, an admin user needs to co
|
|||||||
|
|
||||||
## Additional features
|
## Additional features
|
||||||
|
|
||||||
To use a more custom configuration, you can define a `matrix_dimension_configuration_extension_yaml` string variable and put your configuration in it. To learn more about how to do this, refer to the information about `matrix_dimension_configuration_extension_yaml` in the [default variables file](../roles/custom/matrix-dimension/defaults/main.yml) of the Dimension component.
|
To use a more custom configuration, you can define a `matrix_dimension_configuration_extension_yaml` string variable and put your configuration in it.
|
||||||
|
To learn more about how to do this, refer to the information about `matrix_dimension_configuration_extension_yaml` in the [default variables file](../roles/custom/matrix-dimension/defaults/main.yml) of the Dimension component.
|
||||||
|
|
||||||
You can find all configuration options on [GitHub page of Dimension project](https://github.com/turt2live/matrix-dimension/blob/master/config/default.yaml).
|
You can find all configuration options on [GitHub page of Dimension project](https://github.com/turt2live/matrix-dimension/blob/master/config/default.yaml).
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# Setting up Dynamic DNS (optional)
|
# Dynamic DNS
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
Most cloud providers / ISPs will charge you extra for a static IP address. If you're not hosting a highly reliable homeserver you can workaround this via dynamic DNS.
|
Most cloud providers / ISPs will charge you extra for a static IP address. If you're
|
||||||
|
not hosting a highly reliable homeserver you can workaround this via dynamic DNS. To
|
||||||
To set this up, you'll need to get the username/password from your DNS provider. For google domains, this process is described [here](https://support.google.com/domains/answer/6147083).
|
set this up, you'll need to get the username/password from your DNS provider. For
|
||||||
|
google domains, this process is described [here](https://support.google.com/domains/answer/6147083).
|
||||||
After you've gotten the proper credentials you can add the following config to your `inventory/host_vars/matrix.example.com/vars.yml`:
|
After you've gotten the proper credentials you can add the following config to your `inventory/host_vars/matrix.DOMAIN/vars.yml`:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_dynamic_dns_enabled: true
|
matrix_dynamic_dns_enabled: true
|
||||||
|
@ -2,13 +2,12 @@
|
|||||||
|
|
||||||
By default, this playbook sets up an [Exim](https://www.exim.org/) email server through which all Matrix services send emails.
|
By default, this playbook sets up an [Exim](https://www.exim.org/) email server through which all Matrix services send emails.
|
||||||
|
|
||||||
The email server would attempt to deliver emails directly to their final destination. This may or may not work, depending on your domain configuration (SPF settings, etc.)
|
The email server would attempt to deliver emails directly to their final destination.
|
||||||
|
This may or may not work, depending on your domain configuration (SPF settings, etc.)
|
||||||
|
|
||||||
By default, emails are sent from `matrix@matrix.example.com`, as specified by the `exim_relay_sender_address` playbook variable.
|
By default, emails are sent from `matrix@<your-domain-name>` (as specified by the `matrix_mailer_sender_address` playbook variable).
|
||||||
|
|
||||||
⚠ **Warning**: On some cloud providers (Google Cloud, etc.), [port 25 is always blocked](https://cloud.google.com/compute/docs/tutorials/sending-mail/), so sending email directly from your server is not possible. You will need to [relay email through another SMTP server](#relaying-email-through-another-smtp-server).
|
**Note**: If you are using a Google Cloud instance, [port 25 is always blocked](https://cloud.google.com/compute/docs/tutorials/sending-mail/), so you need to relay email through another SMTP server as described below.
|
||||||
|
|
||||||
💡 To improve deliverability, we recommend [relaying email through another SMTP server](#relaying-email-through-another-smtp-server) anyway.
|
|
||||||
|
|
||||||
|
|
||||||
## Firewall settings
|
## Firewall settings
|
||||||
@ -18,38 +17,39 @@ No matter whether you send email directly (the default) or you relay email throu
|
|||||||
|
|
||||||
## Relaying email through another SMTP server
|
## Relaying email through another SMTP server
|
||||||
|
|
||||||
If you'd like to relay email through another SMTP server, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
If you'd like to relay email through another SMTP server, feel free to redefine a few playbook variables.
|
||||||
|
Example:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
exim_relay_sender_address: "another.sender@example.com"
|
matrix_mailer_sender_address: "another.sender@example.com"
|
||||||
exim_relay_relay_use: true
|
matrix_mailer_relay_use: true
|
||||||
exim_relay_relay_host_name: "mail.example.com"
|
matrix_mailer_relay_host_name: "mail.example.com"
|
||||||
exim_relay_relay_host_port: 587
|
matrix_mailer_relay_host_port: 587
|
||||||
exim_relay_relay_auth: true
|
matrix_mailer_relay_auth: true
|
||||||
exim_relay_relay_auth_username: "another.sender@example.com"
|
matrix_mailer_relay_auth_username: "another.sender@example.com"
|
||||||
exim_relay_relay_auth_password: "some-password"
|
matrix_mailer_relay_auth_password: "some-password"
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: only the secure submission protocol (using `STARTTLS`, usually on port `587`) is supported. **SMTPS** (encrypted SMTP, usually on port `465`) **is not supported**.
|
**Note**: only the secure submission protocol (using `STARTTLS`, usually on port `587`) is supported. **SMTPS** (encrypted SMTP, usually on port `465`) **is not supported**.
|
||||||
|
|
||||||
|
|
||||||
### Configuations for sending emails using Sendgrid
|
### Configuations for sending emails using Sendgrid
|
||||||
An easy and free SMTP service to set up is [Sendgrid](https://sendgrid.com/), the free tier allows for up to 100 emails per day to be sent. In the settings below you can provide any email for `exim_relay_sender_address`.
|
An easy and free SMTP service to set up is [Sendgrid](https://sendgrid.com/), the free tier allows for up to 100 emails per day to be sent. In the settings below you can provide any email for `matrix_mailer_sender_address`.
|
||||||
|
|
||||||
The only other thing you need to change is the `exim_relay_relay_auth_password`, which you can generate at https://app.sendgrid.com/settings/api_keys. The API key password looks something like `SG.955oW1mLSfwds7i9Yd6IA5Q.q8GTaB8q9kGDzasegdG6u95fQ-6zkdwrPP8bOeuI`.
|
The only other thing you need to change is the `matrix_mailer_relay_auth_password`, which you can generate at https://app.sendgrid.com/settings/api_keys. The API key password looks something like `SG.955oW1mLSfwds7i9Yd6IA5Q.q8GTaB8q9kGDzasegdG6u95fQ-6zkdwrPP8bOeuI`.
|
||||||
|
|
||||||
Note that the `exim_relay_relay_auth_username` is literally the string `apikey`, it's always the same for Sendgrid.
|
Note that the `matrix_mailer_relay_auth_username` is literally the string `apikey`, it's always the same for Sendgrid.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
exim_relay_sender_address: "arbitrary@email.com"
|
matrix_mailer_sender_address: "arbitrary@email.com"
|
||||||
exim_relay_relay_use: true
|
matrix_mailer_relay_use: true
|
||||||
exim_relay_relay_host_name: "smtp.sendgrid.net"
|
matrix_mailer_relay_host_name: "smtp.sendgrid.net"
|
||||||
exim_relay_relay_host_port: 587
|
matrix_mailer_relay_host_port: 587
|
||||||
exim_relay_relay_auth: true
|
matrix_mailer_relay_auth: true
|
||||||
exim_relay_relay_auth_username: "apikey"
|
matrix_mailer_relay_auth_username: "apikey"
|
||||||
exim_relay_relay_auth_password: "<your api key password>"
|
matrix_mailer_relay_auth_password: "<your api key password>"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
If you're having trouble with email not being delivered, it may be useful to inspect the mailer logs: `journalctl -f -u matrix-exim-relay`.
|
If you're having trouble with email not being delivered, it may be useful to inspect the mailer logs: `journalctl -f -u matrix-mailer`.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# Setting up Email2Matrix (optional)
|
# Setting up Email2Matrix (optional)
|
||||||
|
|
||||||
**Note**: email bridging can also happen via the [Postmoogle](configuring-playbook-bridge-postmoogle.md) bridge supported by the playbook. Postmoogle is much more powerful and easier to use, so we recommend that you use it, instead of Email2Matrix.
|
**Note**: email bridging can also happen via the [Postmoogle](configuring-playbook-bot-postmoogle.md) bot supported by the playbook.
|
||||||
|
Postmoogle is much more powerful and easier to use, so we recommend that you use it, instead of Email2Matrix.
|
||||||
|
|
||||||
The playbook can install and configure [email2matrix](https://github.com/devture/email2matrix) for you.
|
The playbook can install and configure [email2matrix](https://github.com/devture/email2matrix) for you.
|
||||||
|
|
||||||
@ -11,78 +12,65 @@ See the project's [documentation](https://github.com/devture/email2matrix/blob/m
|
|||||||
|
|
||||||
### DNS configuration
|
### DNS configuration
|
||||||
|
|
||||||
It's not strictly necessary, but you may increase the chances that incoming emails reach your server by adding an `MX` record for `matrix.example.com`, as described in the [Configuring DNS](configuring-dns.md) documentation page.
|
It's not strictly necessary, but you may increase the chances that incoming emails reach your server by adding an `MX` record for `matrix.DOMAIN`, as described in the [Configuring DNS](configuring-dns.md) documentation page.
|
||||||
|
|
||||||
### Port availability
|
### Port availability
|
||||||
|
|
||||||
Ensure that port 25 is available on your Matrix server and open in your firewall.
|
Ensure that port 25 is available on your Matrix server and open in your firewall.
|
||||||
|
|
||||||
If you have `postfix` or some other email server software installed, you may need to manually remove it first (unless you need it, of course).
|
If you have `postfix` or some other email server software installed, you may need to manually remove it first (unless you need it, of course).
|
||||||
|
|
||||||
If you really need to run an email server on the Matrix machine for other purposes, it may be possible to run Email2Matrix on another port (with a configuration like `matrix_email2matrix_smtp_host_bind_port: "127.0.0.01:2525"`) and have your other email server relay messages there.
|
If you really need to run an email server on the Matrix machine for other purposes, it may be possible to run Email2Matrix on another port (with a configuration like `matrix_email2matrix_smtp_host_bind_port: "127.0.0.01:2525"`) and have your other email server relay messages there.
|
||||||
|
|
||||||
For details about using Email2Matrix alongside [Postfix](http://www.postfix.org/), see [here](https://github.com/devture/email2matrix/blob/master/docs/setup_with_postfix.md).
|
For details about using Email2Matrix alongside [Postfix](http://www.postfix.org/), see [here](https://github.com/devture/email2matrix/blob/master/docs/setup_with_postfix.md).
|
||||||
|
|
||||||
### Creating a user
|
### Creating a user
|
||||||
|
|
||||||
Before enabling Email2Matrix, you'd most likely wish to create a dedicated user (or more) that would be sending messages on the Matrix side. Refer to [Registering users](registering-users.md) for ways to do that. A regular (non-admin) user works best.
|
Before enabling Email2Matrix, you'd most likely wish to create a dedicated user (or more) that would be sending messages on the Matrix side.
|
||||||
|
Refer to [Registering users](registering-users.md) for ways to do that. A regular (non-admin) user works best.
|
||||||
|
|
||||||
### Creating a shared room
|
### Creating a shared room
|
||||||
|
|
||||||
After creating a sender user, you should create one or more Matrix rooms that you share with that user. It doesn't matter who creates and owns the rooms and who joins later (you or the sender user).
|
After creating a sender user, you should create one or more Matrix rooms that you share with that user.
|
||||||
|
It doesn't matter who creates and owns the rooms and who joins later (you or the sender user).
|
||||||
|
|
||||||
What matters is that both you and the sender user are part of the same room and that the sender user has enough privileges in the room to be able to send messages there.
|
What matters is that both you and the sender user are part of the same room and that the sender user has enough privileges in the room to be able to send messages there.
|
||||||
|
|
||||||
Inviting additional people to the room is okay too.
|
Inviting additional people to the room is okay too.
|
||||||
|
|
||||||
Take note of each room's room ID (different clients show the room ID in a different place). You'll need the room ID when [configuring the playbook](#adjusting-the-playbook-configuration) below.
|
Take note of each room's room id (different clients show the room id in a different place).
|
||||||
|
You'll need the room id when doing [Configuration](#configuration) below.
|
||||||
|
|
||||||
|
|
||||||
### Obtaining an access token for the sender user
|
### Obtaining an access token for the sender user
|
||||||
|
|
||||||
In order for the sender user created above to be able to send messages to the room, we'll need to obtain an access token for it. Refer to the documentation on [how to obtain an access token](obtaining-access-tokens.md).
|
In order for the sender user created above to be able to send messages to the room, we'll need to obtain an access token for it. Refer to the documentation on [how to obtain an access token](obtaining-access-tokens.md).
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Configuration
|
||||||
|
|
||||||
After doing the preparation steps above, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
After doing the preparation steps above, adjust your `inventory/host_vars/matrix.DOMAIN/vars.yml` configuration like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_email2matrix_enabled: true
|
matrix_email2matrix_enabled: true
|
||||||
|
|
||||||
matrix_email2matrix_matrix_mappings:
|
matrix_email2matrix_matrix_mappings:
|
||||||
- MailboxName: "mailbox1"
|
- MailboxName: "my-mailbox"
|
||||||
MatrixRoomId: "!qporfwt:{{ matrix_domain }}"
|
MatrixRoomId: "!someRoom:DOMAIN"
|
||||||
MatrixHomeserverUrl: "{{ matrix_homeserver_url }}"
|
MatrixHomeserverUrl: "https://matrix.DOMAIN"
|
||||||
MatrixUserId: "@email2matrix:{{ matrix_domain }}"
|
MatrixUserId: "@email2matrix:DOMAIN"
|
||||||
MatrixAccessToken: "MATRIX_ACCESS_TOKEN_HERE"
|
MatrixAccessToken: "ACCESS_TOKEN_GOES_HERE"
|
||||||
IgnoreSubject: false
|
IgnoreSubject: false
|
||||||
IgnoreBody: false
|
IgnoreBody: false
|
||||||
SkipMarkdown: false
|
SkipMarkdown: false
|
||||||
|
|
||||||
- MailboxName: "mailbox2"
|
- MailboxName: "my-mailbox2"
|
||||||
MatrixRoomId: "!aaabaa:{{ matrix_domain }}"
|
MatrixRoomId: "!anotherRoom:DOMAIN"
|
||||||
MatrixHomeserverUrl: "{{ matrix_homeserver_url }}"
|
MatrixHomeserverUrl: "https://matrix.DOMAIN"
|
||||||
MatrixUserId: "@email2matrix:{{ matrix_domain }}"
|
MatrixUserId: "@email2matrix:DOMAIN"
|
||||||
MatrixAccessToken: "MATRIX_ACCESS_TOKEN_HERE"
|
MatrixAccessToken: "ACCESS_TOKEN_GOES_HERE"
|
||||||
IgnoreSubject: true
|
IgnoreSubject: true
|
||||||
IgnoreBody: false
|
IgnoreBody: false
|
||||||
SkipMarkdown: true
|
SkipMarkdown: true
|
||||||
```
|
```
|
||||||
|
|
||||||
where:
|
You can also set `MatrixHomeserverUrl` to `http://matrix-synapse-reverse-proxy-companion:8008`, instead of the public `https://matrix.DOMAIN`.
|
||||||
|
However, that's more likely to break in the future if you switch to another server implementation than Synapse.
|
||||||
|
|
||||||
* MailboxName - local-part of the email address, through which emails are bridged to the room whose ID is defined with MatrixRoomId
|
Re-run the playbook (`--tags=setup-email2matrix,start`) and try sending an email to `my-mailbox@matrix.DOMAIN`.
|
||||||
* MatrixRoomId - internal ID of the room, to which received emails are sent as Matrix message
|
|
||||||
* MatrixHomeserverUrl - URL of your Matrix homeserver, through which to send Matrix messages. You can also set `MatrixHomeserverUrl` to the container URL where your homeserver's Client-Server API lives by using the `{{ matrix_addons_homeserver_client_api_url }}` variable
|
|
||||||
* MatrixUserId - the full ID of the sender user which sends bridged messages to the room
|
|
||||||
* MatrixAccessToken - sender user's access token
|
|
||||||
* IgnoreSubject - if set to "true", the subject is not bridged to Matrix
|
|
||||||
* IgnoreBody - if set to "true", the message body is not bridged to Matrix
|
|
||||||
* SkipMarkdown - if set to "true", emails are bridged as plain text Matrix message instead of Markdown (actually HTML)
|
|
||||||
|
|
||||||
Refer to the official documentation [here](https://github.com/devture/email2matrix/blob/master/docs/configuration.md).
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
To enable Email2Matrix, run the [installation](installing.md) command (`--tags=setup-email2matrix,start`).
|
|
||||||
|
|
||||||
After installation, you may wish to send a test email to the email address assigned to `mailbox1` (default: `mailbox1@matrix.example.com`) to make sure that Email2Matrix works as expected.
|
|
||||||
|
@ -1,31 +1,18 @@
|
|||||||
# Setting up Etherpad (optional)
|
# Setting up Etherpad (optional)
|
||||||
|
|
||||||
[Etherpad](https://etherpad.org) is an open source collaborative text editor that can be embedded in a Matrix chat room using the [Dimension integration manager](https://dimension.t2bot.io) or used as standalone web app.
|
[Etherpad](https://etherpad.org) is an open source collaborative text editor that can be embedded in a Matrix chat room using the [Dimension integrations manager](https://dimension.t2bot.io) or used as standalone web app.
|
||||||
|
|
||||||
When enabled together with the Jitsi audio/video conferencing system (see [our docs on Jitsi](configuring-playbook-jitsi.md)), it will be made available as an option during the conferences.
|
When enabled together with the Jitsi audio/video conferencing system (see [our docs on Jitsi](configuring-playbook-jitsi.md)), it will be made available as an option during the conferences.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable Etherpad, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
## Decide on a domain and path
|
||||||
|
|
||||||
|
By default, Etherpad is configured to use its own dedicated domain (`etherpad.DOMAIN`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
||||||
|
|
||||||
|
You can override the domain and path like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
etherpad_enabled: true
|
# Switch to the domain used for Matrix services (`matrix.DOMAIN`),
|
||||||
|
|
||||||
# Uncomment and adjust this part if you'd like to enable the admin web UI
|
|
||||||
# etherpad_admin_username: YOUR_USERNAME_HERE
|
|
||||||
# etherpad_admin_password: YOUR_PASSWORD_HERE
|
|
||||||
```
|
|
||||||
|
|
||||||
### Adjusting the Etherpad URL
|
|
||||||
|
|
||||||
By default, this playbook installs Etherpad on the `etherpad.` subdomain (`etherpad.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `etherpad_hostname` and `etherpad_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
|
||||||
# so we won't need to add additional DNS records for Etherpad.
|
# so we won't need to add additional DNS records for Etherpad.
|
||||||
etherpad_hostname: "{{ matrix_server_fqn_matrix }}"
|
etherpad_hostname: "{{ matrix_server_fqn_matrix }}"
|
||||||
|
|
||||||
@ -33,44 +20,63 @@ etherpad_hostname: "{{ matrix_server_fqn_matrix }}"
|
|||||||
etherpad_path_prefix: /etherpad
|
etherpad_path_prefix: /etherpad
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**NOTE**: When using the old `matrix-nginx-proxy` reverse-proxy instead of Traefik, you have only 2 choices:
|
||||||
|
|
||||||
|
- serving Etherpad at its own dedicated domain:
|
||||||
|
- you need to set the domain using the `matrix_server_fqn_etherpad` variable (not `etherpad_hostname`)
|
||||||
|
- you must use `etherpad_path_prefix: /`
|
||||||
|
- serving Etherpad at the [Dimension](configuring-playbook-dimension.md) integration manager's domain (`matrix_server_fqn_dimension`)
|
||||||
|
- you need to have Dimension enabled
|
||||||
|
- you need to add `etherpad_path_prefix: /etherpad` or another prefix (different than `/`)
|
||||||
|
- you need to add `etherpad_nginx_proxy_dimension_integration_enabled: true` to enable this integration
|
||||||
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
## Adjusting DNS records
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Etherpad domain to the Matrix server.
|
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Etherpad domain to the Matrix server.
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `etherpad`. 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.
|
If you've decided to reuse the `matrix.` domain, you won't need to do any extra DNS configuration.
|
||||||
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
[Etherpad](https://etherpad.org) installation is disabled by default. You can enable it in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
etherpad_enabled: true
|
||||||
|
|
||||||
|
# Uncomment below to enable the admin web UI
|
||||||
|
# etherpad_admin_username: admin
|
||||||
|
# etherpad_admin_password: some-password
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, [run the installation process](installing.md) again (e.g. `just install-all`).
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
The Etherpad UI should be available at `https://etherpad.example.com`, while the admin UI (if enabled) should then be available at `https://etherpad.example.com/admin`.
|
The Etherpad UI should be available at `https://etherpad.<your-domain>`, while the admin UI (if enabled) should then be available at `https://etherpad.<your-domain>/admin`.
|
||||||
|
|
||||||
If you've [decided on another hostname or path-prefix](#decide-on-a-domain-and-path) (e.g. `https://matrix.example.com/etherpad`), adjust these URLs accordingly before usage.
|
If you've [decided on another hostname or path-prefix](#decide-on-a-domain-and-path) (e.g. `https://matrix.DOMAIN/etherpad`), adjust these URLs accordingly before usage.
|
||||||
|
|
||||||
|
|
||||||
### Managing / Deleting old pads
|
### Managing / Deleting old pads
|
||||||
|
|
||||||
If you want to manage and remove old unused pads from Etherpad, you will first need to able Admin access as described above.
|
If you want to manage and remove old unused pads from Etherpad, you will first need to able Admin access as described above.
|
||||||
|
|
||||||
Then from the plugin manager page (`https://etherpad.example.com/admin/plugins`, install the `adminpads2` plugin. Once installed, you should have a "Manage pads" section in the Admin web-UI.
|
Then from the plugin manager page (`https://etherpad.<your-domain>/admin/plugins`, install the `adminpads2` plugin. Once installed, you should have a "Manage pads" section in the Admin web-UI.
|
||||||
|
|
||||||
|
|
||||||
### How to use Etherpad widgets without an integration manager (like Dimension)
|
### How to use Etherpad widgets without an Integration Manager (like Dimension)
|
||||||
|
|
||||||
This is how it works in Element, it might work quite similar with other clients:
|
This is how it works in Element, it might work quite similar with other clients:
|
||||||
|
|
||||||
To integrate a standalone Etherpad in a room, create your pad by visiting `https://etherpad.example.com`. When the pad opens, copy the URL and send a command like this to the room: `/addwidget URL`. You will then find your integrated Etherpad within the right sidebar in the `Widgets` section.
|
To integrate a standalone etherpad in a room, create your pad by visiting `https://etherpad.DOMAIN`. When the pad opens, copy the URL and send a command like this to the room: `/addwidget URL`. You will then find your integrated Etherpad within the right sidebar in the `Widgets` section.
|
||||||
|
|
||||||
|
|
||||||
### Set Dimension default to the self-hosted Etherpad (optional)
|
### Set Dimension default to the self-hosted Etherpad (optional)
|
||||||
|
|
||||||
If you decided to install [Dimension integration manager](configuring-playbook-dimension.md) alongside Etherpad, the Dimension administrator users can configure the default URL template.
|
If you decided to install [Dimension integration manager](configuring-playbook-dimension.md) alongside Etherpad, the Dimension administrator users can configure the default URL template.
|
||||||
|
|
||||||
The Dimension configuration menu can be accessed with the sprocket icon as you begin to add a widget to a room in Element. There you will find the Etherpad Widget Configuration action beneath the _Widgets_ tab.
|
The Dimension configuration menu can be accessed with the sprocket icon as you begin to add a widget to a room in Element. There you will find the Etherpad Widget Configuration action beneath the _Widgets_ tab.
|
||||||
|
|
||||||
|
|
||||||
@ -78,11 +84,10 @@ The Dimension configuration menu can be accessed with the sprocket icon as you b
|
|||||||
|
|
||||||
If you wish to disable the Etherpad chat button, you can do it by appending `?showChat=false` to the end of the pad URL, or the template.
|
If you wish to disable the Etherpad chat button, you can do it by appending `?showChat=false` to the end of the pad URL, or the template.
|
||||||
|
|
||||||
Example: `https://etherpad.example.com/p/$roomId_$padName?showChat=false`
|
Example: `https://etherpad.<your-domain>/p/$roomId_$padName?showChat=false`
|
||||||
|
|
||||||
|
|
||||||
## Known issues
|
## Known issues
|
||||||
|
|
||||||
If your Etherpad widget fails to load, this might be due to Dimension generating a Pad name so long, the Etherpad app rejects it.
|
If your Etherpad widget fails to load, this might be due to Dimension generating a Pad name so long, the Etherpad app rejects it.
|
||||||
|
|
||||||
`$roomId_$padName` can end up being longer than 50 characters. You can avoid having this problem by altering the template so it only contains the three word random identifier `$padName`.
|
`$roomId_$padName` can end up being longer than 50 characters. You can avoid having this problem by altering the template so it only contains the three word random identifier `$padName`.
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
# Using an external PostgreSQL server (optional)
|
# Using an external PostgreSQL server (optional)
|
||||||
|
|
||||||
By default, this playbook would set up a PostgreSQL database server on your machine, running in a Docker container. If that's okay, you can skip this document.
|
By default, this playbook would set up a PostgreSQL database server on your machine, running in a Docker container.
|
||||||
|
If that's alright, you can skip this.
|
||||||
|
|
||||||
**Note**: using **an external Postgres server is currently [not very seamless](https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/1682#issuecomment-1061461683) when it comes to enabling various other playbook services** - you will need to create a new database/credentials for each service and to point each service to its corresponding database using custom `vars.yml` configuration. **For the best experience with the playbook, stick to using the integrated Postgres server**.
|
If you'd like to use an external PostgreSQL server that you manage, you can edit your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`).
|
||||||
|
|
||||||
If you'd like to use an external Postgres server that you manage, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
**NOTE**: using **an external Postgres server is currently [not very seamless](https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/1682#issuecomment-1061461683) when it comes to enabling various other playbook services** - you will need to create a new database/credentials for each service and to point each service to its corresponding database using custom `vars.yml` configuration. **For the best experience with the playbook, stick to using the integrated Postgres server**.
|
||||||
|
|
||||||
|
If you'd like to use an external Postgres server, use a custom `vars.yml` configuration like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
postgres_enabled: false
|
devture_postgres_enabled: false
|
||||||
|
|
||||||
# Rewire Synapse to use your external Postgres server
|
# Rewire Synapse to use your external Postgres server
|
||||||
matrix_synapse_database_host: "your-postgres-server-hostname"
|
matrix_synapse_database_host: "your-postgres-server-hostname"
|
||||||
@ -17,10 +20,11 @@ matrix_synapse_database_database: "your-postgres-server-database-name"
|
|||||||
|
|
||||||
# Rewire any other service (each `matrix-*` role) you may wish to use to use your external Postgres server.
|
# Rewire any other service (each `matrix-*` role) you may wish to use to use your external Postgres server.
|
||||||
# Each service expects to have its own dedicated database on the Postgres server
|
# Each service expects to have its own dedicated database on the Postgres server
|
||||||
# and uses its own variable names (see `roles/custom/matrix-*/defaults/main.yml`) for configuring Postgres connectivity.
|
# and uses its own variable names (see `roles/custom/matrix-*/defaults/main.yml) for configuring Postgres connectivity.
|
||||||
```
|
```
|
||||||
|
|
||||||
The database (as specified in `matrix_synapse_database_database`) must exist and be accessible with the given credentials. It must be empty or contain a valid Synapse database. If empty, Synapse would populate it the first time it runs.
|
The database (as specified in `matrix_synapse_database_database`) must exist and be accessible with the given credentials.
|
||||||
|
It must be empty or contain a valid Synapse database. If empty, Synapse would populate it the first time it runs.
|
||||||
|
|
||||||
**Note**: the external server that you specify in `matrix_synapse_database_host` must be accessible from within the `matrix-synapse` Docker container (and possibly other containers too). This means that it either needs to be a publicly accessible hostname or that it's a hostname on the same Docker network where all containers installed by this playbook run (a network called `matrix` by default). Using a local PostgreSQL instance on the host (running on the same machine, but not in a container) is not possible.
|
**Note**: the external server that you specify in `matrix_synapse_database_host` must be accessible from within the `matrix-synapse` Docker container (and possibly other containers too). This means that it either needs to be a publicly accessible hostname or that it's a hostname on the same Docker network where all containers installed by this playbook run (a network called `matrix` by default). Using a local PostgreSQL instance on the host (running on the same machine, but not in a container) is not possible.
|
||||||
|
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
# Controlling Matrix federation (optional)
|
# Controlling Matrix federation (optional)
|
||||||
|
|
||||||
By default, your server federates with the whole Matrix network. That is, people on your server can communicate with people on any other Matrix server.
|
By default, your server federates with the whole Matrix network.
|
||||||
|
That is, people on your server can communicate with people on any other Matrix server.
|
||||||
|
|
||||||
|
|
||||||
## Federating only with select servers
|
## Federating only with select servers
|
||||||
|
|
||||||
To make your server only federate with servers of your choosing, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
To make your server only federate with servers of your choosing, add this to your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_synapse_federation_domain_whitelist:
|
matrix_synapse_federation_domain_whitelist:
|
||||||
- example.com
|
- example.com
|
||||||
- example.net
|
- another.com
|
||||||
```
|
```
|
||||||
|
|
||||||
If you wish to disable federation, you can do that with an empty list (`[]`), or better yet by completely disabling federation (see below).
|
If you wish to disable federation, you can do that with an empty list (`[]`), or better yet by completely disabling federation (see below).
|
||||||
@ -20,7 +21,7 @@ If you wish to disable federation, you can do that with an empty list (`[]`), or
|
|||||||
|
|
||||||
By default, your server's public rooms directory is not exposed to other servers via federation.
|
By default, your server's public rooms directory is not exposed to other servers via federation.
|
||||||
|
|
||||||
If you wish to expose it, add this to your configuration file (`inventory/host_vars/matrix.example.com/vars.yml`):
|
If you wish to expose it, add this to your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_synapse_allow_public_rooms_over_federation: true
|
matrix_synapse_allow_public_rooms_over_federation: true
|
||||||
@ -29,10 +30,10 @@ matrix_synapse_allow_public_rooms_over_federation: true
|
|||||||
|
|
||||||
## Disabling federation
|
## Disabling federation
|
||||||
|
|
||||||
To completely disable federation, isolating your server from the rest of the Matrix network, add this to your configuration file (`inventory/host_vars/matrix.example.com/vars.yml`):
|
To completely disable federation, isolating your server from the rest of the Matrix network, add this to your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_homeserver_federation_enabled: false
|
matrix_synapse_federation_enabled: false
|
||||||
```
|
```
|
||||||
|
|
||||||
With that, your server's users will only be able to talk among themselves, but not to anyone who is on another server.
|
With that, your server's users will only be able to talk among themselves, but not to anyone who is on another server.
|
||||||
@ -40,11 +41,12 @@ With that, your server's users will only be able to talk among themselves, but n
|
|||||||
**Disabling federation does not necessarily disable the federation port** (`8448`). Services like [Dimension](configuring-playbook-dimension.md) and [ma1sd](configuring-playbook-ma1sd.md) normally rely on `openid` APIs exposed on that port. Even if you disable federation and only if necessary, we may still be exposing the federation port and serving the `openid` APIs there. To override this and completely disable Synapse's federation port use:
|
**Disabling federation does not necessarily disable the federation port** (`8448`). Services like [Dimension](configuring-playbook-dimension.md) and [ma1sd](configuring-playbook-ma1sd.md) normally rely on `openid` APIs exposed on that port. Even if you disable federation and only if necessary, we may still be exposing the federation port and serving the `openid` APIs there. To override this and completely disable Synapse's federation port use:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_homeserver_federation_enabled: false
|
|
||||||
|
|
||||||
# This stops the federation port on the Synapse side (normally `matrix-synapse:8048` on the container network).
|
# This stops the federation port on the Synapse side (normally `matrix-synapse:8048` on the container network).
|
||||||
matrix_synapse_federation_port_enabled: false
|
matrix_synapse_federation_port_enabled: false
|
||||||
|
|
||||||
|
# This removes the `8448` virtual host from the matrix-nginx-proxy reverse-proxy server.
|
||||||
|
matrix_nginx_proxy_proxy_matrix_federation_api_enabled: false
|
||||||
|
|
||||||
# This stops the federation port on the synapse-reverse-proxy-companion side (normally `matrix-synapse-reverse-proxy-companion:8048` on the container network).
|
# This stops the federation port on the synapse-reverse-proxy-companion side (normally `matrix-synapse-reverse-proxy-companion:8048` on the container network).
|
||||||
matrix_synapse_reverse_proxy_companion_federation_api_enabled: false
|
matrix_synapse_reverse_proxy_companion_federation_api_enabled: false
|
||||||
```
|
```
|
||||||
@ -53,8 +55,7 @@ matrix_synapse_reverse_proxy_companion_federation_api_enabled: false
|
|||||||
|
|
||||||
Why? This change could be useful for people running small Synapse instances on small severs/VPSes to avoid being impacted by a simple DOS/DDOS when bandwidth, RAM, an CPU resources are limited and if your hosting provider does not provide a DOS/DDOS protection.
|
Why? This change could be useful for people running small Synapse instances on small severs/VPSes to avoid being impacted by a simple DOS/DDOS when bandwidth, RAM, an CPU resources are limited and if your hosting provider does not provide a DOS/DDOS protection.
|
||||||
|
|
||||||
|
The following changes in the configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`) will allow this and make it possible to proxy the federation through a CDN such as CloudFlare or any other:
|
||||||
The following changes in the configuration file (`inventory/host_vars/matrix.example.com/vars.yml`) will allow this and make it possible to proxy the federation through a CDN such as CloudFlare or any other:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
matrix_synapse_http_listener_resource_names: ["client","federation"]
|
matrix_synapse_http_listener_resource_names: ["client","federation"]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up the Jitsi video-conferencing platform (optional)
|
# Jitsi
|
||||||
|
|
||||||
The playbook can install the [Jitsi](https://jitsi.org/) video-conferencing platform and integrate it with [Element](configuring-playbook-client-element.md).
|
The playbook can install the [Jitsi](https://jitsi.org/) video-conferencing platform and integrate it with [Element](configuring-playbook-client-element.md).
|
||||||
|
|
||||||
@ -9,39 +9,28 @@ The setup done by the playbook is very similar to [docker-jitsi-meet](https://gi
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
You may need to open the following ports to your server:
|
Before installing Jitsi, make sure you've created the `jitsi.DOMAIN` DNS record (unless you've changed `jitsi_hostname`, as described below). See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
||||||
|
|
||||||
|
You may also need to open the following ports to your server:
|
||||||
|
|
||||||
- `4443/tcp` - RTP media fallback over TCP
|
- `4443/tcp` - RTP media fallback over TCP
|
||||||
- `10000/udp` - RTP media over UDP. Depending on your firewall/NAT setup, incoming RTP packets on port `10000` may have the external IP of your firewall as destination address, due to the usage of STUN in JVB (see [`jitsi_jvb_stun_servers`](https://github.com/mother-of-all-self-hosting/ansible-role-jitsi/blob/main/defaults/main.yml)).
|
- `10000/udp` - RTP media over UDP. Depending on your firewall/NAT setup, incoming RTP packets on port `10000` may have the external IP of your firewall as destination address, due to the usage of STUN in JVB (see [`jitsi_jvb_stun_servers`](https://github.com/mother-of-all-self-hosting/ansible-role-jitsi/blob/main/defaults/main.yml)).
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Installation
|
||||||
|
|
||||||
To enable Jitsi, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Add this to your `inventory/host_vars/matrix.DOMAIN/vars.yml` configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
jitsi_enabled: true
|
jitsi_enabled: true
|
||||||
|
|
||||||
|
# Uncomment and adjust if you need to use another hostname
|
||||||
|
# jitsi_hostname: "jitsi.{{ matrix_domain }}"
|
||||||
|
|
||||||
|
# Uncomment and possible adjust if you'd like to host under a subpath
|
||||||
|
# jitsi_path_prefix: /jitsi
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the Jitsi URL
|
|
||||||
|
|
||||||
By default, this playbook installs Jitsi on the `jitsi.` subdomain (`jitsi.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `jitsi_hostname` variable, you can easily make the service available at a **different hostname** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname
|
|
||||||
jitsi_hostname: call.example.com
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Jitsi domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `jitsi`. See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
## (Optional) Configure Jitsi authentication and guests mode
|
## (Optional) Configure Jitsi authentication and guests mode
|
||||||
|
|
||||||
By default the Jitsi Meet instance does not require any kind of login and is open to use for anyone without registration.
|
By default the Jitsi Meet instance does not require any kind of login and is open to use for anyone without registration.
|
||||||
@ -49,16 +38,18 @@ By default the Jitsi Meet instance does not require any kind of login and is ope
|
|||||||
If you're fine with such an open Jitsi instance, please skip to [Apply changes](#apply-changes).
|
If you're fine with such an open Jitsi instance, please skip to [Apply changes](#apply-changes).
|
||||||
|
|
||||||
If you would like to control who is allowed to open meetings on your new Jitsi instance, then please follow the following steps to enable Jitsi's authentication and optionally guests mode.
|
If you would like to control who is allowed to open meetings on your new Jitsi instance, then please follow the following steps to enable Jitsi's authentication and optionally guests mode.
|
||||||
|
|
||||||
Currently, there are three supported authentication modes: 'internal' (default), 'matrix' and 'ldap'.
|
Currently, there are three supported authentication modes: 'internal' (default), 'matrix' and 'ldap'.
|
||||||
|
|
||||||
**Note**: Authentication is not tested via the playbook's self-checks. We therefore recommend that you manually verify if authentication is required by jitsi. For this, try to manually create a conference on jitsi.example.com in your browser.
|
**Note:** Authentication is not tested via the playbook's self-checks.
|
||||||
|
We therefore recommend that you manually verify if authentication is required by jitsi.
|
||||||
|
For this, try to manually create a conference on jitsi.DOMAIN in your browser.
|
||||||
|
|
||||||
### Authenticate using Jitsi accounts (Auth-Type 'internal')
|
### Authenticate using Jitsi accounts (Auth-Type 'internal')
|
||||||
|
The default authentication mechanism is 'internal' auth, which requires jitsi-accounts to be setup and is the recommended setup, as it also works in federated rooms.
|
||||||
|
With authentication enabled, all meeting rooms have to be opened by a registered user, after which guests are free to join.
|
||||||
|
If a registered host is not yet present, guests are put on hold in individual waiting rooms.
|
||||||
|
|
||||||
The default authentication mechanism is 'internal' auth, which requires jitsi-accounts to be setup and is the recommended setup, as it also works in federated rooms. With authentication enabled, all meeting rooms have to be opened by a registered user, after which guests are free to join. If a registered host is not yet present, guests are put on hold in individual waiting rooms.
|
Add these lines to your `inventory/host_vars/matrix.DOMAIN/vars.yml` configuration:
|
||||||
|
|
||||||
Add these lines to your `inventory/host_vars/matrix.example.com/vars.yml` configuration:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
jitsi_enable_auth: true
|
jitsi_enable_auth: true
|
||||||
@ -70,7 +61,7 @@ jitsi_prosody_auth_internal_accounts:
|
|||||||
password: "another-password"
|
password: "another-password"
|
||||||
```
|
```
|
||||||
|
|
||||||
**Caution**: Accounts added here and subsequently removed will not be automatically removed from the Prosody server until user account cleaning is integrated into the playbook.
|
**Caution:** Accounts added here and subsequently removed will not be automatically removed from the Prosody server until user account cleaning is integrated into the playbook.
|
||||||
|
|
||||||
**If you get an error** like this: "Error: Account creation/modification not supported.", it's likely that you had previously installed Jitsi without auth/guest support. In such a case, you should look into [Rebuilding your Jitsi installation](#rebuilding-your-jitsi-installation).
|
**If you get an error** like this: "Error: Account creation/modification not supported.", it's likely that you had previously installed Jitsi without auth/guest support. In such a case, you should look into [Rebuilding your Jitsi installation](#rebuilding-your-jitsi-installation).
|
||||||
|
|
||||||
@ -78,7 +69,8 @@ jitsi_prosody_auth_internal_accounts:
|
|||||||
|
|
||||||
**Attention: Probably breaks Jitsi in federated rooms and does not allow sharing conference links with guests.**
|
**Attention: Probably breaks Jitsi in federated rooms and does not allow sharing conference links with guests.**
|
||||||
|
|
||||||
Using this authentication type require a [Matrix User Verification Service](https://github.com/matrix-org/matrix-user-verification-service). By default, this playbook creates and configures a user-verification-service to run locally, see [configuring-user-verification-service](configuring-playbook-user-verification-service.md).
|
Using this authentication type require a [Matrix User Verification Service](https://github.com/matrix-org/matrix-user-verification-service).
|
||||||
|
By default, this playbook creates and configures a user-verification-service to run locally, see [configuring-user-verification-service](configuring-playbook-user-verification-service.md).
|
||||||
|
|
||||||
To enable set this configuration at host level:
|
To enable set this configuration at host level:
|
||||||
|
|
||||||
@ -97,8 +89,8 @@ An example LDAP configuration could be:
|
|||||||
```yaml
|
```yaml
|
||||||
jitsi_enable_auth: true
|
jitsi_enable_auth: true
|
||||||
jitsi_auth_type: ldap
|
jitsi_auth_type: ldap
|
||||||
jitsi_ldap_url: "ldap://ldap.example.com"
|
jitsi_ldap_url: "ldap://ldap.DOMAIN"
|
||||||
jitsi_ldap_base: "OU=People,DC=example.com"
|
jitsi_ldap_base: "OU=People,DC=DOMAIN"
|
||||||
#jitsi_ldap_binddn: ""
|
#jitsi_ldap_binddn: ""
|
||||||
#jitsi_ldap_bindpw: ""
|
#jitsi_ldap_bindpw: ""
|
||||||
jitsi_ldap_filter: "uid=%u"
|
jitsi_ldap_filter: "uid=%u"
|
||||||
@ -123,7 +115,7 @@ The reason is the Jitsi VideoBridge git to LAN client the IP address of the dock
|
|||||||
|
|
||||||
Here is how to do it in the playbook.
|
Here is how to do it in the playbook.
|
||||||
|
|
||||||
Add these two lines to your `inventory/host_vars/matrix.example.com/vars.yml` configuration:
|
Add these two lines to your `inventory/host_vars/matrix.DOMAIN/vars.yml` configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
jitsi_jvb_container_extra_arguments:
|
jitsi_jvb_container_extra_arguments:
|
||||||
@ -132,7 +124,7 @@ jitsi_jvb_container_extra_arguments:
|
|||||||
|
|
||||||
## (Optional) Fine tune Jitsi
|
## (Optional) Fine tune Jitsi
|
||||||
|
|
||||||
Sample **additional** `inventory/host_vars/matrix.example.com/vars.yml` configuration to save up resources (explained below):
|
Sample **additional** `inventory/host_vars/matrix.DOMAIN/vars.yml` configuration to save up resources (explained below):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
jitsi_web_custom_config_extension: |
|
jitsi_web_custom_config_extension: |
|
||||||
@ -147,11 +139,14 @@ jitsi_web_config_resolution_width_ideal_and_max: 480
|
|||||||
jitsi_web_config_resolution_height_ideal_and_max: 240
|
jitsi_web_config_resolution_height_ideal_and_max: 240
|
||||||
```
|
```
|
||||||
|
|
||||||
You may want to **suspend unused video layers** until they are requested again, to save up resources on both server and clients. Read more on this feature [here](https://jitsi.org/blog/new-off-stage-layer-suppression-feature/)
|
You may want to **suspend unused video layers** until they are requested again, to save up resources on both server and clients.
|
||||||
|
Read more on this feature [here](https://jitsi.org/blog/new-off-stage-layer-suppression-feature/)
|
||||||
|
|
||||||
You may wish to **disable audio levels** to avoid excessive refresh of the client-side page and decrease the CPU consumption involved.
|
You may wish to **disable audio levels** to avoid excessive refresh of the client-side page and decrease the CPU consumption involved.
|
||||||
|
|
||||||
You may want to **limit the number of video feeds forwarded to each client**, to save up resources on both server and clients. As clients’ bandwidth and CPU may not bear the load, use this setting to avoid lag and crashes. This feature is found by default in other webconference applications such as Office 365 Teams (limit is set to 4). Read how it works [here](https://github.com/jitsi/jitsi-videobridge/blob/master/doc/last-n.md) and performance evaluation on this [study](https://jitsi.org/wp-content/uploads/2016/12/nossdav2015lastn.pdf).
|
You may want to **limit the number of video feeds forwarded to each client**, to save up resources on both server and clients. As clients’ bandwidth and CPU may not bear the load, use this setting to avoid lag and crashes.
|
||||||
|
This feature is found by default in other webconference applications such as Office 365 Teams (limit is set to 4).
|
||||||
|
Read how it works [here](https://github.com/jitsi/jitsi-videobridge/blob/master/doc/last-n.md) and performance evaluation on this [study](https://jitsi.org/wp-content/uploads/2016/12/nossdav2015lastn.pdf).
|
||||||
|
|
||||||
You may want to **limit the maximum video resolution**, to save up resources on both server and clients.
|
You may want to **limit the maximum video resolution**, to save up resources on both server and clients.
|
||||||
|
|
||||||
@ -169,7 +164,8 @@ jitsi_prosody_max_participants: 4 # example value
|
|||||||
|
|
||||||
By default, a single JVB ([Jitsi VideoBridge](https://github.com/jitsi/jitsi-videobridge)) is deployed on the same host as the Matrix server. To allow more video-conferences to happen at the same time, you may need to provision additional JVB services on other hosts.
|
By default, a single JVB ([Jitsi VideoBridge](https://github.com/jitsi/jitsi-videobridge)) is deployed on the same host as the Matrix server. To allow more video-conferences to happen at the same time, you may need to provision additional JVB services on other hosts.
|
||||||
|
|
||||||
There is an ansible playbook that can be run with the following tag: `ansible-playbook -i inventory/hosts --limit jitsi_jvb_servers jitsi_jvb.yml --tags=common,setup-additional-jitsi-jvb,start`
|
There is an ansible playbook that can be run with the following tag:
|
||||||
|
`ansible-playbook -i inventory/hosts --limit jitsi_jvb_servers jitsi_jvb.yml --tags=common,setup-additional-jitsi-jvb,start`
|
||||||
|
|
||||||
For this role to work you will need an additional section in the ansible hosts file with the details of the JVB hosts, for example:
|
For this role to work you will need an additional section in the ansible hosts file with the details of the JVB hosts, for example:
|
||||||
```
|
```
|
||||||
@ -177,7 +173,9 @@ For this role to work you will need an additional section in the ansible hosts f
|
|||||||
<your jvb hosts> ansible_host=<ip address of the jvb host>
|
<your jvb hosts> ansible_host=<ip address of the jvb host>
|
||||||
```
|
```
|
||||||
|
|
||||||
Each JVB will require a server ID to be set so that it can be uniquely identified and this allows Jitsi to keep track of which conferences are on which JVB. The server ID is set with the variable `jitsi_jvb_server_id` which ends up as the JVB_WS_SERVER_ID environment variables in the JVB docker container. This variable can be set via the host file, a parameter to the ansible command or in the `vars.yaml` for the host which will have the additional JVB. For example:
|
Each JVB will require a server id to be set so that it can be uniquely identified and this allows Jitsi to keep track of which conferences are on which JVB.
|
||||||
|
The server id is set with the variable `jitsi_jvb_server_id` which ends up as the JVB_WS_SERVER_ID environment variables in the JVB docker container.
|
||||||
|
This variable can be set via the host file, a parameter to the ansible command or in the `vars.yaml` for the host which will have the additional JVB. For example:
|
||||||
|
|
||||||
``` yaml
|
``` yaml
|
||||||
jitsi_jvb_server_id: 'jvb-2'
|
jitsi_jvb_server_id: 'jvb-2'
|
||||||
@ -189,7 +187,7 @@ jvb-2.example.com ansible_host=192.168.0.2 jitsi_jvb_server_id=jvb-2
|
|||||||
jvb-3.example.com ansible_host=192.168.0.3 jitsi_jvb_server_id=jvb-2
|
jvb-3.example.com ansible_host=192.168.0.3 jitsi_jvb_server_id=jvb-2
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that the server ID `jvb-1` is reserved for the JVB instance running on the Matrix host and therefore should not be used as the ID of an additional jvb host.
|
Note that the server id `jvb-1` is reserved for the JVB instance running on the Matrix host and therefore should not be used as the id of an additional jvb host.
|
||||||
|
|
||||||
The additional JVB will also need to expose the colibri web socket port and this can be done with the following variable:
|
The additional JVB will also need to expose the colibri web socket port and this can be done with the following variable:
|
||||||
|
|
||||||
@ -197,19 +195,22 @@ The additional JVB will also need to expose the colibri web socket port and this
|
|||||||
jitsi_jvb_container_colibri_ws_host_bind_port: 9090
|
jitsi_jvb_container_colibri_ws_host_bind_port: 9090
|
||||||
```
|
```
|
||||||
|
|
||||||
The JVB will also need to know where the prosody xmpp server is located, similar to the server ID this can be set in the vars for the JVB by using the variable `jitsi_xmpp_server`. The Jitsi prosody container is deployed on the Matrix server by default so the value can be set to the Matrix domain. For example:
|
The JVB will also need to know where the prosody xmpp server is located, similar to the server id this can be set in the vars for the JVB by using the variable
|
||||||
|
`jitsi_xmpp_server`. The Jitsi prosody container is deployed on the matrix server by default so the value can be set to the matrix domain. For example:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
jitsi_xmpp_server: "{{ matrix_domain }}"
|
jitsi_xmpp_server: "{{ matrix_domain }}"
|
||||||
```
|
```
|
||||||
|
|
||||||
However, it can also be set the ip address of the Matrix server. This can be useful if you wish to use a private ip. For example:
|
However, it can also be set the ip address of the matrix server. This can be useful if you wish to use a private ip. For example:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
jitsi_xmpp_server: "192.168.0.1"
|
jitsi_xmpp_server: "192.168.0.1"
|
||||||
```
|
```
|
||||||
|
|
||||||
For the JVB to be able to contact the XMPP server, the latter must expose the XMPP port (5222). By default, the Matrix server does not expose the port; only the XMPP container exposes it internally inside the host, which means that the first JVB (which runs on the Matrix server) can reach it but the additional JVB cannot. The port is exposed by setting `jitsi_prosody_container_jvb_host_bind_port` like this:
|
For the JVB to be able to contact the XMPP server, the latter must expose the XMPP port (5222). By default, the Matrix server does not expose the
|
||||||
|
port; only the XMPP container exposes it internally inside the host, which means that the first JVB (which runs on the Matrix server) can reach it but
|
||||||
|
the additional JVB cannot. The port is exposed by setting `jitsi_prosody_container_jvb_host_bind_port` like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
jitsi_prosody_container_jvb_host_bind_port: 5222
|
jitsi_prosody_container_jvb_host_bind_port: 5222
|
||||||
@ -217,7 +218,8 @@ jitsi_prosody_container_jvb_host_bind_port: 5222
|
|||||||
|
|
||||||
(The default is empty; if it's set then docker forwards the port.)
|
(The default is empty; if it's set then docker forwards the port.)
|
||||||
|
|
||||||
Applied together this will allow you to provision extra JVB instances which will register themselves with the prosody service and be available for jicofo to route conferences too.
|
Applied together this will allow you to provision extra JVB instances which will register themselves with the prosody service and be available for jicofo
|
||||||
|
to route conferences too.
|
||||||
|
|
||||||
To make Traefik reverse-proxy to these additional JVBs (living on other hosts), **you would need to add the following Traefik configuration extension**:
|
To make Traefik reverse-proxy to these additional JVBs (living on other hosts), **you would need to add the following Traefik configuration extension**:
|
||||||
|
|
||||||
@ -225,20 +227,20 @@ To make Traefik reverse-proxy to these additional JVBs (living on other hosts),
|
|||||||
# Traefik proxying for additional JVBs. These can't be configured using Docker
|
# Traefik proxying for additional JVBs. These can't be configured using Docker
|
||||||
# labels, like the first JVB is, because they run on different hosts, so we add
|
# labels, like the first JVB is, because they run on different hosts, so we add
|
||||||
# the necessary configuration to the file provider.
|
# the necessary configuration to the file provider.
|
||||||
traefik_provider_configuration_extension_yaml: |
|
devture_traefik_provider_configuration_extension_yaml: |
|
||||||
http:
|
http:
|
||||||
routers:
|
routers:
|
||||||
{% for host in groups['jitsi_jvb_servers'] %}
|
{% for host in groups['jitsi_jvb_servers'] %}
|
||||||
|
|
||||||
additional-{{ hostvars[host]['jitsi_jvb_server_id'] }}-router:
|
additional-{{ hostvars[host]['jitsi_jvb_server_id'] }}-router:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- "{{ traefik_entrypoint_primary }}"
|
- "{{ devture_traefik_entrypoint_primary }}"
|
||||||
rule: "Host(`{{ jitsi_hostname }}`) && PathPrefix(`/colibri-ws/{{ hostvars[host]['jitsi_jvb_server_id'] }}/`)"
|
rule: "Host(`{{ jitsi_hostname }}`) && PathPrefix(`/colibri-ws/{{ hostvars[host]['jitsi_jvb_server_id'] }}/`)"
|
||||||
service: additional-{{ hostvars[host]['jitsi_jvb_server_id'] }}-service
|
service: additional-{{ hostvars[host]['jitsi_jvb_server_id'] }}-service
|
||||||
{% if traefik_entrypoint_primary != 'web' %}
|
{% if devture_traefik_entrypoint_primary != 'web' %}
|
||||||
|
|
||||||
tls:
|
tls:
|
||||||
certResolver: "{{ traefik_certResolver_primary }}"
|
certResolver: "{{ devture_traefik_certResolver_primary }}"
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@ -257,7 +259,8 @@ traefik_provider_configuration_extension_yaml: |
|
|||||||
|
|
||||||
## (Optional) Enable Gravatar
|
## (Optional) Enable Gravatar
|
||||||
|
|
||||||
In the default Jisti Meet configuration, gravatar.com is enabled as an avatar service. This results in third party request leaking data to gravatar. Since element already sends the url of configured Matrix avatars to Jitsi, we disabled gravatar.
|
In the default Jisti Meet configuration, gravatar.com is enabled as an avatar service. This results in third party request leaking data to gravatar.
|
||||||
|
Since element already sends the url of configured Matrix avatars to Jitsi, we disabled gravatar.
|
||||||
|
|
||||||
To enable Gravatar set:
|
To enable Gravatar set:
|
||||||
|
|
||||||
@ -265,27 +268,25 @@ To enable Gravatar set:
|
|||||||
jitsi_disable_gravatar: false
|
jitsi_disable_gravatar: false
|
||||||
```
|
```
|
||||||
|
|
||||||
**Beware**: This leaks information to a third party, namely the Gravatar-Service (unless configured otherwise: gravatar.com). Besides metadata, this includes the Matrix user_id and possibly the room identifier (via `referrer` header).
|
**Beware:** This leaks information to a third party, namely the Gravatar-Service (unless configured otherwise: gravatar.com).
|
||||||
|
Besides metadata, this includes the matrix user_id and possibly the room identifier (via `referrer` header).
|
||||||
|
|
||||||
## Installing
|
## Apply changes
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
Then re-run the playbook: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
||||||
|
|
||||||
```
|
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You can use the self-hosted Jitsi server in multiple ways:
|
You can use the self-hosted Jitsi server in multiple ways:
|
||||||
|
|
||||||
- **by adding a widget to a room via Element** (the one configured by the playbook at `https://element.example.com`). Just start a voice or a video call in a room containing more than 2 members and that would create a Jitsi widget which utilizes your self-hosted Jitsi server.
|
- **by adding a widget to a room via Element** (the one configured by the playbook at `https://element.DOMAIN`). Just start a voice or a video call in a room containing more than 2 members and that would create a Jitsi widget which utilizes your self-hosted Jitsi server.
|
||||||
|
|
||||||
- **by adding a widget to a room via the Dimension integration manager**. You'll have to point the widget to your own Jitsi server manually. See our [Dimension integration manager](./configuring-playbook-dimension.md) documentation page for more details. Naturally, Dimension would need to be installed first (the playbook doesn't install it by default).
|
- **by adding a widget to a room via the Dimension Integration Manager**. You'll have to point the widget to your own Jitsi server manually. See our [Dimension](./configuring-playbook-dimension.md) documentation page for more details. Naturally, Dimension would need to be installed first (the playbook doesn't install it by default).
|
||||||
|
|
||||||
- **directly (without any Matrix integration)**. Just go to `https://jitsi.example.com`
|
- **directly (without any Matrix integration)**. Just go to `https://jitsi.DOMAIN`
|
||||||
|
|
||||||
**Note**: Element apps on mobile devices currently [don't support joining meetings on a self-hosted Jitsi server](https://github.com/element-hq/riot-web/blob/601816862f7d84ac47547891bd53effa73d32957/docs/jitsi.md#mobile-app-support).
|
**Note**: Element apps on mobile devices currently [don't support joining meetings on a self-hosted Jitsi server](https://github.com/vector-im/riot-web/blob/601816862f7d84ac47547891bd53effa73d32957/docs/jitsi.md#mobile-app-support).
|
||||||
|
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
@ -4,13 +4,13 @@ The playbook can install and configure the [matrix-synapse-ldap3](https://github
|
|||||||
|
|
||||||
See that project's documentation to learn what it does and why it might be useful to you.
|
See that project's documentation to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
If you decide that you'd like to let this playbook install it for you, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
If you decide that you'd like to let this playbook install it for you, you need some configuration like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_synapse_ext_password_provider_ldap_enabled: true
|
matrix_synapse_ext_password_provider_ldap_enabled: true
|
||||||
matrix_synapse_ext_password_provider_ldap_uri:
|
matrix_synapse_ext_password_provider_ldap_uri:
|
||||||
- "ldap://ldap-01.example.com:389"
|
- "ldap://ldap-01.mydomain.tld:389"
|
||||||
- "ldap://ldap-02.example.com:389"
|
- "ldap://ldap-02.mydomain.tld:389"
|
||||||
matrix_synapse_ext_password_provider_ldap_start_tls: true
|
matrix_synapse_ext_password_provider_ldap_start_tls: true
|
||||||
matrix_synapse_ext_password_provider_ldap_base: "ou=users,dc=example,dc=com"
|
matrix_synapse_ext_password_provider_ldap_base: "ou=users,dc=example,dc=com"
|
||||||
matrix_synapse_ext_password_provider_ldap_attributes_uid: "uid"
|
matrix_synapse_ext_password_provider_ldap_attributes_uid: "uid"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up ma1sd Identity Server (optional)
|
# Adjusting ma1sd Identity Server configuration (optional)
|
||||||
|
|
||||||
The playbook can configure the [ma1sd](https://github.com/ma1uta/ma1sd) Identity Server for you.
|
The playbook can configure the [ma1sd](https://github.com/ma1uta/ma1sd) Identity Server for you.
|
||||||
|
|
||||||
@ -10,15 +10,14 @@ This server is private by default, potentially at the expense of user discoverab
|
|||||||
|
|
||||||
**Note**: enabling ma1sd, means that the `openid` API endpoints will be exposed on the Matrix Federation port (usually `8448`), even if [federation](configuring-playbook-federation.md) is disabled. It's something to be aware of, especially in terms of firewall whitelisting (make sure port `8448` is accessible).
|
**Note**: enabling ma1sd, means that the `openid` API endpoints will be exposed on the Matrix Federation port (usually `8448`), even if [federation](configuring-playbook-federation.md) is disabled. It's something to be aware of, especially in terms of firewall whitelisting (make sure port `8448` is accessible).
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable ma1sd, use the following additional configuration in your `vars.yml` file:
|
||||||
|
|
||||||
To enable ma1sd, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_ma1sd_enabled: true
|
matrix_ma1sd_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Matrix.org lookup forwarding
|
|
||||||
|
## Matrix.org lookup forwarding
|
||||||
|
|
||||||
To ensure maximum discovery, you can make your identity server also forward lookups to the central matrix.org Identity server (at the cost of potentially leaking all your contacts information).
|
To ensure maximum discovery, you can make your identity server also forward lookups to the central matrix.org Identity server (at the cost of potentially leaking all your contacts information).
|
||||||
|
|
||||||
@ -30,13 +29,12 @@ Enabling matrix.org forwarding can happen with the following configuration:
|
|||||||
matrix_ma1sd_matrixorg_forwarding_enabled: true
|
matrix_ma1sd_matrixorg_forwarding_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Customizing email templates
|
|
||||||
|
|
||||||
If you'd like to change the default email templates used by ma1sd, take a look at the `matrix_ma1sd_threepid_medium_email_custom_` variables (in the `roles/custom/matrix-ma1sd/defaults/main.yml` file.
|
## Customizing email templates
|
||||||
|
|
||||||
## Installing
|
If you'd like to change the default email templates used by ma1sd, take a look at the `matrix_ma1sd_threepid_medium_email_custom_` variables
|
||||||
|
(in the `roles/custom/matrix-ma1sd/defaults/main.yml` file.
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## ma1sd-controlled Registration
|
## ma1sd-controlled Registration
|
||||||
|
|
||||||
@ -46,13 +44,13 @@ To use the [Registration](https://github.com/ma1uta/ma1sd/blob/master/docs/featu
|
|||||||
|
|
||||||
- `matrix_synapse_enable_registration_captcha` - to validate registering users using reCAPTCHA, as described in the [enabling reCAPTCHA](configuring_captcha.md) documentation.
|
- `matrix_synapse_enable_registration_captcha` - to validate registering users using reCAPTCHA, as described in the [enabling reCAPTCHA](configuring_captcha.md) documentation.
|
||||||
|
|
||||||
- `matrix_synapse_registrations_require_3pid` - a list of 3pid types (among `'email'`, `'msisdn'`) required by the Synapse server for registering
|
- `matrix_synapse_registrations_require_3pid` - to control the types of 3pid (`'email'`, `'msisdn'`) required by the Synapse server for registering
|
||||||
|
|
||||||
- variables prefixed with `matrix_ma1sd_container_labels_` (e.g. `matrix_ma1sd_container_labels_matrix_client_3pid_registration_enabled`) - to configure the Traefik reverse-proxy to capture and send registration requests to ma1sd (instead of Synapse), so it can apply its additional functionality
|
- variables prefixed with `matrix_nginx_proxy_proxy_matrix_3pid_registration_` (e.g. `matrix_nginx_proxy_proxy_matrix_3pid_registration_enabled`) - to configure the integrated nginx webserver to send registration requests to ma1sd (instead of Synapse), so it can apply its additional functionality
|
||||||
|
|
||||||
- `matrix_ma1sd_configuration_extension_yaml` - to configure ma1sd as required. See the [Registration feature's docs](https://github.com/ma1uta/ma1sd/blob/master/docs/features/registration.md) for inspiration. Also see the [Additional features](#additional-features) section below to learn more about how to use `matrix_ma1sd_configuration_extension_yaml`.
|
- `matrix_ma1sd_configuration_extension_yaml` - to configure ma1sd as required. See the [Registration feature's docs](https://github.com/ma1uta/ma1sd/blob/master/docs/features/registration.md) for inspiration. Also see the [Additional features](#additional-features) section below to learn more about how to use `matrix_ma1sd_configuration_extension_yaml`.
|
||||||
|
|
||||||
**Note**: For this to work, either the homeserver needs to [federate](configuring-playbook-federation.md) or the `openid` APIs need to exposed on the federation port. When federation is disabled and ma1sd is enabled, we automatically expose the `openid` APIs (only!) on the federation port. Make sure the federation port (usually `https://matrix.example.com:8448`) is whitelisted in your firewall (even if you don't actually use/need federation).
|
**Note**: For this to work, either the homeserver needs to [federate](configuring-playbook-federation.md) or the `openid` APIs need to exposed on the federation port. When federation is disabled and ma1sd is enabled, we automatically expose the `openid` APIs (only!) on the federation port. Make sure the federation port (usually `https://matrix.DOMAIN:8448`) is whitelisted in your firewall (even if you don't actually use/need federation).
|
||||||
|
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
@ -83,9 +81,12 @@ What this playbook configures for your is some bare minimum Identity Server func
|
|||||||
|
|
||||||
A few variables can be toggled in this playbook to alter the ma1sd configuration that gets generated.
|
A few variables can be toggled in this playbook to alter the ma1sd configuration that gets generated.
|
||||||
|
|
||||||
Still, ma1sd can do much more. You can refer to the [ma1sd website](https://github.com/ma1uta/ma1sd) for more details and configuration options.
|
Still, ma1sd can do much more.
|
||||||
|
You can refer to the [ma1sd website](https://github.com/ma1uta/ma1sd) for more details and configuration options.
|
||||||
|
|
||||||
To use a more custom configuration, you can define a `matrix_ma1sd_configuration_extension_yaml` string variable and put your configuration in it. To learn more about how to do this, refer to the information about `matrix_ma1sd_configuration_extension_yaml` in the [default variables file](../roles/custom/matrix-ma1sd/defaults/main.yml) of the ma1sd component.
|
To use a more custom configuration, you can define a `matrix_ma1sd_configuration_extension_yaml` string variable
|
||||||
|
and put your configuration in it.
|
||||||
|
To learn more about how to do this, refer to the information about `matrix_ma1sd_configuration_extension_yaml` in the [default variables file](../roles/custom/matrix-ma1sd/defaults/main.yml) of the ma1sd component.
|
||||||
|
|
||||||
## Example: SMS verification
|
## Example: SMS verification
|
||||||
|
|
||||||
@ -125,7 +126,7 @@ If email address validation emails sent by ma1sd are not reaching you, you shoul
|
|||||||
|
|
||||||
If you'd like additional logging information, temporarily enable verbose logging for ma1sd.
|
If you'd like additional logging information, temporarily enable verbose logging for ma1sd.
|
||||||
|
|
||||||
Example configuration (`inventory/host_vars/matrix.example.com/vars.yml`):
|
Example configuration (`inventory/host_vars/matrix.DOMAIN/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_ma1sd_verbose_logging: true
|
matrix_ma1sd_verbose_logging: true
|
||||||
|
@ -1,461 +0,0 @@
|
|||||||
# Setting up Matrix Authentication Service (optional)
|
|
||||||
|
|
||||||
This playbook can install and configure [Matrix Authentication Service](https://github.com/element-hq/matrix-authentication-service/) (MAS) - a service operating alongside your existing [Synapse](./configuring-playbook-synapse.md) homeserver and providing [better authentication, session management and permissions in Matrix](https://matrix.org/blog/2023/09/better-auth/).
|
|
||||||
|
|
||||||
Matrix Authentication Service is an implementation of [MSC3861: Next-generation auth for Matrix, based on OAuth 2.0/OIDC](https://github.com/matrix-org/matrix-spec-proposals/pull/3861) and still work in progress, tracked at the [areweoidcyet.com](https://areweoidcyet.com/) website.
|
|
||||||
|
|
||||||
**Before going through with starting to use Matrix Authentication Service**, make sure to read:
|
|
||||||
|
|
||||||
- the [Reasons to use Matrix Authentication Service](#reasons-to-use-matrix-authentication-service) section below
|
|
||||||
- the [Expectations](#expectations) section below
|
|
||||||
- the [FAQ section on areweoidcyet.com](https://areweoidcyet.com/#faqs)
|
|
||||||
|
|
||||||
**If you've already been using Synapse** and have user accounts in its database, you can [migrate to Matrix Authentication Service](#migrating-an-existing-synapse-homeserver-to-matrix-authentication-service).
|
|
||||||
|
|
||||||
|
|
||||||
## Reasons to use Matrix Authentication Service
|
|
||||||
|
|
||||||
You may be wondering whether you should make the switch to Matrix Authentication Service (MAS) or keep using your existing authentication flow via Synapse (password-based or [OIDC](./configuring-playbook-synapse.md#synapse--openid-connect-for-single-sign-on)-enabled).
|
|
||||||
|
|
||||||
Matrix Authentication Service is **still an experimental service** and **not a default** for this Ansible playbook.
|
|
||||||
|
|
||||||
The [Expectations](#expectations) section contains a list of what works and what doesn't (**some services don't work with MAS yet**), as well as the **relative irreversability** of the migration process.
|
|
||||||
|
|
||||||
Below, we'll try to **highlight some potential reasons for switching** to Matrix Authentication Service:
|
|
||||||
|
|
||||||
- To use SSO in [Element X](https://element.io/blog/element-x-ignition/). The old [Synapse OIDC](./configuring-playbook-synapse.md#synapse--openid-connect-for-single-sign-on) login flow is only supported in old Element clients and will not be supported in Element X. Element X will only support the new SSO-based login flow provided by MAS, so if you want to use SSO with Element X, you will need to switch to MAS.
|
|
||||||
|
|
||||||
- To help drive adoption of the "Next-generation auth for Matrix" by switching to what's ultimately coming anyway
|
|
||||||
|
|
||||||
- To help discover (and potentially fix) MAS integration issues with this Ansible playbook
|
|
||||||
|
|
||||||
- To help discover (and potentially fix) MAS integration issues with various other Matrix components (bridges, bots, clients, etc.)
|
|
||||||
|
|
||||||
- To reap some of the security benefits that Matrix Authentication Service offers, as outlined in the [Better authentication, session management and permissions in Matrix](https://matrix.org/blog/2023/09/better-auth/) article.
|
|
||||||
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
- ⚠ the [Synapse](configuring-playbook-synapse.md) homeserver implementation (which is the default for this playbook). Other homeserver implementations ([Dendrite](./configuring-playbook-dendrite.md), [Conduit](./configuring-playbook-conduit.md), etc.) do not support integrating wtih Matrix Authentication Service yet.
|
|
||||||
|
|
||||||
- ⚠ **email sending** configured (see [Adjusting email-sending settings](./configuring-playbook-email.md)), because **Matrix Authentication Service [still insists](https://github.com/element-hq/matrix-authentication-service/issues/1505) on having a verified email address for each user** going through the new SSO-based login flow. It's also possible to [work around email deliverability issues](#working-around-email-deliverability-issues) if your email configuration is not working.
|
|
||||||
|
|
||||||
- ❌ **disabling all password providers** for Synapse (things like [shared-secret-auth](./configuring-playbook-shared-secret-auth.md), [rest-auth](./configuring-playbook-rest-auth.md), [LDAP auth](./configuring-playbook-ldap-auth.md), etc.) More details about this are available in the [Expectations](#expectations) section below.
|
|
||||||
|
|
||||||
|
|
||||||
## Expectations
|
|
||||||
|
|
||||||
This section details what you can expect when switching to the Matrix Authentication Service (MAS).
|
|
||||||
|
|
||||||
- ❌ **Synapse password providers will need to be disabled**. You can no longer use [shared-secret-auth](./configuring-playbook-shared-secret-auth.md), [rest-auth](./configuring-playbook-rest-auth.md), [LDAP auth](./configuring-playbook-ldap-auth.md), etc. When the authentication flow is handled by MAS (not by Synapse anymore), it doesn't make sense to extend the Synapse authentication flow with additional modules. Many bridges used to rely on shared-secret-auth for doing double-puppeting (impersonating other users), but most (at least the mautrix bridges) nowadays use [Appservice Double Puppet](./configuring-playbook-appservice-double-puppet.md) as a better alternative. Older/maintained bridges may still rely on shared-secret-auth, as do other services like [matrix-corporal](./configuring-playbook-matrix-corporal.md).
|
|
||||||
|
|
||||||
- ❌ Certain **tools like [synapse-admin](./configuring-playbook-synapse-admin.md) do not have full compatibility with MAS yet**. synapse-admin already supports [login with access token](https://github.com/etkecc/synapse-admin/pull/58), browsing users (which Synapse will internally fetch from MAS) and updating user avatars. However, editing users (passwords, etc.) now needs to happen directly against MAS using the [MAS Admin API](https://element-hq.github.io/matrix-authentication-service/api/index.html), which synapse-admin cannot interact with yet.
|
|
||||||
|
|
||||||
- ❌ **Some services experience issues when authenticating via MAS**:
|
|
||||||
|
|
||||||
- [Postmoogle](./configuring-playbook-bridge-postmoogle.md) works the first time around, but it consistently fails after restarting:
|
|
||||||
|
|
||||||
> cannot initialize matrix bot error="olm account is marked as shared, keys seem to have disappeared from the server"
|
|
||||||
|
|
||||||
- [matrix-reminder-bot](./configuring-playbook-bot-matrix-reminder-bot.md) fails to start (see [element-hq/matrix-authentication-service#3439](https://github.com/element-hq/matrix-authentication-service/issues/3439))
|
|
||||||
- Other services may be similarly affected. This list is not exhaustive.
|
|
||||||
|
|
||||||
- ❌ **Encrypted appservices** do not work yet (related to [MSC4190](https://github.com/matrix-org/matrix-spec-proposals/pull/4190) and [PR 17705 for Synapse](https://github.com/element-hq/synapse/pull/17705)), so all bridges/bots that rely on encryption will fail to start (see [this issue](https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/3658) for Hookshot). You can use these bridges/bots only if you **keep end-to-bridge encryption disabled** (which is the default setting).
|
|
||||||
|
|
||||||
- ⚠ **You will need to have email sending configured** (see [Adjusting email-sending settings](./configuring-playbook-email.md)), because **Matrix Authentication Service [still insists](https://github.com/element-hq/matrix-authentication-service/issues/1505) on having a verified email address for each user** going through the new SSO-based login flow. It's also possible to [work around email deliverability issues](#working-around-email-deliverability-issues) if your email configuration is not working.
|
|
||||||
|
|
||||||
- ⚠ [Migrating an existing Synapse homeserver to Matrix Authentication Service](#migrating-an-existing-synapse-homeserver-to-matrix-authentication-service) is **possible**, but requires **some playbook-assisted manual work**. Migration is **reversible with no or minor issues if done quickly enough**, but as users start logging in (creating new login sessions) via the new MAS setup, disabling MAS and reverting back to the Synapse user database will cause these new sessions to break.
|
|
||||||
|
|
||||||
- ⚠ [Migrating an existing Synapse homeserver to Matrix Authentication Service](#migrating-an-existing-synapse-homeserver-to-matrix-authentication-service) does not currently seem to preserve the "admin" flag for users (as found in the Synapse database). All users are imported as non-admin - see [element-hq/matrix-authentication-service#3440](https://github.com/element-hq/matrix-authentication-service/issues/3440). You may need update the Matrix Authentication Service's database manually and adjust the `can_request_admin` column in the `users` table to `true` for users that need to be administrators (e.g. `UPDATE users SET can_request_admin = true WHERE username = 'someone';`)
|
|
||||||
|
|
||||||
- ⚠ Delegating user authentication to MAS causes **your Synapse server to be completely dependant on one more service** for its operations. MAS is quick & lightweight and should be stable enough already, but this is something to keep in mind when making the switch.
|
|
||||||
|
|
||||||
- ⚠ If you've got [OIDC configured in Synapse](./configuring-playbook-synapse.md#synapse--openid-connect-for-single-sign-on), you will need to migrate your OIDC configuration to MAS by adding an [Upstream OAuth2 configuration](#upstream-oauth2-configuration).
|
|
||||||
|
|
||||||
- ⚠ A [compatibility layer](https://element-hq.github.io/matrix-authentication-service/setup/homeserver.html#set-up-the-compatibility-layer) is installed - all `/_matrix/client/*/login` (etc.) requests will be routed to MAS instead of going to the homeserver. This is done both publicly (e.g. `https://matrix.example.com/_matrix/client/*/login`) and on the internal Traefik entrypoint (e.g. `https://matrix-traefik:8008/_matrix/client/*/login`) which helps addon services reach the homeserver's Client-Server API. You typically don't need to do anything to make this work, but it's good to be aware of it, especially if you have a [custom webserver setup](./configuring-playbook-own-webserver.md).
|
|
||||||
|
|
||||||
- ✅ Your **existing login sessions will continue to work** (you won't get logged out). Migration will require a bit of manual work and minutes of downtime, but it's not too bad.
|
|
||||||
|
|
||||||
- ✅ Various clients ([Cinny](./configuring-playbook-client-cinny.md), [Element-web](./configuring-playbook-client-element.md), Element X, FluffyChat) will be able to use the **new SSO-based login flow** provided by Matrix Authentication Service
|
|
||||||
|
|
||||||
- ✅ The **old login flow** (called `m.login.password`) **will still continue to work**, so clients (old Element, etc.) and bridges/bots that don't support the new OIDC-based login flow will still work. Going through the old login flow does not require users to have a verified email address, as [is the case](https://github.com/element-hq/matrix-authentication-service/issues/1505) for the new SSO-based login flow.
|
|
||||||
|
|
||||||
- ✅ [Registering users](./registering-users.md) via **the playbook's `register-user` tag remains unchanged**. The playbook automatically does the right thing regardless of homeserver implementation (Synapse, Dendrite, etc.) and whether MAS is enabled or not. When MAS is enabled, the playbook will forward user-registration requests to MAS. Registering users via the command-line is no longer done via the `/matrix/synapse/bin/register` script, but via `/matrix/matrix-authentication-service/bin/register-user`.
|
|
||||||
|
|
||||||
- ✅ Users that are prepared by the playbook (for bots, bridges, etc.) will continue to be registered automatically as expected. The playbook automatically does the right thing regardless of homeserver implementation (Synapse, Dendrite, etc.) and whether MAS is enabled or not. When MAS is enabled, the playbook will forward user-registration requests to MAS.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Installation flows
|
|
||||||
|
|
||||||
### New homeserver
|
|
||||||
|
|
||||||
For new homeservers (which don't have any users in their Synapse database yet), follow the [Adjusting the playbook configuration](#adjusting-the-playbook-configuration) instructions and then proceed with [Installing](#installing).
|
|
||||||
|
|
||||||
### Existing homeserver
|
|
||||||
|
|
||||||
Other homeserver implementations ([Dendrite](./configuring-playbook-dendrite.md), [Conduit](./configuring-playbook-conduit.md), etc.) do not support integrating wtih Matrix Authentication Service yet.
|
|
||||||
|
|
||||||
For existing Synapse homeservers:
|
|
||||||
|
|
||||||
- when following the [Adjusting the playbook configuration](#adjusting-the-playbook-configuration) instructions, make sure to **disable the integration between Synapse and MAS** by **uncommenting** the `matrix_authentication_service_migration_in_progress: true` line as described in the [Marking an existing homeserver for migration](#marking-an-existing-homeserver-for-migration) section below.
|
|
||||||
|
|
||||||
- then follow the [Migrating an existing Synapse homeserver to Matrix Authentication Service](#migrating-an-existing-synapse-homeserver-to-matrix-authentication-service) instructions to perform the installation and migration
|
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable Matrix Authentication Service, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_authentication_service_enabled: true
|
|
||||||
|
|
||||||
# Generate this encryption secret with: `openssl rand -hex 32`
|
|
||||||
matrix_authentication_service_config_secrets_encryption: ''
|
|
||||||
|
|
||||||
# When migrating an existing homeserver to Matrix Authentication Service, uncomment the line below.
|
|
||||||
# Learn more about the migration process in the "Marking an existing homeserver for migration" section below.
|
|
||||||
# For brand-new installations which start directly on MAS, this line can be removed.
|
|
||||||
# matrix_authentication_service_migration_in_progress: true
|
|
||||||
```
|
|
||||||
|
|
||||||
In the sub-sections that follow, we'll cover some additional configuration options that you may wish to adjust.
|
|
||||||
|
|
||||||
There are many other configuration options available. Consult the [`defaults/main.yml` file](../roles/custom/matrix-authentication-service/defaults/main.yml) in the [matrix-authentication-service role](../roles/custom/matrix-authentication-service/) to discover them.
|
|
||||||
|
|
||||||
|
|
||||||
### Adjusting the Matrix Authentication Service URL
|
|
||||||
|
|
||||||
By default, this playbook installs the Matrix Authentication Service on the `matrix.` subdomain, at the `/auth` path (https://matrix.example.com/auth). This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_authentication_service_hostname` and `matrix_authentication_service_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix
|
|
||||||
matrix_authentication_service_hostname: auth.example.com
|
|
||||||
matrix_authentication_service_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
### Marking an existing homeserver for migration
|
|
||||||
|
|
||||||
The [configuration above](#adjusting-the-playbook-configuration) instructs existing users wishing to migrate to add `matrix_authentication_service_migration_in_progress: true` to their configuration.
|
|
||||||
|
|
||||||
This is done temporarily. The migration steps are described in more detail in the [Migrating an existing Synapse homeserver to Matrix Authentication Service](#migrating-an-existing-synapse-homeserver-to-matrix-authentication-service) section below.
|
|
||||||
|
|
||||||
|
|
||||||
### Upstream OAuth2 configuration
|
|
||||||
|
|
||||||
To make Matrix Authentication Service delegate to an existing upstream OAuth 2.0/OIDC provider, you can use its [`upstream_oauth2.providers` setting](https://element-hq.github.io/matrix-authentication-service/reference/configuration.html#upstream_oauth2providers).
|
|
||||||
|
|
||||||
The playbook exposes a `matrix_authentication_service_config_upstream_oauth2_providers` variable for controlling this setting.
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Click to expand the example configuration:</summary>
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_authentication_service_config_upstream_oauth2_providers:
|
|
||||||
- # A unique identifier for the provider
|
|
||||||
# Must be a valid ULID
|
|
||||||
id: 01HFVBY12TMNTYTBV8W921M5FA
|
|
||||||
# The issuer URL, which will be used to discover the provider's configuration.
|
|
||||||
# If discovery is enabled, this *must* exactly match the `issuer` field
|
|
||||||
# advertised in `<issuer>/.well-known/openid-configuration`.
|
|
||||||
issuer: https://example.com/
|
|
||||||
# A human-readable name for the provider,
|
|
||||||
# which will be displayed on the login page
|
|
||||||
#human_name: Example
|
|
||||||
# A brand identifier for the provider, which will be used to display a logo
|
|
||||||
# on the login page. Values supported by the default template are:
|
|
||||||
# - `apple`
|
|
||||||
# - `google`
|
|
||||||
# - `facebook`
|
|
||||||
# - `github`
|
|
||||||
# - `gitlab`
|
|
||||||
# - `twitter`
|
|
||||||
#brand_name: google
|
|
||||||
# The client ID to use to authenticate to the provider
|
|
||||||
client_id: mas-fb3f0c09c4c23de4
|
|
||||||
# The client secret to use to authenticate to the provider
|
|
||||||
# This is only used by the `client_secret_post`, `client_secret_basic`
|
|
||||||
# and `client_secret_jwk` authentication methods
|
|
||||||
#client_secret: f4f6bb68a0269264877e9cb23b1856ab
|
|
||||||
# Which authentication method to use to authenticate to the provider
|
|
||||||
# Supported methods are:
|
|
||||||
# - `none`
|
|
||||||
# - `client_secret_basic`
|
|
||||||
# - `client_secret_post`
|
|
||||||
# - `client_secret_jwt`
|
|
||||||
# - `private_key_jwt` (using the keys defined in the `secrets.keys` section)
|
|
||||||
token_endpoint_auth_method: client_secret_post
|
|
||||||
# Which signing algorithm to use to sign the authentication request when using
|
|
||||||
# the `private_key_jwt` or the `client_secret_jwt` authentication methods
|
|
||||||
#token_endpoint_auth_signing_alg: RS256
|
|
||||||
# The scopes to request from the provider
|
|
||||||
# In most cases, it should always include `openid` scope
|
|
||||||
scope: "openid email profile"
|
|
||||||
# How the provider configuration and endpoints should be discovered
|
|
||||||
# Possible values are:
|
|
||||||
# - `oidc`: discover the provider through OIDC discovery,
|
|
||||||
# with strict metadata validation (default)
|
|
||||||
# - `insecure`: discover through OIDC discovery, but skip metadata validation
|
|
||||||
# - `disabled`: don't discover the provider and use the endpoints below
|
|
||||||
#discovery_mode: oidc
|
|
||||||
# Whether PKCE should be used during the authorization code flow.
|
|
||||||
# Possible values are:
|
|
||||||
# - `auto`: use PKCE if the provider supports it (default)
|
|
||||||
# Determined through discovery, and disabled if discovery is disabled
|
|
||||||
# - `always`: always use PKCE (with the S256 method)
|
|
||||||
# - `never`: never use PKCE
|
|
||||||
#pkce_method: auto
|
|
||||||
# The provider authorization endpoint
|
|
||||||
# This takes precedence over the discovery mechanism
|
|
||||||
#authorization_endpoint: https://example.com/oauth2/authorize
|
|
||||||
# The provider token endpoint
|
|
||||||
# This takes precedence over the discovery mechanism
|
|
||||||
#token_endpoint: https://example.com/oauth2/token
|
|
||||||
# The provider JWKS URI
|
|
||||||
# This takes precedence over the discovery mechanism
|
|
||||||
#jwks_uri: https://example.com/oauth2/keys
|
|
||||||
# How user attributes should be mapped
|
|
||||||
#
|
|
||||||
# Most of those attributes have two main properties:
|
|
||||||
# - `action`: what to do with the attribute. Possible values are:
|
|
||||||
# - `ignore`: ignore the attribute
|
|
||||||
# - `suggest`: suggest the attribute to the user, but let them opt out
|
|
||||||
# - `force`: always import the attribute, and don't fail if it's missing
|
|
||||||
# - `require`: always import the attribute, and fail if it's missing
|
|
||||||
# - `template`: a Jinja2 template used to generate the value. In this template,
|
|
||||||
# the `user` variable is available, which contains the user's attributes
|
|
||||||
# retrieved from the `id_token` given by the upstream provider.
|
|
||||||
#
|
|
||||||
# Each attribute has a default template which follows the well-known OIDC claims.
|
|
||||||
#
|
|
||||||
claims_imports:
|
|
||||||
# The subject is an internal identifier used to link the
|
|
||||||
# user's provider identity to local accounts.
|
|
||||||
# By default it uses the `sub` claim as per the OIDC spec,
|
|
||||||
# which should fit most use cases.
|
|
||||||
subject:
|
|
||||||
#template: "{% raw %}{{ user.sub }}{% endraw %}"
|
|
||||||
# The localpart is the local part of the user's Matrix ID.
|
|
||||||
# For example, on the `example.com` server, if the localpart is `alice`,
|
|
||||||
# the user's Matrix ID will be `@alice:example.com`.
|
|
||||||
localpart:
|
|
||||||
#action: force
|
|
||||||
#template: "{% raw %}{{ user.preferred_username }}{% endraw %}"
|
|
||||||
# The display name is the user's display name.
|
|
||||||
displayname:
|
|
||||||
#action: suggest
|
|
||||||
#template: "{% raw %}{{ user.name }}{% endraw %}"
|
|
||||||
# An email address to import.
|
|
||||||
email:
|
|
||||||
#action: suggest
|
|
||||||
#template: "{% raw %}{{ user.email }}{% endraw %}"
|
|
||||||
# Whether the email address must be marked as verified.
|
|
||||||
# Possible values are:
|
|
||||||
# - `import`: mark the email address as verified if the upstream provider
|
|
||||||
# has marked it as verified, using the `email_verified` claim.
|
|
||||||
# This is the default.
|
|
||||||
# - `always`: mark the email address as verified
|
|
||||||
# - `never`: mark the email address as not verified
|
|
||||||
#set_email_verification: import
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
💡 Refer to the [`upstream_oauth2.providers` setting](https://element-hq.github.io/matrix-authentication-service/reference/configuration.html#upstream_oauth2providers) for the most up-to-date schema and example for providers. The value shown above here may be out of date.
|
|
||||||
|
|
||||||
⚠ The syntax for existing [OIDC providers configured in Synapse](./configuring-playbook-synapse.md#synapse--openid-connect-for-single-sign-on) is slightly different, so you will need to adjust your configuration when switching from Synapse OIDC to MAS upstream OAuth2.
|
|
||||||
|
|
||||||
⚠ When [migrating an existing homeserver](#migrating-an-existing-synapse-homeserver-to-matrix-authentication-service) which contains OIDC-sourced users, you will need to:
|
|
||||||
|
|
||||||
- [Configure upstream OIDC provider mapping for syn2mas](#configuring-upstream-oidc-provider-mapping-for-syn2mas)
|
|
||||||
- go through the [migrating an existing homeserver](#migrating-an-existing-synapse-homeserver-to-matrix-authentication-service) process
|
|
||||||
- remove all Synapse OIDC-related configuration (`matrix_synapse_oidc_*`) to prevent it being in conflict with the MAS OIDC configuration
|
|
||||||
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the Matrix Authentication Service domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
Now that you've [adjusted the playbook configuration](#adjusting-the-playbook-configuration) and [your DNS records](#adjusting-dns-records), you can run the [installation](installing.md) command: `just install-all`
|
|
||||||
|
|
||||||
If you're in the process of migrating an existing Synapse homeserver to MAS, you should now follow the rest of the steps in the [Migrating an existing Synapse homeserver to Matrix Authentication Service](#migrating-an-existing-synapse-homeserver-to-matrix-authentication-service) guide.
|
|
||||||
|
|
||||||
💡 After installation, you should [verify that Matrix Authentication Service is installed correctly](#verify-that-matrix-authentication-service-is-installed-correctly).
|
|
||||||
|
|
||||||
|
|
||||||
## Migrating an existing Synapse homeserver to Matrix Authentication Service
|
|
||||||
|
|
||||||
Our migration guide is loosely based on the upstream [Migrating an existing homeserver](https://element-hq.github.io/matrix-authentication-service/setup/migration.html) guide.
|
|
||||||
|
|
||||||
Migration is done via a tool called `syn2mas`, which the playbook could run for you (in a container).
|
|
||||||
|
|
||||||
The installation + migration steps are like this:
|
|
||||||
|
|
||||||
1. [Adjust your configuration](#adjusting-the-playbook-configuration) to **disable the integration between the homeserver and MAS**. This is done by **uncommenting** the `matrix_authentication_service_migration_in_progress: true` line.
|
|
||||||
|
|
||||||
2. Perform the initial [installation](#installing). At this point:
|
|
||||||
|
|
||||||
- Matrix Authentication Service will be installed. Its database will be empty, so it cannot validate existing access tokens or authentication users yet.
|
|
||||||
|
|
||||||
- The homeserver will still continue to use its local database for validating existing access tokens.
|
|
||||||
|
|
||||||
- Various [compatibility layer URLs](https://element-hq.github.io/matrix-authentication-service/setup/homeserver.html#set-up-the-compatibility-layer) are not yet installed. New login sessions will still be forwarded to the homeserver, which is capable of completing them.
|
|
||||||
|
|
||||||
- The `matrix-user-creator` role would be suppressed, so that it doesn't automatically attempt to create users (for bots, etc.) in the MAS database. These user accounts likely already exist in Synapse's user database and could be migrated over (via syn2mas, as per the steps below), so creating them in the MAS database would have been unnecessary and potentially problematic (conflicts during the syn2mas migration).
|
|
||||||
|
|
||||||
3. Consider taking a full [backup of your Postgres database](./maintenance-postgres.md#backing-up-postgresql). This is done just in case. The **syn2mas migration tool does not delete any data**, so it should be possible to revert to your previous setup by merely disabling MAS and re-running the playbook (no need to restore a Postgres backup). However, do note that as users start logging in (creating new login sessions) via the new MAS setup, disabling MAS and reverting back to the Synapse user database will cause these new sessions to break.
|
|
||||||
|
|
||||||
4. [Migrate your data from Synapse to Matrix Authentication Service using syn2mas](#migrate-your-data-from-synapse-to-matrix-authentication-service-using-syn2mas)
|
|
||||||
|
|
||||||
5. [Adjust your configuration](#adjusting-the-playbook-configuration) again, to:
|
|
||||||
|
|
||||||
- remove the `matrix_authentication_service_migration_in_progress: false` line
|
|
||||||
|
|
||||||
- if you had been using [OIDC providers configured in Synapse](./configuring-playbook-synapse.md#synapse--openid-connect-for-single-sign-on), remove all Synapse OIDC-related configuration (`matrix_synapse_oidc_*`) to prevent it being in conflict with the MAS OIDC configuration
|
|
||||||
|
|
||||||
5. Perform the [installation](#installing) again. At this point:
|
|
||||||
|
|
||||||
- The homeserver will start delegating authentication to MAS.
|
|
||||||
|
|
||||||
- The compatibility layer URLs will be installed. New login sessions will be completed by MAS.
|
|
||||||
|
|
||||||
6. [Verify that Matrix Authentication Service is installed correctly](#verify-that-matrix-authentication-service-is-installed-correctly)
|
|
||||||
|
|
||||||
|
|
||||||
### Migrate your data from Synapse to Matrix Authentication Service using syn2mas
|
|
||||||
|
|
||||||
We **don't** ask you to [run the `syn2mas` migration advisor command](https://element-hq.github.io/matrix-authentication-service/setup/migration.html#run-the-migration-advisor), because it only gives you the green light if your Synapse configuration (`homeserver.yaml`) is configured in a way that's compatible with MAS (delegating authentication to MAS; disabling Synapse's password config; etc.). Until we migrate your data with the `syn2mas` tool, we intentionally avoid doing these changes to allow existing user sessions to work.
|
|
||||||
|
|
||||||
You can invoke the `syn2mas` tool via the playbook by running the playbook's `matrix-authentication-service-syn2mas` tag. We recommend first doing a [dry-run](#performing-a-syn2mas-dry-run) and then a [real migration](#performing-a-real-syn2mas-migration).
|
|
||||||
|
|
||||||
#### Configuring syn2mas
|
|
||||||
|
|
||||||
If you're using [OIDC with Synapse](./configuring-playbook-synapse.md#synapse--openid-connect-for-single-sign-on), you will need to [Configuring upstream OIDC provider mapping for syn2mas](#configuring-upstream-oidc-provider-mapping-for-syn2mas).
|
|
||||||
|
|
||||||
If you only have local (non-OIDC) users in your Synapse database, you can likely run `syn2mas` as-is (without doing additional configuration changes).
|
|
||||||
|
|
||||||
When you're done with potentially configuring `syn2mas`, proceed to doing a [dry-run](#performing-a-syn2mas-dry-run) and then a [real migration](#performing-a-real-syn2mas-migration).
|
|
||||||
|
|
||||||
##### Configuring upstream OIDC provider mapping for syn2mas
|
|
||||||
|
|
||||||
If you have existing OIDC users in your Synapse user database (which will be the case if when using [OIDC with Synapse](./configuring-playbook-synapse.md#synapse--openid-connect-for-single-sign-on)), you may need to pass an additional `--upstreamProviderMapping` argument to the `syn2mas` tool to tell it which provider (on the Synapse side) maps to which other provider on the MAS side.
|
|
||||||
|
|
||||||
If you don't do this, `syn2mas` would report errors like this one:
|
|
||||||
|
|
||||||
> [FATAL] migrate - [Failed to import external id 4264b0f0-4f11-4ddd-aedb-b500e4d07c25 with oidc-keycloak for user @user:example.com: Error: Unknown upstream provider oidc-keycloak]
|
|
||||||
|
|
||||||
Below is an example situation and a guide for how to solve it.
|
|
||||||
|
|
||||||
If in `matrix_synapse_oidc_providers` your provider `idp_id` is (was) named `keycloak`, in the Synapse database users would be associated with the `oidc-keycloak` provider (note the `oidc-` prefix that was added automatically by Synapse to your `idp_id` value).
|
|
||||||
|
|
||||||
The same OIDC provider may have an `id` of `01HFVBY12TMNTYTBV8W921M5FA` on the MAS side, as defined in `matrix_authentication_service_config_upstream_oauth2_providers` (see the [Upstream OAuth2 configuration](#upstream-oauth2-configuration) section above).
|
|
||||||
|
|
||||||
To tell `syn2mas` how the Synapse-configured OIDC provider maps to the new MAS-configured OIDC provider, add this additional configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
# Adjust the mapping below to match your provider ids on the Synapse side and the MAS side.
|
|
||||||
# Don't forget that Synapse automatically adds an `oidc-` prefix to provider ids defined in its configuration.
|
|
||||||
matrix_authentication_service_syn2mas_process_extra_arguments:
|
|
||||||
- "--upstreamProviderMapping oidc-keycloak:01HFVBY12TMNTYTBV8W921M5FA"
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Performing a syn2mas dry-run
|
|
||||||
|
|
||||||
Having [configured syn2mas](#configuring-syn2mas), we recommend doing a [dry-run](https://en.wikipedia.org/wiki/Dry_run_(testing)) first to verify that everything will work out as expected.
|
|
||||||
|
|
||||||
A dry-run would not cause downtime, because it avoids stopping Synapse.
|
|
||||||
|
|
||||||
To perform a dry-run, run:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
just run-tags matrix-authentication-service-syn2mas -e matrix_authentication_service_syn2mas_dry_run=true
|
|
||||||
```
|
|
||||||
|
|
||||||
Observe the command output (especially the last line of the the syn2mas output). If you are confident that the migration will work out as expected, you can proceed with a [real migration](#performing-a-real-syn2mas-migration).
|
|
||||||
|
|
||||||
#### Performing a real syn2mas migration
|
|
||||||
|
|
||||||
Before performing a real migration make sure:
|
|
||||||
|
|
||||||
- you've familiarized yourself with the [expectations](#expectations)
|
|
||||||
|
|
||||||
- you've performed a Postgres backup, just in case
|
|
||||||
|
|
||||||
- you're aware of the irreversibility of the migration process without disruption after users have created new login sessions via the new MAS setup
|
|
||||||
|
|
||||||
- you've [configured syn2mas](#configuring-syn2mas), especially if you've used [OIDC with Synapse](./configuring-playbook-synapse.md#synapse--openid-connect-for-single-sign-on)
|
|
||||||
|
|
||||||
- you've performed a [syn2mas dry-run](#performing-a-syn2mas-dry-run) and don't see any issues in its output
|
|
||||||
|
|
||||||
To perform a real migration, run the `matrix-authentication-service-syn2mas` tag **without** the `matrix_authentication_service_syn2mas_dry_run` variable:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
just run-tags matrix-authentication-service-syn2mas
|
|
||||||
```
|
|
||||||
|
|
||||||
Having performed a `syn2mas` migration once, trying to do it again will report errors for users that were already migrated (e.g. "Error: Unknown upstream provider oauth-delegated").
|
|
||||||
|
|
||||||
|
|
||||||
## Verify that Matrix Authentication Service is installed correctly
|
|
||||||
|
|
||||||
After [installation](#installing), run the `doctor` subcommand of the [`mas-cli` command-line tool](https://element-hq.github.io/matrix-authentication-service/reference/cli/index.html) to verify that MAS is installed correctly.
|
|
||||||
|
|
||||||
You can do it:
|
|
||||||
|
|
||||||
- either via the Ansible playbook's `matrix-authentication-service-mas-cli-doctor` tag: `just run-tags matrix-authentication-service-mas-cli-doctor`
|
|
||||||
|
|
||||||
- or by running the `mas-cli` script on the server (which invokes the `mas-cli` tool inside a container): `/matrix/matrix-authentication-service/bin/mas-cli doctor`
|
|
||||||
|
|
||||||
If successful, you should see some output that looks like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
💡 Running diagnostics, make sure that both MAS and Synapse are running, and that MAS is using the same configuration files as this tool.
|
|
||||||
✅ Matrix client well-known at "https://example.com/.well-known/matrix/client" is valid
|
|
||||||
✅ Homeserver is reachable at "http://matrix-synapse:8008/_matrix/client/versions"
|
|
||||||
✅ Homeserver at "http://matrix-synapse:8008/_matrix/client/v3/account/whoami" is reachable, and it correctly rejected an invalid token.
|
|
||||||
✅ The Synapse admin API is reachable at "http://matrix-synapse:8008/_synapse/admin/v1/server_version".
|
|
||||||
✅ The Synapse admin API is reachable with authentication at "http://matrix-synapse:8008/_synapse/admin/v1/background_updates/status".
|
|
||||||
✅ The legacy login API at "https://matrix.example.com/_matrix/client/v3/login" is reachable and is handled by MAS.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Management
|
|
||||||
|
|
||||||
You can use the [`mas-cli` command-line tool](https://element-hq.github.io/matrix-authentication-service/reference/cli/index.html) (exposed via the `/matrix/matrix-authentication-service/bin/mas-cli` script) to perform administrative tasks against MAS.
|
|
||||||
|
|
||||||
This documentation page already mentions:
|
|
||||||
|
|
||||||
- the `mas-cli doctor` sub-command in the [Verify that Matrix Authentication Service is installed correctly](#verify-that-matrix-authentication-service-is-installed-correctly) section, which you can run via the CLI and via the Ansible playbook's `matrix-authentication-service-mas-cli-doctor` tag
|
|
||||||
|
|
||||||
- the `mas-cli manage register-user` sub-command in the [Registering users](./registering-users.md) documentation
|
|
||||||
|
|
||||||
There are other sub-commands available. Run `/matrix/matrix-authentication-service/bin/mas-cli` to get an overview.
|
|
||||||
|
|
||||||
|
|
||||||
## User registration
|
|
||||||
|
|
||||||
After Matrix Authentication Service is [installed](#installing), users need to be managed there (unless you're managing them in an [upstream OAuth2 provider](#upstream-oauth2-configuration)).
|
|
||||||
|
|
||||||
You can register users new users as described in the [Registering users](./registering-users.md) documentation (via `mas-cli manage register-user` or the Ansible playbook's `register-user` tag).
|
|
||||||
|
|
||||||
|
|
||||||
## Working around email deliverability issues
|
|
||||||
|
|
||||||
Because Matrix Authentication Service [still insists](https://github.com/element-hq/matrix-authentication-service/issues/1505) on having a verified email address for each user, you may need to work around email deliverability issues if [your email-sending configuration](./configuring-playbook-email.md) is not working.
|
|
||||||
|
|
||||||
Matrix Authentication Service attempts to verify email addresses by sending a verification email to the address specified by the user whenever they log in to an account without a verified email address.
|
|
||||||
|
|
||||||
If email delivery is not working, **you can retrieve the email configuration code from the Matrix Authentication Service's logs** (`journalctl -fu matrix-authentication-service`).
|
|
||||||
|
|
||||||
Alternatively, you can use the [`mas-cli` management tool](#management) to manually verify email addresses for users. Example: `/matrix/matrix-authentication-service/bin/mas-cli manage verify-email some.username email@example.com`
|
|
@ -8,16 +8,17 @@
|
|||||||
|
|
||||||
The playbook can install and configure [matrix-corporal](https://github.com/devture/matrix-corporal) for you.
|
The playbook can install and configure [matrix-corporal](https://github.com/devture/matrix-corporal) for you.
|
||||||
|
|
||||||
In short, it's a sort of automation and firewalling service, which is helpful if you're instaling Matrix services in a controlled corporate environment. See that project's documentation to learn what it does and why it might be useful to you.
|
In short, it's a sort of automation and firewalling service, which is helpful if you're instaling Matrix services in a controlled corporate environment.
|
||||||
|
See that project's documentation to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
If you decide that you'd like to let this playbook install it for you, you'd need to also:
|
If you decide that you'd like to let this playbook install it for you, you'd need to also:
|
||||||
- (required) [set up the Shared Secret Auth password provider module](configuring-playbook-shared-secret-auth.md)
|
- (required) [set up the Shared Secret Auth password provider module](configuring-playbook-shared-secret-auth.md)
|
||||||
- (optional, but encouraged) [set up the REST authentication password provider module](configuring-playbook-rest-auth.md)
|
- (optional, but encouraged) [set up the REST authentication password provider module](configuring-playbook-rest-auth.md)
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Playbook configuration
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
You would then need some configuration like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# The Shared Secret Auth password provider module is required for Corporal to work.
|
# The Shared Secret Auth password provider module is required for Corporal to work.
|
||||||
@ -51,7 +52,7 @@ matrix_corporal_policy_provider_config: |
|
|||||||
matrix_corporal_http_api_enabled: true
|
matrix_corporal_http_api_enabled: true
|
||||||
matrix_corporal_http_api_auth_token: "AUTH_TOKEN_HERE"
|
matrix_corporal_http_api_auth_token: "AUTH_TOKEN_HERE"
|
||||||
|
|
||||||
# If you need to change matrix-corporal's user ID from the default (matrix-corporal).
|
# If you need to change matrix-corporal's user id from the default (matrix-corporal).
|
||||||
# In any case, you need to make sure this Matrix user is created on your server.
|
# In any case, you need to make sure this Matrix user is created on your server.
|
||||||
matrix_corporal_corporal_user_id_local_part: "matrix-corporal"
|
matrix_corporal_corporal_user_id_local_part: "matrix-corporal"
|
||||||
|
|
||||||
@ -70,9 +71,9 @@ matrix_synapse_rc_login:
|
|||||||
burst_count: 3
|
burst_count: 3
|
||||||
```
|
```
|
||||||
|
|
||||||
Matrix Corporal operates with a specific Matrix user on your server. By default, it's `matrix-corporal` (controllable by the `matrix_corporal_reconciliation_user_id_local_part` setting, see above).
|
Matrix Corporal operates with a specific Matrix user on your server.
|
||||||
|
By default, it's `matrix-corporal` (controllable by the `matrix_corporal_reconciliation_user_id_local_part` setting, see above).
|
||||||
No matter what Matrix user ID you configure to run it with, make sure that:
|
No matter what Matrix user id you configure to run it with, make sure that:
|
||||||
|
|
||||||
- the Matrix Corporal user is created by [registering it](registering-users.md) **with administrator privileges**. Use a password you remember, as you'll need to log in from time to time to create or join rooms
|
- the Matrix Corporal user is created by [registering it](registering-users.md) **with administrator privileges**. Use a password you remember, as you'll need to log in from time to time to create or join rooms
|
||||||
|
|
||||||
@ -114,9 +115,7 @@ aux_file_definitions:
|
|||||||
|
|
||||||
To learn more about what the policy configuration, see the matrix-corporal documentation on [policy](https://github.com/devture/matrix-corporal/blob/master/docs/policy.md).
|
To learn more about what the policy configuration, see the matrix-corporal documentation on [policy](https://github.com/devture/matrix-corporal/blob/master/docs/policy.md).
|
||||||
|
|
||||||
## Installing
|
Each time you update the policy in your `vars.yml` file, you'd need to re-run the playbook and restart matrix-corporal (`--tags=setup-all,start` or `--tags=setup-aux-files,setup-corporal,start`).
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command (`--tags=setup-all,start` or `--tags=setup-aux-files,setup-corporal,start`).
|
|
||||||
|
|
||||||
|
|
||||||
## Matrix Corporal files
|
## Matrix Corporal files
|
||||||
|
@ -4,11 +4,12 @@ The playbook can install and configure [matrix-ldap-registration-proxy](https://
|
|||||||
|
|
||||||
This proxy handles Matrix registration requests and forwards them to LDAP.
|
This proxy handles Matrix registration requests and forwards them to LDAP.
|
||||||
|
|
||||||
**Note**: This does support the full Matrix specification for registrations. It only provide a very coarse implementation of a basic password registration.
|
**Please note:** This does support the full Matrix specification for registrations. It only provide a very coarse
|
||||||
|
implementation of a basic password registration.
|
||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
|
|
||||||
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.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_ldap_registration_proxy_enabled: true
|
matrix_ldap_registration_proxy_enabled: true
|
||||||
@ -19,7 +20,8 @@ matrix_ldap_registration_proxy_ldap_user: <USER>
|
|||||||
matrix_ldap_registration_proxy_ldap_password: <password>
|
matrix_ldap_registration_proxy_ldap_password: <password>
|
||||||
```
|
```
|
||||||
|
|
||||||
If you already use the [synapse external password provider via LDAP](configuring-playbook-ldap-auth.md) (that is, you have `matrix_synapse_ext_password_provider_ldap_enabled: true` and other options in your configuration) you can use the following values as configuration:
|
If you already use the [synapse external password provider via LDAP](configuring-playbook-ldap-auth.md) (that is, you have `matrix_synapse_ext_password_provider_ldap_enabled: true` and other options in your configuration)
|
||||||
|
you can use the following values as configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Use the LDAP values specified for the synapse role to setup LDAP proxy
|
# Use the LDAP values specified for the synapse role to setup LDAP proxy
|
||||||
@ -27,11 +29,5 @@ matrix_ldap_registration_proxy_ldap_uri: "{{ matrix_synapse_ext_password_provide
|
|||||||
matrix_ldap_registration_proxy_ldap_base_dn: "{{ matrix_synapse_ext_password_provider_ldap_base }}"
|
matrix_ldap_registration_proxy_ldap_base_dn: "{{ matrix_synapse_ext_password_provider_ldap_base }}"
|
||||||
matrix_ldap_registration_proxy_ldap_user: "{{ matrix_synapse_ext_password_provider_ldap_bind_dn }}"
|
matrix_ldap_registration_proxy_ldap_user: "{{ matrix_synapse_ext_password_provider_ldap_bind_dn }}"
|
||||||
matrix_ldap_registration_proxy_ldap_password: "{{ matrix_synapse_ext_password_provider_ldap_bind_password }}"
|
matrix_ldap_registration_proxy_ldap_password: "{{ matrix_synapse_ext_password_provider_ldap_bind_password }}"
|
||||||
|
|
||||||
matrix_ldap_registration_proxy_systemd_wanted_services_list_custom:
|
|
||||||
- matrix-synapse.service
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Storing Matrix media files using matrix-media-repo (optional)
|
# Setting up matrix-media-repo (optional)
|
||||||
|
|
||||||
[matrix-media-repo](https://docs.t2bot.io/matrix-media-repo/) (often abbreviated "MMR") is a highly customizable multi-domain media repository for Matrix. Intended for medium to large environments consisting of several homeservers, this media repo de-duplicates media (including remote media) while being fully compliant with the specification.
|
[matrix-media-repo](https://docs.t2bot.io/matrix-media-repo/) (often abbreviated "MMR") is a highly customizable multi-domain media repository for Matrix. Intended for medium to large environments consisting of several homeservers, this media repo de-duplicates media (including remote media) while being fully compliant with the specification.
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ For a simpler alternative (which allows you to offload your media repository sto
|
|||||||
|
|
||||||
## Quickstart
|
## Quickstart
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file and [re-run the installation process](./installing.md) for the playbook:
|
Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file and [re-run the installation process](./installing.md) for the playbook:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_media_repo_enabled: true
|
matrix_media_repo_enabled: true
|
||||||
@ -23,9 +23,9 @@ matrix_media_repo_enabled: true
|
|||||||
# matrix_media_repo_metrics_enabled: true
|
# matrix_media_repo_metrics_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
The repo is pre-configured for integrating with the Postgres database, Traefik proxy and [Prometheus/Grafana](configuring-playbook-prometheus-grafana.md) (if metrics enabled) from this playbook for all the available homeserver roles. When the media repo is enabled, other media store roles should be disabled (if using Synapse with other media store roles).
|
The repo is pre-configured for integrating with the Postgres database, NGINX proxy and [Prometheus/Grafana](configuring-playbook-prometheus-grafana.md) (if metrics enabled) from this playbook for all the available homeserver roles. When the media repo is enabled, other media store roles should be disabled (if using Synapse with other media store roles).
|
||||||
|
|
||||||
By default, the media-repo will use the local filesystem for data storage. You can alternatively use a `s3` cloud backend as well. Access token caching is also enabled by default since the logout endpoints are proxied through the media repo.
|
By default, the media-repo will use the local filesystem for data storage. Additional options include `s3` and `IPFS` (experimental). Access token caching is also enabled by default since the logout endpoints are proxied through the media repo.
|
||||||
|
|
||||||
## Configuring the media-repo
|
## Configuring the media-repo
|
||||||
|
|
||||||
@ -43,72 +43,74 @@ matrix_media_repo_database_max_connections: 25
|
|||||||
matrix_media_repo_database_max_idle_connections: 5
|
matrix_media_repo_database_max_idle_connections: 5
|
||||||
|
|
||||||
# These users have full access to the administrative functions of the media repository.
|
# These users have full access to the administrative functions of the media repository.
|
||||||
# See docs/admin.md for information on what these people can do. They must belong to one of the
|
# See https://github.com/turt2live/matrix-media-repo/blob/release-v1.2.8/docs/admin.md for
|
||||||
# configured homeservers above.
|
# information on what these people can do. They must belong to one of the configured
|
||||||
# matrix_media_repo_admins: [
|
# homeservers above.
|
||||||
# "@your_username:example.org"
|
matrix_media_repo_admins:
|
||||||
# ]
|
admins: []
|
||||||
|
# admins:
|
||||||
|
# - "@your_username:example.org"
|
||||||
|
|
||||||
matrix_media_repo_admins: []
|
# Datastores are places where media should be persisted. This isn't dedicated for just uploads:
|
||||||
|
# thumbnails and other misc data is also stored in these places. The media repo, when looking
|
||||||
|
# for a datastore to use, will always use the smallest datastore first.
|
||||||
|
matrix_media_repo_datastores:
|
||||||
|
datastores:
|
||||||
|
- type: file
|
||||||
|
enabled: true # Enable this to set up data storage.
|
||||||
|
# Datastores can be split into many areas when handling uploads. Media is still de-duplicated
|
||||||
|
# across all datastores (local content which duplicates remote content will re-use the remote
|
||||||
|
# content's location). This option is useful if your datastore is becoming very large, or if
|
||||||
|
# you want faster storage for a particular kind of media.
|
||||||
|
#
|
||||||
|
# The kinds available are:
|
||||||
|
# thumbnails - Used to store thumbnails of media (local and remote).
|
||||||
|
# remote_media - Original copies of remote media (servers not configured by this repo).
|
||||||
|
# local_media - Original uploads for local media.
|
||||||
|
# archives - Archives of content (GDPR and similar requests).
|
||||||
|
forKinds: ["thumbnails", "remote_media", "local_media", "archives"]
|
||||||
|
opts:
|
||||||
|
path: /data/media
|
||||||
|
|
||||||
# Datastores can be split into many areas when handling uploads. Media is still de-duplicated
|
- type: s3
|
||||||
# across all datastores (local content which duplicates remote content will re-use the remote
|
enabled: false # Enable this to set up s3 uploads
|
||||||
# content's location). This option is useful if your datastore is becoming very large, or if
|
forKinds: ["thumbnails", "remote_media", "local_media", "archives"]
|
||||||
# you want faster storage for a particular kind of media.
|
opts:
|
||||||
#
|
# The s3 uploader needs a temporary location to buffer files to reduce memory usage on
|
||||||
# To disable this datastore, making it readonly, specify `forKinds: []`.
|
# small file uploads. If the file size is unknown, the file is written to this location
|
||||||
#
|
# before being uploaded to s3 (then the file is deleted). If you aren't concerned about
|
||||||
# The kinds available are:
|
# memory usage, set this to an empty string.
|
||||||
# thumbnails - Used to store thumbnails of media (local and remote).
|
tempPath: "/tmp/mediarepo_s3_upload"
|
||||||
# remote_media - Original copies of remote media (servers not configured by this repo).
|
endpoint: sfo2.digitaloceanspaces.com
|
||||||
# local_media - Original uploads for local media.
|
accessKeyId: ""
|
||||||
# archives - Archives of content (GDPR and similar requests).
|
accessSecret: ""
|
||||||
matrix_media_repo_datastore_file_for_kinds: ["thumbnails", "remote_media", "local_media", "archives"]
|
ssl: true
|
||||||
matrix_media_repo_datastore_s3_for_kinds: []
|
bucketName: "your-media-bucket"
|
||||||
|
# An optional region for where this S3 endpoint is located. Typically not needed, though
|
||||||
|
# some providers will need this (like Scaleway). Uncomment to use.
|
||||||
|
#region: "sfo2"
|
||||||
|
# An optional storage class for tuning how the media is stored at s3.
|
||||||
|
# See https://aws.amazon.com/s3/storage-classes/ for details; uncomment to use.
|
||||||
|
#storageClass: STANDARD
|
||||||
|
|
||||||
# The s3 uploader needs a temporary location to buffer files to reduce memory usage on
|
# The media repo does support an IPFS datastore, but only if the IPFS feature is enabled. If
|
||||||
# small file uploads. If the file size is unknown, the file is written to this location
|
# the feature is not enabled, this will not work. Note that IPFS support is experimental at
|
||||||
# before being uploaded to s3 (then the file is deleted). If you aren't concerned about
|
# the moment and not recommended for general use.
|
||||||
# memory usage, set this to an empty string.
|
#
|
||||||
matrix_media_repo_datastore_s3_opts_temp_path: ""
|
# NOTE: Everything you upload to IPFS will be publicly accessible, even when the media repo
|
||||||
matrix_media_repo_datastore_s3_opts_endpoint: "sfo2.digitaloceanspaces.com"
|
# puts authentication on the download endpoints. Only use this option for cases where you
|
||||||
matrix_media_repo_datastore_s3_opts_access_key_id: ""
|
# expect your media to be publicly accessible.
|
||||||
matrix_media_repo_datastore_s3_opts_access_secret: ""
|
- type: ipfs
|
||||||
matrix_media_repo_datastore_s3_opts_ssl: true
|
enabled: false # Enable this to use IPFS support
|
||||||
matrix_media_repo_datastore_s3_opts_bucket_name: "your-media-bucket"
|
forKinds: ["local_media"]
|
||||||
|
# The IPFS datastore currently has no options. It will use the daemon or HTTP API configured
|
||||||
# An optional region for where this S3 endpoint is located. Typically not needed, though
|
# in the IPFS section of your main config.
|
||||||
# some providers will need this (like Scaleway). Uncomment to use.
|
opts: {}
|
||||||
# matrix_media_repo_datastore_s3_opts_region: "sfo2"
|
|
||||||
|
|
||||||
# An optional storage class for tuning how the media is stored at s3.
|
|
||||||
# See https://aws.amazon.com/s3/storage-classes/ for details; uncomment to use.
|
|
||||||
# matrix_media_repo_datastore_s3_opts_storage_class: "STANDARD"
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Full list of configuration options with documentation can be found in [`roles/custom/matrix-media-repo/defaults/main.yml`](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/roles/custom/matrix-media-repo/defaults/main.yml)
|
Full list of configuration options with documentation can be found in [`roles/custom/matrix-media-repo/defaults/main.yml`](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/roles/custom/matrix-media-repo/defaults/main.yml)
|
||||||
|
|
||||||
## Signing Keys
|
|
||||||
|
|
||||||
Authenticated media endpoints ([MSC3916](https://github.com/matrix-org/matrix-spec-proposals/pull/3916)) requires MMR to have a configured signing key to authorize outbound federation requests. Additionally, the signing key must be merged with your homeserver's signing key file.
|
|
||||||
|
|
||||||
The playbook default is to generate a MMR signing key when invoking the setup role and merge it with your homeserver if you are using Synapse or Dendrite. This can be disabled if desired by setting the option in your inventory:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_media_repo_generate_signing_key: false
|
|
||||||
```
|
|
||||||
|
|
||||||
If you wish to manually generate the signing key and merge it with your homeserver's signing key file, see https://docs.t2bot.io/matrix-media-repo/v1.3.5/installation/signing-key/ for more details.
|
|
||||||
|
|
||||||
**Note that if you uninstall MMR from the playbook, it will not remove the old MMR signing key from your homeserver's signing key file. You will have to remove it manually.**
|
|
||||||
|
|
||||||
### Key backup and revoking
|
|
||||||
|
|
||||||
Since your homeserver signing key file is modified by the playbook, a backup will be created in `HOMESERVER_DIR/config/example.com.signing.key.backup`. If you need to remove/revoke old keys, you can restore from this backup or remove the MMR key ID from your `example.com.signing.key` file.
|
|
||||||
|
|
||||||
Additionally, its recommended after revoking a signing key to update your homeserver config file (`old_signing_keys` field for Synapse and `old_private_keys` for Dendrite). See your homeserver config file for further documentation on how to populate the field.
|
|
||||||
|
|
||||||
## Importing data from an existing media store
|
## Importing data from an existing media store
|
||||||
|
|
||||||
If you want to add this repo to an existing homeserver managed by the playbook, you will need to import existing media into MMR's database or you will lose access to older media while it is active. MMR versions up to `v1.3.3` only support importing from Synapse, but newer versions (at time of writing: only `latest`) also support importing from Dendrite.
|
If you want to add this repo to an existing homeserver managed by the playbook, you will need to import existing media into MMR's database or you will lose access to older media while it is active. MMR versions up to `v1.3.3` only support importing from Synapse, but newer versions (at time of writing: only `latest`) also support importing from Dendrite.
|
||||||
@ -123,7 +125,7 @@ To import the Synapse media store, you're supposed to invoke the `import_synapse
|
|||||||
|
|
||||||
This guide here is adapted from the [upstream documentation about the import_synapse script](https://github.com/turt2live/matrix-media-repo#importing-media-from-synapse).
|
This guide here is adapted from the [upstream documentation about the import_synapse script](https://github.com/turt2live/matrix-media-repo#importing-media-from-synapse).
|
||||||
|
|
||||||
Run the following command on the server (after replacing `postgres_connection_password` in it with the value found in your `vars.yml` file):
|
Run the following command on the server (after replacing `devture_postgres_connection_password` in it with the value found in your `vars.yml` file):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker exec -it matrix-media-repo \
|
docker exec -it matrix-media-repo \
|
||||||
@ -132,7 +134,7 @@ docker exec -it matrix-media-repo \
|
|||||||
-dbHost matrix-postgres \
|
-dbHost matrix-postgres \
|
||||||
-dbPort 5432 \
|
-dbPort 5432 \
|
||||||
-dbUsername matrix \
|
-dbUsername matrix \
|
||||||
-dbPassword postgres_connection_password
|
-dbPassword devture_postgres_connection_password
|
||||||
```
|
```
|
||||||
|
|
||||||
Enter `1` for the Machine ID when prompted (you are not doing any horizontal scaling) unless you know what you're doing.
|
Enter `1` for the Machine ID when prompted (you are not doing any horizontal scaling) unless you know what you're doing.
|
||||||
@ -145,7 +147,7 @@ If you're using the [Dendrite](configuring-playbook-dendrite.md) homeserver inst
|
|||||||
|
|
||||||
To import the Dendrite media store, you're supposed to invoke the `import_dendrite` tool which is part of the matrix-media-repo container image. Your Dendrite database is called `dendrite_mediaapi` by default, unless you've changed it by modifying `matrix_dendrite_media_api_database`.
|
To import the Dendrite media store, you're supposed to invoke the `import_dendrite` tool which is part of the matrix-media-repo container image. Your Dendrite database is called `dendrite_mediaapi` by default, unless you've changed it by modifying `matrix_dendrite_media_api_database`.
|
||||||
|
|
||||||
Run the following command on the server (after replacing `postgres_connection_password` in it with the value found in your `vars.yml` file):
|
Run the following command on the server (after replacing `devture_postgres_connection_password` in it with the value found in your `vars.yml` file):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker exec -it matrix-media-repo \
|
docker exec -it matrix-media-repo \
|
||||||
@ -154,7 +156,7 @@ docker exec -it matrix-media-repo \
|
|||||||
-dbHost matrix-postgres \
|
-dbHost matrix-postgres \
|
||||||
-dbPort 5432 \
|
-dbPort 5432 \
|
||||||
-dbUsername matrix \
|
-dbUsername matrix \
|
||||||
-dbPassword postgres_connection_password
|
-dbPassword devture_postgres_connection_password
|
||||||
```
|
```
|
||||||
|
|
||||||
Enter `1` for the Machine ID when prompted (you are not doing any horizontal scaling) unless you know what you're doing.
|
Enter `1` for the Machine ID when prompted (you are not doing any horizontal scaling) unless you know what you're doing.
|
||||||
|
@ -6,7 +6,7 @@ The playbook can install and configure [matrix-registration](https://github.com/
|
|||||||
|
|
||||||
**WARNING**: this is not related to [matrix-registration-bot](configuring-playbook-bot-matrix-registration-bot.md)
|
**WARNING**: this is not related to [matrix-registration-bot](configuring-playbook-bot-matrix-registration-bot.md)
|
||||||
|
|
||||||
> matrix-registration is a simple python application to have a token based Matrix registration.
|
> matrix-registration is a simple python application to have a token based matrix registration.
|
||||||
|
|
||||||
Use matrix-registration to **create unique registration links**, which people can use to register on your Matrix server. It allows you to **keep your server's registration closed (private)**, but still allow certain people (these having a special link) to register a user account.
|
Use matrix-registration to **create unique registration links**, which people can use to register on your Matrix server. It allows you to **keep your server's registration closed (private)**, but still allow certain people (these having a special link) to register a user account.
|
||||||
|
|
||||||
@ -14,45 +14,21 @@ Use matrix-registration to **create unique registration links**, which people ca
|
|||||||
|
|
||||||
- **an API for creating registration tokens** (unique registration links). This API can be used via `curl` or via the playbook (see [Usage](#usage) below)
|
- **an API for creating registration tokens** (unique registration links). This API can be used via `curl` or via the playbook (see [Usage](#usage) below)
|
||||||
|
|
||||||
- **a user registration page**, where people can use these registration tokens. By default, exposed at `https://matrix.example.com/matrix-registration`
|
- **a user registration page**, where people can use these registration tokens. By default, exposed at `https://matrix.DOMAIN/matrix-registration`
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Installing
|
||||||
|
|
||||||
To enable matrix-registration, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Adjust your playbook configuration (your `inventory/host_vars/matrix.DOMAIN/vars.yml` file):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_registration_enabled: true
|
matrix_registration_enabled: true
|
||||||
|
|
||||||
# Generate a strong secret here. Consider generating it with `pwgen -s 64 1`
|
# Generate a strong secret using: `pwgen -s 64 1`.
|
||||||
matrix_registration_admin_secret: "ENTER_SOME_SECRET_HERE"
|
matrix_registration_admin_secret: "ENTER_SOME_SECRET_HERE"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the matrix-registration URL
|
Then, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
By default, this playbook installs the matrix-registration on the `matrix.` subdomain, at the `/matrix-registration` path (https://matrix.example.com/matrix-registration). This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_registration_hostname` and `matrix_registration_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix
|
|
||||||
matrix_registration_hostname: registration.example.com
|
|
||||||
matrix_registration_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the matrix-registration domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
@ -61,7 +37,7 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
**matrix-registration** gets exposed at `https://matrix.example.com/matrix-registration`
|
**matrix-registration** gets exposed at `https://matrix.DOMAIN/matrix-registration`
|
||||||
|
|
||||||
It provides various [APIs](https://github.com/ZerataX/matrix-registration/wiki/api) - for creating registration tokens, listing tokens, disabling tokens, etc. To make use of all of its capabilities, consider using `curl`.
|
It provides various [APIs](https://github.com/ZerataX/matrix-registration/wiki/api) - for creating registration tokens, listing tokens, disabling tokens, etc. To make use of all of its capabilities, consider using `curl`.
|
||||||
|
|
||||||
@ -78,7 +54,8 @@ ansible-playbook -i inventory/hosts setup.yml \
|
|||||||
--extra-vars="one_time=yes ex_date=2021-12-31"
|
--extra-vars="one_time=yes ex_date=2021-12-31"
|
||||||
```
|
```
|
||||||
|
|
||||||
The above command creates and returns a **one-time use** token, which **expires** on the 31st of December 2021. Adjust the `one_time` and `ex_date` variables as you see fit.
|
The above command creates and returns a **one-time use** token, which **expires** on the 31st of December 2021.
|
||||||
|
Adjust the `one_time` and `ex_date` variables as you see fit.
|
||||||
|
|
||||||
Share the unique registration link (generated by the command above) with users to let them register on your Matrix server.
|
Share the unique registration link (generated by the command above) with users to let them register on your Matrix server.
|
||||||
|
|
||||||
|
@ -1,26 +1,28 @@
|
|||||||
# Setting up a Generic Mautrix Bridge (optional)
|
# Setting up a Generic Mautrix Bridge (optional)
|
||||||
|
|
||||||
The playbook can install and configure various [mautrix](https://github.com/mautrix) bridges (twitter, facebook, instagram, signal, hangouts, googlechat, etc.), as well as many other (non-mautrix) bridges. This is a common guide for configuring mautrix bridges.
|
The playbook can install and configure various [mautrix](https://github.com/mautrix) bridges (twitter, facebook, instagram, signal, hangouts, googlechat, etc.), as well as many other (non-mautrix) bridges.
|
||||||
|
This is a common guide for configuring mautrix bridges.
|
||||||
|
|
||||||
You can see each bridge's features at in the `ROADMAP.md` file in its corresponding [mautrix](https://github.com/mautrix) repository.
|
You can see each bridge's features at in the `ROADMAP.md` file in its corresponding [mautrix](https://github.com/mautrix) repository.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
To enable a bridge add:
|
||||||
|
|
||||||
To enable the bridge, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Replace SERVICENAME with one of: twitter, facebook, instagram, ..
|
# Replace SERVICENAME with one of: twitter, facebook, instagram, ..
|
||||||
matrix_mautrix_SERVICENAME_enabled: true
|
matrix_mautrix_SERVICENAME_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
to your `vars.yml`
|
||||||
|
|
||||||
There are some additional things you may wish to configure about the bridge before you continue. Each bridge may have additional requirements besides `_enabled: true`. For example, the mautrix-telegram bridge (our documentation page about it is [here](configuring-playbook-bridge-mautrix-telegram.md)) requires the `matrix_mautrix_telegram_api_id` and `matrix_mautrix_telegram_api_hash` variables to be defined. Refer to each bridge's individual documentation page for details about enabling bridges.
|
There are some additional things you may wish to configure about the bridge before you continue. Each bridge may have additional requirements besides `_enabled: true`. For example, the mautrix-telegram bridge (our documentation page about it is [here](configuring-playbook-bridge-mautrix-telegram.md)) requires the `matrix_mautrix_telegram_api_id` and `matrix_mautrix_telegram_api_hash` variables to be defined. Refer to each bridge's individual documentation page for details about enabling bridges.
|
||||||
|
|
||||||
To **configure a user as an administrator for all bridges**, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
You can add
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_admin: "@YOUR_USERNAME:{{ matrix_domain }}"
|
matrix_admin: "@YOUR_USERNAME:{{ matrix_domain }}"
|
||||||
```
|
```
|
||||||
|
to `vars.yml` to **configure a user as an administrator for all bridges**.
|
||||||
**Alternatively** (more verbose, but allows multiple admins to be configured), you can do the same on a per-bridge basis with:
|
**Alternatively** (more verbose, but allows multiple admins to be configured), you can do the same on a per-bridge basis with:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@ -32,25 +34,27 @@ matrix_mautrix_SERVICENAME_configuration_extension_yaml: |
|
|||||||
|
|
||||||
## encryption
|
## encryption
|
||||||
|
|
||||||
Encryption support is off by default. If you would like to enable encryption, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Encryption support is off by default. If you would like to enable encryption, add the following to your `vars.yml` file:
|
||||||
|
|
||||||
**for all bridges with encryption support**:
|
**for all bridges with encryption support**:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_bridges_encryption_enabled: true
|
matrix_bridges_encryption_enabled: true
|
||||||
matrix_bridges_encryption_default: true
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Alternatively**, for a specific bridge:
|
**Alternatively**, for a specific bridge:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_mautrix_SERVICENAME_bridge_encryption_enabled: true
|
matrix_mautrix_SERVICENAME_configuration_extension_yaml: |
|
||||||
matrix_mautrix_SERVICENAME_bridge_encryption_default: true
|
bridge:
|
||||||
|
encryption:
|
||||||
|
allow: true
|
||||||
|
default: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## relay mode
|
## relay mode
|
||||||
|
|
||||||
Relay mode is off by default. If you would like to enable relay mode, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Relay mode is off by default. If you would like to enable relay mode, add the following to your `vars.yml` file:
|
||||||
|
|
||||||
**for all bridges with relay mode support**:
|
**for all bridges with relay mode support**:
|
||||||
|
|
||||||
@ -91,20 +95,22 @@ Can be used to set the username for the bridge.
|
|||||||
|
|
||||||
You may wish to look at `roles/custom/matrix-bridge-mautrix-SERVICENAME/templates/config.yaml.j2` and `roles/custom/matrix-bridge-mautrix-SERVICENAME/defaults/main.yml` to find other things you would like to configure.
|
You may wish to look at `roles/custom/matrix-bridge-mautrix-SERVICENAME/templates/config.yaml.j2` and `roles/custom/matrix-bridge-mautrix-SERVICENAME/defaults/main.yml` to find other things you would like to configure.
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## Set up Double Puppeting
|
## Set up Double Puppeting
|
||||||
|
|
||||||
To set up [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html) enable the [Appservice Double Puppet](configuring-playbook-appservice-double-puppet.md) service for this playbook.
|
To set up [Double Puppeting](https://docs.mau.fi/bridges/general/double-puppeting.html)
|
||||||
|
|
||||||
|
please do so automatically, by enabling Shared Secret Auth
|
||||||
|
|
||||||
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook by adding
|
The bridge will automatically perform Double Puppeting if you enable [Shared Secret Auth](configuring-playbook-shared-secret-auth.md) for this playbook by adding
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_appservice_double_puppet_enabled: true
|
matrix_synapse_ext_password_provider_shared_secret_auth_enabled: true
|
||||||
|
matrix_synapse_ext_password_provider_shared_secret_auth_shared_secret: YOUR_SHARED_SECRET_GOES_HERE
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You should generate a strong shared secret with a command like this: pwgen -s 64 1
|
||||||
|
|
||||||
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
This is the recommended way of setting up Double Puppeting, as it's easier to accomplish, works for all your users automatically, and has less of a chance of breaking in the future.
|
||||||
|
|
||||||
## Controlling the logging level
|
## Controlling the logging level
|
||||||
@ -113,16 +119,16 @@ This is the recommended way of setting up Double Puppeting, as it's easier to ac
|
|||||||
matrix_mautrix_SERVICENAME_logging_level: WARN
|
matrix_mautrix_SERVICENAME_logging_level: WARN
|
||||||
```
|
```
|
||||||
|
|
||||||
to `vars.yml` to control the logging level, where you may replace WARN with one of the following to control the verbosity of the logs generated: TRACE, DEBUG, INFO, WARN, ERROR, or FATAL.
|
to `vars.yml` to control the logging level, where you may replace WARN with one of the following to control the verbosity of the logs generated: TRACE, DEBUG, INFO, WARN, ERROR, or FATAL.
|
||||||
|
|
||||||
If you have issues with a service, and are requesting support, the higher levels of logging will generally be more helpful.
|
If you have issues with a service, and are requesting support, the higher levels of logging will generally be more helpful.
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You then need to start a chat with `@SERVICENAMEbot:example.com` (where `example.com` is your base domain, not the `matrix.` domain).
|
You then need to start a chat with `@SERVICENAMEbot:YOUR_DOMAIN` (where `YOUR_DOMAIN` is your base domain, not the `matrix.` domain).
|
||||||
|
|
||||||
Send `login` to the bridge bot to get started. You can learn more here about authentication from the bridge's official documentation on Authentication: https://docs.mau.fi/bridges/python/SERVICENAME/authentication.html
|
Send `login ` to the bridge bot to get started You can learn more here about authentication from the bridge's official documentation on Authentication https://docs.mau.fi/bridges/python/SERVICENAME/authentication.html .
|
||||||
|
|
||||||
If you run into trouble, check the [Troubleshooting](#troubleshooting) section below.
|
If you run into trouble, check the [Troubleshooting](#troubleshooting) section below.
|
||||||
|
|
||||||
@ -131,5 +137,4 @@ If you run into trouble, check the [Troubleshooting](#troubleshooting) section b
|
|||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
For troubleshooting information with a specific bridge, please see the playbook documentation about it (some other document in in `docs/`) and the upstream ([mautrix](https://github.com/mautrix)) bridge documentation for that specific bridge.
|
For troubleshooting information with a specific bridge, please see the playbook documentation about it (some other document in in `docs/`) and the upstream ([mautrix](https://github.com/mautrix)) bridge documentation for that specific bridge.
|
||||||
|
|
||||||
Reporting bridge bugs should happen upstream, in the corresponding mautrix repository, not to us.
|
Reporting bridge bugs should happen upstream, in the corresponding mautrix repository, not to us.
|
||||||
|
@ -1,3 +1,83 @@
|
|||||||
# Configure Nginx (optional, advanced)
|
# Configure Nginx (optional, advanced)
|
||||||
|
|
||||||
Since 2024-01, this playbook no longer uses nginx as its reverse-proxy.
|
**Note**: the playbook is [in the process of moving to Traefik](../CHANGELOG.md#reverse-proxy-configuration-changes-and-initial-traefik-support). Traefik is already the default reverse-proxy for new installations and existing users are also strongly encouraged to switch to Traefik. As such, this **nginx documentation below may be incomplete or misleading**.
|
||||||
|
|
||||||
|
|
||||||
|
## Using Nginx status
|
||||||
|
|
||||||
|
This will serve a statuspage to the hosting machine only. Useful for monitoring software like [longview](https://www.linode.com/docs/platform/longview/longview-app-for-nginx/)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_nginx_proxy_proxy_matrix_nginx_status_enabled: true
|
||||||
|
```
|
||||||
|
|
||||||
|
This will serve the status page under the following addresses:
|
||||||
|
- `http://matrix.DOMAIN/nginx_status` (using HTTP)
|
||||||
|
- `https://matrix.DOMAIN/nginx_status` (using HTTPS)
|
||||||
|
|
||||||
|
By default, if ```matrix_nginx_proxy_nginx_status_enabled``` is enabled, access to the status page would be allowed from the local IP address of the server. If you wish to allow access from other IP addresses, you can provide them as a list:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_nginx_proxy_proxy_matrix_nginx_status_allowed_addresses:
|
||||||
|
- 8.8.8.8
|
||||||
|
- 1.1.1.1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Adjusting SSL in your server
|
||||||
|
|
||||||
|
You can adjust how the SSL is served by the nginx server using the `matrix_nginx_proxy_ssl_preset` variable. We support a few presets, based on the Mozilla Server Side TLS
|
||||||
|
Recommended configurations. These presets influence the TLS Protocol, the SSL Cipher Suites and the `ssl_prefer_server_ciphers` variable of nginx.
|
||||||
|
Possible values are:
|
||||||
|
|
||||||
|
- `"modern"` - For Modern clients that support TLS 1.3, with no need for backwards compatibility
|
||||||
|
- `"intermediate"` (**default**) - Recommended configuration for a general-purpose server
|
||||||
|
- `"old"` - Services accessed by very old clients or libraries, such as Internet Explorer 8 (Windows XP), Java 6, or OpenSSL 0.9.8
|
||||||
|
|
||||||
|
**Be really carefull when setting it to `"modern"`**. This could break comunication with other Matrix servers, limiting your federation posibilities.
|
||||||
|
|
||||||
|
Besides changing the preset (`matrix_nginx_proxy_ssl_preset`), you can also directly override these 3 variables:
|
||||||
|
|
||||||
|
- `matrix_nginx_proxy_ssl_protocols`: for specifying the supported TLS protocols.
|
||||||
|
- `matrix_nginx_proxy_ssl_prefer_server_ciphers`: for specifying if the server or the client choice when negotiating the cipher. It can set to `on` or `off`.
|
||||||
|
- `matrix_nginx_proxy_ssl_ciphers`: for specifying the SSL Cipher suites used by nginx.
|
||||||
|
|
||||||
|
For more information about these variables, check the `roles/custom/matrix-nginx-proxy/defaults/main.yml` file.
|
||||||
|
|
||||||
|
## Synapse + OpenID Connect for Single-Sign-On
|
||||||
|
|
||||||
|
If you want to use OpenID Connect as an SSO provider (as per the [Synapse OpenID docs](https://github.com/matrix-org/synapse/blob/develop/docs/openid.md)), you need to use the following configuration (in your `vars.yml` file) to instruct nginx to forward `/_synapse/oidc` to Synapse:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_nginx_proxy_proxy_matrix_client_api_forwarded_location_synapse_oidc_api_enabled: true
|
||||||
|
```
|
||||||
|
|
||||||
|
## Disable Nginx access logs
|
||||||
|
|
||||||
|
This will disable the access logging for nginx.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_nginx_proxy_access_log_enabled: false
|
||||||
|
```
|
||||||
|
|
||||||
|
## Additional configuration
|
||||||
|
|
||||||
|
This playbook also allows for additional configuration to be applied to the nginx server.
|
||||||
|
|
||||||
|
If you want this playbook to obtain and renew certificates for other domains, then you can set the `matrix_ssl_additional_domains_to_obtain_certificates_for` variable (as mentioned in the [Obtaining SSL certificates for additional domains](configuring-playbook-ssl-certificates.md#obtaining-ssl-certificates-for-additional-domains) documentation as well). Make sure that you have set the DNS configuration for the domains you want to include to point at your server.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_ssl_additional_domains_to_obtain_certificates_for:
|
||||||
|
- domain.one.example
|
||||||
|
- domain.two.example
|
||||||
|
```
|
||||||
|
|
||||||
|
You can include additional nginx configuration by setting the `matrix_nginx_proxy_proxy_http_additional_server_configuration_blocks` variable.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_nginx_proxy_proxy_http_additional_server_configuration_blocks:
|
||||||
|
- |
|
||||||
|
# These lines will be included in the nginx configuration.
|
||||||
|
# This is at the top level of the file, so you will need to define all of the `server { ... }` blocks.
|
||||||
|
- |
|
||||||
|
# For advanced use, have a look at the template files in `roles/custom/matrix-nginx-proxy/templates/nginx/conf.d`
|
||||||
|
```
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# Setting up the ntfy push notifications server (optional)
|
# Setting up ntfy (optional)
|
||||||
|
|
||||||
The playbook can install and configure the [ntfy](https://ntfy.sh/) push notifications server for you.
|
The playbook can install and configure the [ntfy](https://ntfy.sh/) push notifications server for you.
|
||||||
|
|
||||||
Using the [UnifiedPush](https://unifiedpush.org) standard, ntfy enables self-hosted (Google-free) push notifications from Matrix (and other) servers to UnifiedPush-compatible Matrix compatible client apps running on Android and other devices.
|
Using the [UnifiedPush](https://unifiedpush.org) standard, ntfy enables self-hosted (Google-free) push notifications from Matrix (and other) servers to UnifiedPush-compatible matrix compatible client apps running on Android and other devices.
|
||||||
|
|
||||||
This role is intended to support UnifiedPush notifications for use with the Matrix and Matrix-related services that this playbook installs. This role is not intended to support all of ntfy's other features.
|
This role is intended to support UnifiedPush notifications for use with the Matrix and Matrix-related services that this playbook installs. This role is not intended to support all of ntfy's other features.
|
||||||
|
|
||||||
@ -11,12 +11,16 @@ This role is intended to support UnifiedPush notifications for use with the Matr
|
|||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable ntfy, 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.DOMAIN/vars.yml` file (adapt to your needs):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Enabling it is the only required setting
|
# Enabling it is the only required setting
|
||||||
ntfy_enabled: true
|
ntfy_enabled: true
|
||||||
|
|
||||||
|
# This is the default hostname.
|
||||||
|
# Uncomment the line below and change it, if you'd like.
|
||||||
|
# matrix_server_fqn_ntfy: "ntfy.{{ matrix_domain }}"
|
||||||
|
|
||||||
# Uncomment to enable the ntfy web app (disabled by default)
|
# Uncomment to enable the ntfy web app (disabled by default)
|
||||||
# ntfy_web_root: app # defaults to "disable"
|
# ntfy_web_root: app # defaults to "disable"
|
||||||
|
|
||||||
@ -25,32 +29,16 @@ ntfy_enabled: true
|
|||||||
# log_level: DEBUG
|
# log_level: DEBUG
|
||||||
```
|
```
|
||||||
|
|
||||||
For a more complete list of variables that you could override, see the [`defaults/main.yml` file](https://github.com/mother-of-all-self-hosting/ansible-role-ntfy/-/blob/main/defaults/main.yml) of the ntfy Ansible role.
|
For a more complete list of variables that you could override, see the [`defaults/main.yml` file](https://gitlab.com/etke.cc/roles/ntfy/-/blob/main/defaults/main.yml) of the ntfy Ansible role.
|
||||||
|
|
||||||
For a complete list of ntfy config options that you could put in `ntfy_configuration_extension_yaml`, see the [ntfy config documentation](https://ntfy.sh/docs/config/#config-options).
|
For a complete list of ntfy config options that you could put in `ntfy_configuration_extension_yaml`, see the [ntfy config documentation](https://ntfy.sh/docs/config/#config-options).
|
||||||
|
|
||||||
### Adjusting the ntfy URL
|
|
||||||
|
|
||||||
By default, this playbook installs ntfy on the `ntfy.` subdomain (`ntfy.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `ntfy_hostname` variable, you can easily make the service available at a **different hostname** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname
|
|
||||||
ntfy_hostname: push.example.com
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain, **you may need to adjust your DNS** records to point the ntfy domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `ntfy`. See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
Don't forget to add `ntfy.<your-domain>` to DNS as described in [Configuring DNS](configuring-dns.md) before running the playbook.
|
||||||
|
|
||||||
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```
|
```
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
@ -62,23 +50,23 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|||||||
To make use of your ntfy installation, on Android for example, you need two things:
|
To make use of your ntfy installation, on Android for example, you need two things:
|
||||||
|
|
||||||
* the `ntfy` app
|
* the `ntfy` app
|
||||||
* a UnifiedPush-compatible Matrix app
|
* a UnifiedPush-compatible matrix app
|
||||||
|
|
||||||
You need to install the `ntfy` app on each device on which you want to receive push notifications through your ntfy server. The `ntfy` app will provide UnifiedPush notifications to any number of UnifiedPush-compatible messaging apps installed on the same device.
|
You need to install the `ntfy` app on each device on which you want to receive push notifications through your ntfy server. The `ntfy` app will provide UnifiedPush notifications to any number of UnifiedPush-compatible messaging apps installed on the same device.
|
||||||
|
|
||||||
### Setting up the `ntfy` Android app
|
### Setting up the `ntfy` Android app
|
||||||
|
|
||||||
1. Install the [ntfy Android app](https://ntfy.sh/docs/subscribe/phone/) from F-droid or Google Play.
|
1. Install the [ntfy Android app](https://ntfy.sh/docs/subscribe/phone/) from F-droid or Google Play.
|
||||||
2. In its Settings -> `General: Default server`, enter your ntfy server URL, such as `https://ntfy.example.com`.
|
2. In its Settings -> `General: Default server`, enter your ntfy server URL, such as `https://ntfy.DOMAIN`.
|
||||||
3. In its Settings -> `Advanced: Connection protocol`, choose `WebSockets`.
|
3. In its Settings -> `Advanced: Connection protocol`, choose `WebSockets`.
|
||||||
|
|
||||||
That is all you need to do in the ntfy app. It has many other features, but for our purposes you can ignore them. In particular you do not need to follow any instructions about subscribing to a notification topic as UnifiedPush will do that automatically.
|
That is all you need to do in the ntfy app. It has many other features, but for our purposes you can ignore them. In particular you do not need to follow any instructions about subscribing to a notification topic as UnifiedPush will do that automatically.
|
||||||
|
|
||||||
### Setting up a UnifiedPush-compatible Matrix app
|
### Setting up a UnifiedPush-compatible matrix app
|
||||||
|
|
||||||
Install any UnifiedPush-enabled Matrix app on that same device. The Matrix app will learn from the `ntfy` app that you have configured UnifiedPush on this device, and then it will tell your Matrix server to use it.
|
Install any UnifiedPush-enabled matrix app on that same device. The matrix app will learn from the `ntfy` app that you have configured UnifiedPush on this device, and then it will tell your matrix server to use it.
|
||||||
|
|
||||||
Steps needed for specific Matrix apps:
|
Steps needed for specific matrix apps:
|
||||||
|
|
||||||
* FluffyChat-android:
|
* FluffyChat-android:
|
||||||
- Should auto-detect and use it. No manual settings.
|
- Should auto-detect and use it. No manual settings.
|
||||||
@ -92,9 +80,9 @@ Steps needed for specific Matrix apps:
|
|||||||
1. choose `Settings` -> `Notifications` -> `Notification method` -> `ntfy`
|
1. choose `Settings` -> `Notifications` -> `Notification method` -> `ntfy`
|
||||||
2. verify `Settings` -> `Troubleshoot` -> `Troubleshoot notification settings`
|
2. verify `Settings` -> `Troubleshoot` -> `Troubleshoot notification settings`
|
||||||
|
|
||||||
If the Matrix app asks, "Choose a distributor: FCM Fallback or ntfy", then choose "ntfy".
|
If the matrix app asks, "Choose a distributor: FCM Fallback or ntfy", then choose "ntfy".
|
||||||
|
|
||||||
If the Matrix app doesn't seem to pick it up, try restarting it and try the Troubleshooting section below.
|
If the matrix app doesn't seem to pick it up, try restarting it and try the Troubleshooting section below.
|
||||||
|
|
||||||
### Web App
|
### Web App
|
||||||
|
|
||||||
@ -105,11 +93,11 @@ The web app is disabled in this playbook by default as the expectation is that m
|
|||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
First check that the Matrix client app you are using supports UnifiedPush. There may well be different variants of the app.
|
First check that the matrix client app you are using supports UnifiedPush. There may well be different variants of the app.
|
||||||
|
|
||||||
Set the ntfy server's log level to 'DEBUG', as shown in the example settings above, and watch the server's logs with `sudo journalctl -fu matrix-ntfy`.
|
Set the ntfy server's log level to 'DEBUG', as shown in the example settings above, and watch the server's logs with `sudo journalctl -fu matrix-ntfy`.
|
||||||
|
|
||||||
To check if UnifiedPush is correctly configured on the client device, look at "Settings -> Notifications -> Notification Targets" in Element-Android or SchildiChat, or "Settings -> Notifications -> Devices" in FluffyChat. There should be one entry for each Matrix client app that has enabled push notifications, and when that client is using UnifiedPush you should see a URL that begins with your ntfy server's URL.
|
To check if UnifiedPush is correctly configured on the client device, look at "Settings -> Notifications -> Notification Targets" in Element-Android or SchildiChat, or "Settings -> Notifications -> Devices" in FluffyChat. There should be one entry for each matrix client app that has enabled push notifications, and when that client is using UnifiedPush you should see a URL that begins with your ntfy server's URL.
|
||||||
|
|
||||||
In the "Notification Targets" screen in Element-Android or SchildiChat, two relevant URLs are shown, "push\_key" and "Url", and both should begin with your ntfy server's URL. If "push\_key" shows your server but "Url" shows an external server such as `up.schildi.chat` then push notifications will still work but are being routed through that external server before they reach your ntfy server. To rectify that, in SchildiChat (at least around version 1.4.20.sc55) you must enable the `Force custom push gateway` setting as described in the "Usage" section above.
|
In the "Notification Targets" screen in Element-Android or SchildiChat, two relevant URLs are shown, "push\_key" and "Url", and both should begin with your ntfy server's URL. If "push\_key" shows your server but "Url" shows an external server such as `up.schildi.chat` then push notifications will still work but are being routed through that external server before they reach your ntfy server. To rectify that, in SchildiChat (at least around version 1.4.20.sc55) you must enable the `Force custom push gateway` setting as described in the "Usage" section above.
|
||||||
|
|
||||||
|
@ -1,62 +1,51 @@
|
|||||||
# Using your own webserver, instead of this playbook's Traefik reverse-proxy (optional, advanced)
|
# Using your own webserver, instead of this playbook's Traefik reverse-proxy (optional, advanced)
|
||||||
|
|
||||||
By default, this playbook installs its own [Traefik](https://traefik.io/) reverse-proxy server (in a Docker container) which listens on ports 80 and 443. If that's okay, you can skip this document.
|
**Note**: the playbook is [in the process of moving to Traefik](../CHANGELOG.md#reverse-proxy-configuration-changes-and-initial-traefik-support). The **documentation below may be incomplete or misleading**.
|
||||||
|
|
||||||
|
By default, this playbook installs its own nginx webserver (called `matrix-nginx-proxy`, in a Docker container) which listens on ports 80 and 443.
|
||||||
|
If that's alright, you can skip this.
|
||||||
|
|
||||||
|
Soon, this default will change and the playbook will install its own [Traefik](https://traefik.io/) reverse-proxy instead.
|
||||||
|
|
||||||
## Traefik
|
## Traefik
|
||||||
|
|
||||||
[Traefik](https://traefik.io/) is the default reverse-proxy for the playbook since [2023-02-26](../CHANGELOG.md/#2023-02-26) and serves **2 purposes**:
|
[Traefik](https://traefik.io/) will be the default reverse-proxy for the playbook in the near future.
|
||||||
|
|
||||||
- serving public traffic and providing SSL-termination with certificates obtained from [Let's Encrypt](https://letsencrypt.org/). See [Adjusting SSL certificate retrieval](./configuring-playbook-ssl-certificates.md).
|
|
||||||
|
|
||||||
- assists internal communication between addon services (briges, bots, etc.) and the homeserver via an internal entrypoint (`matrix-internal-matrix-client-api`).
|
|
||||||
|
|
||||||
There are 2 ways to use Traefik with this playbook, as described below.
|
There are 2 ways to use Traefik with this playbook, as described below.
|
||||||
|
|
||||||
### Traefik managed by the playbook
|
### Traefik managed by the playbook
|
||||||
|
|
||||||
To have the playbook install and use Traefik, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
To switch to Traefik now, use configuration like this:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_playbook_reverse_proxy_type: playbook-managed-traefik
|
matrix_playbook_reverse_proxy_type: playbook-managed-traefik
|
||||||
|
|
||||||
traefik_config_certificatesResolvers_acme_email: YOUR_EMAIL_ADDRESS
|
devture_traefik_config_certificatesResolvers_acme_email: YOUR_EMAIL_ADDRESS
|
||||||
```
|
```
|
||||||
|
|
||||||
Traefik will manage SSL certificates for all services seamlessly.
|
This will install Traefik in the place of `matrix-nginx-proxy`. Traefik will manage SSL certificates for all services seamlessly.
|
||||||
|
|
||||||
|
**Note**: during the transition period, `matrix-nginx-proxy` will still be installed in local-only mode. Do not be alarmed to see `matrix-nginx-proxy` running even when you've chosen Traefik as your reverse-proxy. In the future, we'll be able to run without nginx, but we're not there yet.
|
||||||
|
|
||||||
### Traefik managed by you
|
### Traefik managed by you
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_playbook_reverse_proxy_type: other-traefik-container
|
matrix_playbook_reverse_proxy_type: other-traefik-container
|
||||||
|
|
||||||
# Uncomment and adjust this part if your Traefik container is on another network
|
matrix_playbook_reverse_proxyable_services_additional_network: your-traefik-network
|
||||||
# matrix_playbook_reverse_proxy_container_network: traefik
|
|
||||||
|
|
||||||
# Adjust to point to your Traefik container
|
devture_traefik_certs_dumper_ssl_dir_path: "/path/to/your/traefiks/acme.json/directory"
|
||||||
matrix_playbook_reverse_proxy_hostname: name-of-your-traefik-container
|
|
||||||
|
|
||||||
traefik_certs_dumper_ssl_dir_path: "/path/to/your/traefiks/acme.json/directory"
|
|
||||||
|
|
||||||
# Uncomment and adjust the variable below if the name of your federation entrypoint is different
|
|
||||||
# than the default value (matrix-federation).
|
|
||||||
# matrix_federation_traefik_entrypoint_name: matrix-federation
|
|
||||||
```
|
```
|
||||||
|
|
||||||
In this mode all roles will still have Traefik labels attached. You will, however, need to configure your Traefik instance and its entrypoints.
|
In this mode all roles will still have Traefik labels attached. You will, however, need to configure your Traefik instance and its entrypoints.
|
||||||
|
|
||||||
By default, the playbook configured a `default` certificate resolver and multiple entrypoints.
|
By default, the playbook congiures services use a `web-secure` (443) and `matrix-federation` (8448) entrypoints, as well as a `default` certificate resolver.
|
||||||
|
|
||||||
You need to configure 4 entrypoints for your Traefik server:
|
You need to configure 3 entrypoints for your Traefik server: `web` (TCP port `80`), `web-secure` (TCP port `443`) and `matrix-federation` (TCP port `8448`).
|
||||||
|
|
||||||
- `web` (TCP port `80`) - used for redirecting to HTTPS (`web-secure`)
|
|
||||||
- `web-secure` (TCP port `443`) - used for exposing the Matrix Client-Server API and all other services
|
|
||||||
- `matrix-federation` (TCP port `8448`) - used for exposing the Matrix Federation API
|
|
||||||
- `matrix-internal-matrix-client-api` (TCP port `8008`) - used internally for addon services (bridges, bots) to communicate with the homserver
|
|
||||||
|
|
||||||
Below is some configuration for running Traefik yourself, although we recommend using [Traefik managed by the playbook](#traefik-managed-by-the-playbook).
|
Below is some configuration for running Traefik yourself, although we recommend using [Traefik managed by the playbook](#traefik-managed-by-the-playbook).
|
||||||
|
|
||||||
Note that this configuration on its own does **not** redirect traffic on port 80 (plain HTTP) to port 443 for HTTPS. If you are not already doing this in Traefik, it can be added to Traefik in a [file provider](https://docs.traefik.io/v2.0/providers/file/) as follows:
|
Note that this configuration on its own does **not** redirect traffic on port 80 (plain HTTP) to port 443 for HTTPS, which may cause some issues, since the built-in Nginx proxy usually does this. If you are not already doing this in Traefik, it can be added to Traefik in a [file provider](https://docs.traefik.io/v2.0/providers/file/) as follows:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[http]
|
[http]
|
||||||
@ -95,8 +84,7 @@ services:
|
|||||||
- "--providers.docker.network=traefik"
|
- "--providers.docker.network=traefik"
|
||||||
- "--providers.docker.exposedbydefault=false"
|
- "--providers.docker.exposedbydefault=false"
|
||||||
- "--entrypoints.web-secure.address=:443"
|
- "--entrypoints.web-secure.address=:443"
|
||||||
- "--entrypoints.matrix-federation.address=:8448"
|
- "--entrypoints.federation.address=:8448"
|
||||||
- "--entrypoints.matrix-internal-matrix-client-api.address=:8008"
|
|
||||||
- "--certificatesresolvers.default.acme.tlschallenge=true"
|
- "--certificatesresolvers.default.acme.tlschallenge=true"
|
||||||
- "--certificatesresolvers.default.acme.email=YOUR EMAIL"
|
- "--certificatesresolvers.default.acme.email=YOUR EMAIL"
|
||||||
- "--certificatesresolvers.default.acme.storage=/letsencrypt/acme.json"
|
- "--certificatesresolvers.default.acme.storage=/letsencrypt/acme.json"
|
||||||
@ -114,15 +102,15 @@ networks:
|
|||||||
|
|
||||||
## Another webserver
|
## Another webserver
|
||||||
|
|
||||||
If you don't wish to use Traefik, you can also use your own webserver.
|
If you don't wish to use Traefik or `matrix-nginx-proxy`, you can also use your own webserver.
|
||||||
|
|
||||||
Doing this is possible, but requires manual work.
|
Doing this is possible, but requires manual work.
|
||||||
|
|
||||||
There are 2 ways to go about it:
|
There are 2 ways to go about it:
|
||||||
|
|
||||||
- (recommended) [Fronting the integrated reverse-proxy webserver with another reverse-proxy](#fronting-the-integrated-reverse-proxy-webserver-with-another-reverse-proxy) - using the playbook-managed reverse-proxy (Traefik), but disabling SSL termination for it, exposing this reverse-proxy on a few local ports (e.g. `127.0.0.1:81`, etc.) and forwarding traffic from your own webserver to those few ports
|
- (recommended) [Fronting the integrated reverse-proxy webserver with another reverse-proxy](#fronting-the-integrated-reverse-proxy-webserver-with-another-reverse-proxy) - using a playbook-managed reverse-proxy (either `matrix-nginx-proxy` or Traefik), disabling SSL termination for it, exposing this reverse-proxy on a few local ports (e.g. `127.0.0.1:81`, etc.) and forwarding traffic from your own webserver to those few ports
|
||||||
|
|
||||||
- (difficult) [Using no reverse-proxy on the Matrix side at all](#using-no-reverse-proxy-on-the-matrix-side-at-all) disabling the playbook-managed reverse-proxy (Traefik), exposing services one by one using `_host_bind_port` variables and forwarding traffic from your own webserver to those ports
|
- (difficult) [Using no reverse-proxy on the Matrix side at all](#using-no-reverse-proxy-on-the-matrix-side-at-all) disabling all playbook-managed reverse-proxies (no `matrix-nginx-proxy`, no Traefik)
|
||||||
|
|
||||||
|
|
||||||
### Fronting the integrated reverse-proxy webserver with another reverse-proxy
|
### Fronting the integrated reverse-proxy webserver with another reverse-proxy
|
||||||
@ -131,9 +119,9 @@ This method is about leaving the integrated reverse-proxy webserver be, but maki
|
|||||||
|
|
||||||
If you wish to use another webserver, the integrated reverse-proxy webserver usually gets in the way because it attempts to fetch SSL certificates and binds to ports 80, 443 and 8448 (if Matrix Federation is enabled).
|
If you wish to use another webserver, the integrated reverse-proxy webserver usually gets in the way because it attempts to fetch SSL certificates and binds to ports 80, 443 and 8448 (if Matrix Federation is enabled).
|
||||||
|
|
||||||
You can disable such behavior and make the integrated reverse-proxy webserver only serve traffic locally on the host itself (or over a local network).
|
You can disable such behavior and make the integrated reverse-proxy webserver only serve traffic locally (or over a local network).
|
||||||
|
|
||||||
This is the recommended way for using another reverse-proxy, because the integrated one would act as a black box and wire all Matrix services correctly. You would then only need to reverse-proxy a few individual domains and ports over to it.
|
This is the recommended way for using another reverse-proxy, because the integrated one would act as a black box and wire all Matrix services correctly. You would only need to reverse-proxy a few individual domains and ports over to it.
|
||||||
|
|
||||||
To front Traefik with another reverse-proxy, you would need some configuration like this:
|
To front Traefik with another reverse-proxy, you would need some configuration like this:
|
||||||
|
|
||||||
@ -143,63 +131,96 @@ matrix_playbook_reverse_proxy_type: playbook-managed-traefik
|
|||||||
# Ensure that public urls use https
|
# Ensure that public urls use https
|
||||||
matrix_playbook_ssl_enabled: true
|
matrix_playbook_ssl_enabled: true
|
||||||
|
|
||||||
# Disable the web-secure (port 443) endpoint, which also disables SSL certificate retrieval.
|
# Disable the web-secure (port 443) endpoint, which also disables SSL certificate retrieval
|
||||||
# This has the side-effect of also automatically disabling TLS for the matrix-federation entrypoint
|
devture_traefik_config_entrypoint_web_secure_enabled: false
|
||||||
# (by toggling `matrix_federation_traefik_entrypoint_tls`).
|
|
||||||
traefik_config_entrypoint_web_secure_enabled: false
|
|
||||||
|
|
||||||
# If your reverse-proxy runs on another machine, consider using `0.0.0.0:81`, just `81` or `SOME_IP_ADDRESS_OF_THIS_MACHINE:81`
|
# If your reverse-proxy runs on another machine, consider using `0.0.0.0:81`, just `81` or `SOME_IP_ADDRESS_OF_THIS_MACHINE:81`
|
||||||
traefik_container_web_host_bind_port: '127.0.0.1:81'
|
devture_traefik_container_web_host_bind_port: '127.0.0.1:81'
|
||||||
|
|
||||||
# We bind to `127.0.0.1` by default (see above), so trusting `X-Forwarded-*` headers from
|
# We bind to `127.0.0.1` by default (see above), so trusting `X-Forwarded-*` headers from
|
||||||
# a reverse-proxy running on the local machine is safe enough.
|
# a reverse-proxy running on the local machine is safe enough.
|
||||||
# If you're publishing the port (`traefik_container_web_host_bind_port` above) to a public network interface:
|
devture_traefik_config_entrypoint_web_forwardedHeaders_insecure: true
|
||||||
# - remove the `traefik_config_entrypoint_web_forwardedHeaders_insecure` variable definition below
|
|
||||||
# - uncomment and adjust the `traefik_config_entrypoint_web_forwardedHeaders_trustedIPs` line below
|
|
||||||
traefik_config_entrypoint_web_forwardedHeaders_insecure: true
|
|
||||||
# traefik_config_entrypoint_web_forwardedHeaders_trustedIPs: ['IP-ADDRESS-OF-YOUR-REVERSE-PROXY']
|
|
||||||
|
|
||||||
# Expose the federation entrypoint on a custom port (other than port 8448, which is normally used publicly).
|
# Or, if you're publishing the port (`devture_traefik_container_web_host_bind_port` above) to a public network interfaces:
|
||||||
#
|
# - remove the `devture_traefik_config_entrypoint_web_forwardedHeaders_insecure` variable definition above
|
||||||
# We bind to `127.0.0.1` by default (see above), so trusting `X-Forwarded-*` headers from
|
# - uncomment and adjust the line below
|
||||||
# a reverse-proxy running on the local machine is safe enough.
|
# devture_traefik_config_entrypoint_web_forwardedHeaders_trustedIPs: ['IP-ADDRESS-OF-YOUR-REVERSE-PROXY']
|
||||||
#
|
|
||||||
# If your reverse-proxy runs on another machine, consider:
|
|
||||||
# - using `0.0.0.0:8449`, just `8449` or `SOME_IP_ADDRESS_OF_THIS_MACHINE:8449` below
|
|
||||||
# - adjusting `matrix_playbook_public_matrix_federation_api_traefik_entrypoint_config_custom` (below) - removing `insecure: true` and enabling/configuring `trustedIPs`
|
|
||||||
matrix_playbook_public_matrix_federation_api_traefik_entrypoint_host_bind_port: '127.0.0.1:8449'
|
|
||||||
|
|
||||||
# Disable HTTP/3 for the federation entrypoint.
|
# Likewise (to `devture_traefik_container_web_host_bind_port` above),
|
||||||
# If you'd like HTTP/3, consider configuring it for your other reverse-proxy.
|
# if your reverse-proxy runs on another machine, consider changing the `host_bind_port` setting below.
|
||||||
#
|
devture_traefik_additional_entrypoints_auto:
|
||||||
# Disabling this also sets `matrix_playbook_public_matrix_federation_api_traefik_entrypoint_host_bind_port_udp` to an empty value.
|
- name: matrix-federation
|
||||||
# If you'd like to keep HTTP/3 enabled here (for whatever reason), you may wish to explicitly
|
port: 8449
|
||||||
# set `matrix_playbook_public_matrix_federation_api_traefik_entrypoint_host_bind_port_udp` to something like '127.0.0.1:8449'.
|
host_bind_port: '127.0.0.1:8449'
|
||||||
matrix_playbook_public_matrix_federation_api_traefik_entrypoint_config_http3_enabled: false
|
config: {}
|
||||||
|
# If your reverse-proxy runs on another machine, remove the config above and use this config instead:
|
||||||
# Depending on the value of `matrix_playbook_public_matrix_federation_api_traefik_entrypoint_host_bind_port` above,
|
# config:
|
||||||
# this may need to be reconfigured. See the comments above.
|
# forwardedHeaders:
|
||||||
matrix_playbook_public_matrix_federation_api_traefik_entrypoint_config_custom:
|
# insecure: true
|
||||||
forwardedHeaders:
|
# # trustedIPs: ['IP-ADDRESS-OF-YOUR-REVERSE-PROXY']
|
||||||
insecure: true
|
|
||||||
# trustedIPs: ['IP-ADDRESS-OF-YOUR-REVERSE-PROXY']
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Such a configuration would expose all services on a local port `81` and Matrix Federation on a local port `8449`.
|
For an example where the playbook's Traefik reverse-proxy is fronted by another reverse-proxy running on the same server, see [Nginx reverse-proxy fronting the playbook's Traefik](../examples/nginx/README.md) or [Caddy reverse-proxy fronting the playbook's Traefik](../examples/caddy2/README.md).
|
||||||
|
|
||||||
Your reverse-proxy configuration needs to send traffic to these ports. The [`examples/reverse-proxies` directory](../examples/reverse-proxies/) contains sample configuration for various webservers (Apache2, Caddy, HAproxy, nginx, Nginx Proxy Manager).
|
|
||||||
|
|
||||||
It's important that these webservers proxy-pass requests to the correct place and also set the `Host` HTTP header appropriately. If you don't pass the `Host` header correctly, you would get a 404 not found error from Traefik.
|
|
||||||
|
|
||||||
To put it another way, `curl http://127.0.0.1:81` would give you a 404, but `curl -H 'Host: matrix.example.com' http://127.0.0.1:81` should work.
|
|
||||||
|
|
||||||
|
|
||||||
### Using no reverse-proxy on the Matrix side at all
|
### Using no reverse-proxy on the Matrix side at all
|
||||||
|
|
||||||
Instead of [Fronting the integrated reverse-proxy webserver with another reverse-proxy](#fronting-the-integrated-reverse-proxy-webserver-with-another-reverse-proxy), you can also go another way -- completely disabling the playbook-managed Traefik reverse-proxy. You would then need to reverse-proxy from your own webserver directly to each individual Matrix service.
|
Instead of [Fronting the integrated reverse-proxy webserver with another reverse-proxy](#fronting-the-integrated-reverse-proxy-webserver-with-another-reverse-proxy), you can also go another way -- completely disabling the playbook-managed reverse-proxy. You would then need to reverse-proxy from your own webserver directly to Matrix services.
|
||||||
|
|
||||||
This is more difficult, as you would need to handle the configuration for each service manually. Enabling additional services would come with extra manual work you need to do.
|
This is more difficult, as you would need to handle the configuration for each service manually. Enabling additional services would come with extra manual work you need to do.
|
||||||
|
|
||||||
Also, the Traefik reverse-proxy, besides fronting everything is also serving a 2nd purpose of allowing addons services to communicate with the Matrix homeserver thanks to its `matrix-internal-matrix-client-api` entrypoint (read more about it above). Disabling Traefik completely means the playbook would wire services to directly talk to the homeserver. This can work for basic setups, but not for more complex setups involving [matrix-media-repo](./configuring-playbook-matrix-media-repo.md), [matrix-corporal](./configuring-playbook-matrix-corporal.md) or other such services that need to "steal routes" from the homeserver.
|
If your webserver is on the same machine, sure your web server user (something like `http`, `apache`, `www-data`, `nginx`) is part of the `matrix` group. You should run something like this: `usermod -a -G matrix nginx`. This allows your webserver user to access files owned by the `matrix` group. When using an external nginx webserver, this allows it to read configuration files from `/matrix/nginx-proxy/conf.d`. When using another server, it would make other files, such as `/matrix/static-files/.well-known`, accessible to it.
|
||||||
|
|
||||||
If your webserver is on the same machine, ensure your web server user (something like `http`, `apache`, `www-data`, `nginx`) is part of the `matrix` group. You should run something like this: `usermod -a -G matrix nginx`. This allows your webserver user to access files owned by the `matrix` group, so that it can serve static files from `/matrix/static-files`.
|
#### Using your own nginx reverse-proxy running on the same machine
|
||||||
|
|
||||||
|
**WARNING**: this type of setup is not maintained and will be removed in the future. We recommend that you go for [Fronting the integrated reverse-proxy webserver with another reverse-proxy](#fronting-the-integrated-reverse-proxy-webserver-with-another-reverse-proxy) instead.
|
||||||
|
|
||||||
|
If you'll be using `nginx` running on the same machine (not in a container), you can make the playbook help you generate configuration for `nginx` with this configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
matrix_playbook_reverse_proxy_type: other-nginx-non-container
|
||||||
|
|
||||||
|
# If you want https configured in /matrix/nginx-proxy/conf.d/
|
||||||
|
matrix_nginx_proxy_https_enabled: true
|
||||||
|
|
||||||
|
# If you will manage SSL certificates yourself, uncomment the line below
|
||||||
|
# matrix_ssl_retrieval_method: none
|
||||||
|
|
||||||
|
# If you're using an old nginx version, consider using a custom protocol list
|
||||||
|
# (removing `TLSv1.3` that is enabled by default) to suit your nginx version.
|
||||||
|
# matrix_nginx_proxy_ssl_protocols: "TLSv1.2"
|
||||||
|
```
|
||||||
|
|
||||||
|
You can most likely directly use the config files installed by this playbook at: `/matrix/nginx-proxy/conf.d`. Just include them in your own `nginx.conf` like this: `include /matrix/nginx-proxy/conf.d/*.conf;`
|
||||||
|
|
||||||
|
#### Using your own reverse-proxy running on the same machine or elsewhere
|
||||||
|
|
||||||
|
**WARNING**: this is difficult to set up, likely not very well supported and will be removed in the future. We recommend that you go for [Fronting the integrated reverse-proxy webserver with another reverse-proxy](#fronting-the-integrated-reverse-proxy-webserver-with-another-reverse-proxy) instead.
|
||||||
|
|
||||||
|
To reverse-proxy manually for each service, use configuration like this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# If your reverse-proxy runs on the same machine:
|
||||||
|
matrix_playbook_reverse_proxy_type: other-on-same-host
|
||||||
|
|
||||||
|
# Or, if it runs on another machine:
|
||||||
|
# matrix_playbook_reverse_proxy_type: other-on-another-host
|
||||||
|
|
||||||
|
# Or, optionally customize the network interface prefix (note the trailing `:` character).
|
||||||
|
# For other-on-same-host, the interface defaults to `127.0.0.1:`.
|
||||||
|
# For other-on-another-host, the interface defaults to `0.0.0.0:`.
|
||||||
|
# matrix_playbook_service_host_bind_interface_prefix: '192.168.30.4:'
|
||||||
|
```
|
||||||
|
|
||||||
|
With this configuration, each service will be exposed on a custom port. Example:
|
||||||
|
|
||||||
|
- Synapse will be exposed on port `8008`
|
||||||
|
- [Grafana](configuring-playbook-prometheus-grafana.md) will be exposed on port `3000`
|
||||||
|
- [synapse-admin](configuring-playbook-synapse-admin.md) will be exposed on port `8766`
|
||||||
|
|
||||||
|
You can capture traffic for these services and forward it to their port.
|
||||||
|
Some of these services are configured with certain default expecations with regard to hostname, path, etc., so it's not completely arbitrary where you can host them (unless you change the defaults).
|
||||||
|
|
||||||
|
For each new playbook service that you enable, you'll need special handling.
|
||||||
|
|
||||||
|
The [`examples/`](../examples/) directory contains examples for various servers: Caddy, Apache, HAproxy, Nginx, etc.
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
# Setting up Pantalaimon (E2EE aware proxy daemon) (optional)
|
|
||||||
|
|
||||||
The playbook can install and configure the [pantalaimon](https://github.com/matrix-org/pantalaimon) E2EE aware proxy daemon for you.
|
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/matrix-org/pantalaimon) to learn what it does and why it might be useful to you.
|
|
||||||
|
|
||||||
This role exposes Pantalaimon's API only within the container network, so bots and clients installed on the same machine can use it. In particular the [Draupnir](configuring-playbook-bot-draupnir.md) and [Mjolnir](configuring-playbook-bot-mjolnir.md) roles (and possibly others) can use it.
|
|
||||||
|
|
||||||
## 1. Adjusting the playbook configuration
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
matrix_pantalaimon_enabled: true
|
|
||||||
```
|
|
||||||
|
|
||||||
The default configuration should suffice. For advanced configuration, you can override the variables documented in the role's [defaults](../roles/custom/matrix-pantalaimon/defaults/main.yml).
|
|
||||||
|
|
||||||
## 2. Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
@ -1,16 +1,16 @@
|
|||||||
# Setting up postgres backup (optional)
|
# Setting up postgres backup (optional)
|
||||||
|
|
||||||
The playbook can install and configure [docker-postgres-backup-local](https://github.com/prodrigestivill/docker-postgres-backup-local) for you via the [ansible-role-postgres-backup](https://github.com/mother-of-all-self-hosting/ansible-role-postgres-backup) Ansible role.
|
The playbook can install and configure [docker-postgres-backup-local](https://github.com/prodrigestivill/docker-postgres-backup-local) for you via the [com.devture.ansible.role.postgres_backup](https://github.com/devture/com.devture.ansible.role.postgres_backup) Ansible role.
|
||||||
|
|
||||||
For a more complete backup solution (one that includes not only Postgres, but also other configuration/data files), you may wish to look into [BorgBackup](configuring-playbook-backup-borg.md) instead.
|
For a more complete backup solution (one that includes not only Postgres, but also other configuration/data files), you may wish to look into [borg backup](configuring-playbook-backup-borg.md) instead.
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable Postgres backup, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Minimal working configuration (`inventory/host_vars/matrix.DOMAIN/vars.yml`) to enable Postgres backup:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
postgres_backup_enabled: true
|
devture_postgres_backup_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
Refer to the table below for additional configuration variables and their default values.
|
Refer to the table below for additional configuration variables and their default values.
|
||||||
@ -18,18 +18,18 @@ Refer to the table below for additional configuration variables and their defaul
|
|||||||
|
|
||||||
| Name | Default value | Description |
|
| Name | Default value | Description |
|
||||||
| :-------------------------------- | :--------------------------- | :--------------------------------------------------------------- |
|
| :-------------------------------- | :--------------------------- | :--------------------------------------------------------------- |
|
||||||
|`postgres_backup_enabled`|`false`|Set to true to use [docker-postgres-backup-local](https://github.com/prodrigestivill/docker-postgres-backup-local) to create automatic database backups|
|
|`devture_postgres_backup_enabled`|`false`|Set to true to use [docker-postgres-backup-local](https://github.com/prodrigestivill/docker-postgres-backup-local) to create automatic database backups|
|
||||||
|`postgres_backup_schedule`| `'@daily'` |Cron-schedule specifying the interval between postgres backups.|
|
|`devture_postgres_backup_schedule`| `'@daily'` |Cron-schedule specifying the interval between postgres backups.|
|
||||||
|`postgres_backup_keep_days`|`7`|Number of daily backups to keep|
|
|`devture_postgres_backup_keep_days`|`7`|Number of daily backups to keep|
|
||||||
|`postgres_backup_keep_weeks`|`4`|Number of weekly backups to keep|
|
|`devture_postgres_backup_keep_weeks`|`4`|Number of weekly backups to keep|
|
||||||
|`postgres_backup_keep_months`|`12`|Number of monthly backups to keep|
|
|`devture_postgres_backup_keep_months`|`12`|Number of monthly backups to keep|
|
||||||
|`postgres_backup_base_path` | `"{{ matrix_base_data_path }}/postgres-backup"` | Base path for postgres-backup. Also see `postgres_backup_data_path` |
|
|`devture_postgres_backup_base_path` | `"{{ matrix_base_data_path }}/postgres-backup"` | Base path for postgres-backup. Also see `devture_postgres_backup_data_path` |
|
||||||
|`postgres_backup_data_path` | `"{{ postgres_backup_base_path }}/data"` | Storage path for postgres-backup database backups |
|
|`devture_postgres_backup_data_path` | `"{{ devture_postgres_backup_base_path }}/data"` | Storage path for postgres-backup database backups |
|
||||||
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command:
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```
|
```
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
# Enabling metrics and graphs (Prometheus, Grafana) for your Matrix server (optional)
|
# Enabling metrics and graphs for your Matrix server (optional)
|
||||||
|
|
||||||
The playbook can install [Grafana](https://grafana.com/) with [Prometheus](https://prometheus.io/) and configure performance metrics of your homeserver with graphs for you.
|
It can be useful to have some (visual) insight into the performance of your homeserver.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
You can enable this with the following settings in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
To enable Grafana and/or Prometheus, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
Remember to add `stats.<your-domain>` to DNS as described in [Configuring DNS](configuring-dns.md) before running the playbook.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
prometheus_enabled: true
|
prometheus_enabled: true
|
||||||
@ -22,7 +22,7 @@ grafana_enabled: true
|
|||||||
|
|
||||||
grafana_anonymous_access: false
|
grafana_anonymous_access: false
|
||||||
|
|
||||||
# This has no relation to your Matrix user ID. It can be any username you'd like.
|
# This has no relation to your Matrix user id. It can be any username you'd like.
|
||||||
# Changing the username subsequently won't work.
|
# Changing the username subsequently won't work.
|
||||||
grafana_default_admin_user: "some_username_chosen_by_you"
|
grafana_default_admin_user: "some_username_chosen_by_you"
|
||||||
|
|
||||||
@ -30,32 +30,10 @@ grafana_default_admin_user: "some_username_chosen_by_you"
|
|||||||
grafana_default_admin_password: "some_strong_password_chosen_by_you"
|
grafana_default_admin_password: "some_strong_password_chosen_by_you"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
By default, a [Grafana](https://grafana.com/) web user-interface will be available at `https://stats.<your-domain>`.
|
||||||
|
|
||||||
The retention policy of Prometheus metrics is [15 days by default](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects). Older data gets deleted automatically.
|
The retention policy of Prometheus metrics is [15 days by default](https://prometheus.io/docs/prometheus/latest/storage/#operational-aspects). Older data gets deleted automatically.
|
||||||
|
|
||||||
### Adjusting the Grafana URL
|
|
||||||
|
|
||||||
By default, this playbook installs Grafana web user-interface on the `stats.` subdomain (`stats.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `grafana_hostname` variable, you can easily make the service available at a **different hostname** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname
|
|
||||||
grafana_hostname: grafana.example.com
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain, **you may need to adjust your DNS** records to point the Grafana domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `stats`. See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
**Note**: It is possible to install Prometheus without installing Grafana. This case it is not required to create the CNAME record.
|
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## What does it do?
|
## What does it do?
|
||||||
|
|
||||||
@ -65,7 +43,7 @@ Name | Description
|
|||||||
`prometheus_node_exporter_enabled`|[Node Exporter](https://prometheus.io/docs/guides/node-exporter/) is an addon of sorts to Prometheus that collects generic system information such as CPU, memory, filesystem, and even system temperatures
|
`prometheus_node_exporter_enabled`|[Node Exporter](https://prometheus.io/docs/guides/node-exporter/) is an addon of sorts to Prometheus that collects generic system information such as CPU, memory, filesystem, and even system temperatures
|
||||||
`prometheus_postgres_exporter_enabled`|[Postgres Exporter](configuring-playbook-prometheus-postgres.md) is an addon of sorts to expose Postgres database metrics to Prometheus.
|
`prometheus_postgres_exporter_enabled`|[Postgres Exporter](configuring-playbook-prometheus-postgres.md) is an addon of sorts to expose Postgres database metrics to Prometheus.
|
||||||
`matrix_prometheus_nginxlog_exporter_enabled`|[NGINX Log Exporter](configuring-playbook-prometheus-nginxlog.md) is an addon of sorts to expose NGINX logs to Prometheus.
|
`matrix_prometheus_nginxlog_exporter_enabled`|[NGINX Log Exporter](configuring-playbook-prometheus-nginxlog.md) is an addon of sorts to expose NGINX logs to Prometheus.
|
||||||
`grafana_enabled`|[Grafana](https://grafana.com/) is the visual component. It shows (on the `stats.example.com` subdomain) the dashboards with the graphs that we're interested in
|
`grafana_enabled`|[Grafana](https://grafana.com/) is the visual component. It shows (on the `stats.<your-domain>` subdomain) the dashboards with the graphs that we're interested in
|
||||||
`grafana_anonymous_access`|By default you need to log in to see graphs. If you want to publicly share your graphs (e.g. when asking for help in [`#synapse:matrix.org`](https://matrix.to/#/#synapse:matrix.org?via=matrix.org&via=privacytools.io&via=mozilla.org)) you'll want to enable this option.
|
`grafana_anonymous_access`|By default you need to log in to see graphs. If you want to publicly share your graphs (e.g. when asking for help in [`#synapse:matrix.org`](https://matrix.to/#/#synapse:matrix.org?via=matrix.org&via=privacytools.io&via=mozilla.org)) you'll want to enable this option.
|
||||||
`grafana_default_admin_user`<br>`grafana_default_admin_password`|By default Grafana creates a user with `admin` as the username and password. If you feel this is insecure and you want to change it beforehand, you can do that here
|
`grafana_default_admin_user`<br>`grafana_default_admin_password`|By default Grafana creates a user with `admin` as the username and password. If you feel this is insecure and you want to change it beforehand, you can do that here
|
||||||
|
|
||||||
@ -83,36 +61,49 @@ Most of our docker containers run with limited system access, but the `prometheu
|
|||||||
|
|
||||||
When you'd like **to collect metrics from an external Prometheus server**, you need to expose service metrics outside of the container network.
|
When you'd like **to collect metrics from an external Prometheus server**, you need to expose service metrics outside of the container network.
|
||||||
|
|
||||||
The playbook provides a single endpoint (`https://matrix.example.com/metrics/*`), under which various services may expose their metrics (e.g. `/metrics/node-exporter`, `/metrics/postgres-exporter`, `/metrics/hookshot`, etc). To expose all services on this `/metrics/*` feature, use `matrix_metrics_exposure_enabled`. To protect access using [Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication), see `matrix_metrics_exposure_http_basic_auth_enabled` and `matrix_metrics_exposure_http_basic_auth_users` below.
|
The playbook provides a single endpoint (`https://matrix.DOMAIN/metrics/*`), under which various services may expose their metrics (e.g. `/metrics/node-exporter`, `/metrics/postgres-exporter`, `/metrics/hookshot`, etc). To enable this `/metrics/*` feature, use `matrix_nginx_proxy_proxy_matrix_metrics_enabled`. To protect access using [Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication), see `matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_enabled` below.
|
||||||
|
|
||||||
When using `matrix_metrics_exposure_enabled`, you don't need to expose metrics for individual services one by one.
|
|
||||||
|
|
||||||
The following variables may be of interest:
|
The following variables may be of interest:
|
||||||
|
|
||||||
Name | Description
|
Name | Description
|
||||||
-----|----------
|
-----|----------
|
||||||
`matrix_metrics_exposure_enabled`|Set this to `true` to **enable metrics exposure for all services** on `https://matrix.example.com/metrics/*`. If you think this is too much, refer to the helpful (but nonexhaustive) list of individual `matrix_SERVICE_metrics_proxying_enabled` (or similar) variables below for exposing metrics on a per-service basis.
|
`matrix_nginx_proxy_proxy_matrix_metrics_enabled`|Set this to `true` to enable metrics exposure for various services on `https://matrix.DOMAIN/metrics/*`. Refer to the individual `matrix_SERVICE_metrics_proxying_enabled` variables below for exposing metrics for each individual service.
|
||||||
`matrix_metrics_exposure_http_basic_auth_enabled`|Set this to `true` to protect all `https://matrix.example.com/metrics/*` endpoints with [Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) (see the other variables below for supplying the actual credentials). When enabled, all endpoints beneath `/metrics` will be protected with the same credentials
|
`matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_enabled`|Set this to `true` to protect all `https://matrix.DOMAIN/metrics/*` endpoints with [Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) (see the other variables below for supplying the actual credentials). When enabled, all endpoints beneath `/metrics` will be protected with the same credentials
|
||||||
`matrix_metrics_exposure_http_basic_auth_users`|Set this to the Basic Authentication credentials (raw `htpasswd` file content) used to protect `/metrics/*`. This htpasswd-file needs to be generated with the `htpasswd` tool and can include multiple username/password pairs.
|
`matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_username`|Set this to the Basic Authentication username you'd like to protect `/metrics/*` with. You also need to set `matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_password`. If one username/password pair is not enough, you can leave the `username` and `password` variables unset and use `matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_raw_content` instead
|
||||||
|
`matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_password`|Set this to the Basic Authentication password you'd like to protect `/metrics/*` with
|
||||||
|
`matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_raw_content`|Set this to the Basic Authentication credentials (raw `htpasswd` file content) used to protect `/metrics/*`. This htpasswd-file needs to be generated with the `htpasswd` tool and can include multiple username/password pairs. If you only need one credential, use `matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_username` and `matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_password` instead.
|
||||||
`matrix_synapse_metrics_enabled`|Set this to `true` to make Synapse expose metrics (locally, on the container network)
|
`matrix_synapse_metrics_enabled`|Set this to `true` to make Synapse expose metrics (locally, on the container network)
|
||||||
`matrix_synapse_metrics_proxying_enabled`|Set this to `true` to expose Synapse's metrics on `https://matrix.example.com/metrics/synapse/main-process` and `https://matrix.example.com/metrics/synapse/worker/TYPE-ID`. Read [below](#collecting-synapse-worker-metrics-to-an-external-prometheus-server) if you're running a Synapse worker setup (`matrix_synapse_workers_enabled: true`). To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above.
|
`matrix_synapse_metrics_proxying_enabled`|Set this to `true` to expose Synapse's metrics on `https://matrix.DOMAIN/metrics/synapse/main-process` and `https://matrix.DOMAIN/metrics/synapse/worker/TYPE-ID` (only takes effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true`). Read [below](#collecting-synapse-worker-metrics-to-an-external-prometheus-server) if you're running a Synapse worker setup (`matrix_synapse_workers_enabled: true`).
|
||||||
`prometheus_node_exporter_enabled`|Set this to `true` to enable the node (general system stats) exporter (locally, on the container network)
|
`prometheus_node_exporter_enabled`|Set this to `true` to enable the node (general system stats) exporter (locally, on the container network)
|
||||||
`prometheus_node_exporter_container_labels_traefik_enabled`|Set this to `true` to expose the node (general system stats) metrics on `https://matrix.example.com/metrics/node-exporter`. To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above.
|
`matrix_prometheus_services_proxy_connect_prometheus_node_exporter_metrics_proxying_enabled`|Set this to `true` to expose the node (general system stats) metrics on `https://matrix.DOMAIN/metrics/node-exporter` (only takes effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true`)
|
||||||
`prometheus_postgres_exporter_enabled`|Set this to `true` to enable the [Postgres exporter](configuring-playbook-prometheus-postgres.md) (locally, on the container network)
|
`prometheus_postgres_exporter_enabled`|Set this to `true` to enable the [Postgres exporter](configuring-playbook-prometheus-postgres.md) (locally, on the container network)
|
||||||
`prometheus_postgres_exporter_container_labels_traefik_enabled`|Set this to `true` to expose the [Postgres exporter](configuring-playbook-prometheus-postgres.md) metrics on `https://matrix.example.com/metrics/postgres-exporter`. To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above.
|
|
||||||
`matrix_prometheus_nginxlog_exporter_enabled`|Set this to `true` to enable the [NGINX Log exporter](configuring-playbook-prometheus-nginxlog.md) (locally, on the container network)
|
`matrix_prometheus_nginxlog_exporter_enabled`|Set this to `true` to enable the [NGINX Log exporter](configuring-playbook-prometheus-nginxlog.md) (locally, on the container network)
|
||||||
`matrix_sliding_sync_metrics_enabled`|Set this to `true` to make [Sliding Sync](configuring-playbook-sliding-sync-proxy.md) expose metrics (locally, on the container network)
|
`matrix_prometheus_services_proxy_connect_prometheus_postgres_exporter_metrics_proxying_enabled`|Set this to `true` to expose the [Postgres exporter](configuring-playbook-prometheus-postgres.md) metrics on `https://matrix.DOMAIN/metrics/postgres-exporter` (only takes effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true`)
|
||||||
`matrix_sliding_sync_metrics_proxying_enabled`|Set this to `true` to expose the [Sliding Sync](configuring-playbook-sliding-sync-proxy.md) metrics on `https://matrix.example.com/metrics/sliding-sync`. To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above.
|
|
||||||
`matrix_bridge_hookshot_metrics_enabled`|Set this to `true` to make [Hookshot](configuring-playbook-bridge-hookshot.md) expose metrics (locally, on the container network)
|
`matrix_bridge_hookshot_metrics_enabled`|Set this to `true` to make [Hookshot](configuring-playbook-bridge-hookshot.md) expose metrics (locally, on the container network)
|
||||||
`matrix_bridge_hookshot_metrics_proxying_enabled`|Set this to `true` to expose the [Hookshot](configuring-playbook-bridge-hookshot.md) metrics on `https://matrix.example.com/metrics/hookshot`. To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above.
|
`matrix_bridge_hookshot_metrics_proxying_enabled`|Set this to `true` to expose the [Hookshot](configuring-playbook-bridge-hookshot.md) metrics on `https://matrix.DOMAIN/metrics/hookshot` (only takes effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true`)
|
||||||
`matrix_SERVICE_metrics_proxying_enabled`|Various other services/roles may provide similar `_metrics_enabled` and `_metrics_proxying_enabled` variables for exposing their metrics. Refer to each role for details. To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` above or `matrix_SERVICE_container_labels_metrics_middleware_basic_auth_enabled`/`matrix_SERVICE_container_labels_metrics_middleware_basic_auth_users` variables provided by each role.
|
`matrix_SERVICE_metrics_proxying_enabled`|Various other services/roles may provide similar `_metrics_enabled` and `_metrics_proxying_enabled` variables for exposing their metrics. Refer to each role for details. Only takes effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true`
|
||||||
|
`matrix_nginx_proxy_proxy_matrix_metrics_additional_user_location_configuration_blocks`|Add nginx `location` blocks to this list if you'd like to expose additional exporters manually (see below)
|
||||||
`matrix_media_repo_metrics_enabled`|Set this to `true` to make media-repo expose metrics (locally, on the container network)
|
`matrix_media_repo_metrics_enabled`|Set this to `true` to make media-repo expose metrics (locally, on the container network)
|
||||||
|
|
||||||
|
Example for how to make use of `matrix_nginx_proxy_proxy_matrix_metrics_additional_user_location_configuration_blocks` for exposing additional metrics locations:
|
||||||
|
```nginx
|
||||||
|
matrix_nginx_proxy_proxy_matrix_metrics_additional_user_location_configuration_blocks:
|
||||||
|
- 'location /metrics/another-service {
|
||||||
|
resolver 127.0.0.11 valid=5s;
|
||||||
|
proxy_pass http://matrix-another-service:9100/metrics;
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
Using `matrix_nginx_proxy_proxy_matrix_metrics_additional_user_location_configuration_blocks` only takes effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true` (see above).
|
||||||
|
|
||||||
|
Note : The playbook will hash the basic_auth password for you on setup. Thus, you need to give the plain-text version of the password as a variable.
|
||||||
|
|
||||||
### Collecting Synapse worker metrics to an external Prometheus server
|
### Collecting Synapse worker metrics to an external Prometheus server
|
||||||
|
|
||||||
If you are using workers (`matrix_synapse_workers_enabled: true`) and have enabled `matrix_synapse_metrics_proxying_enabled` as described above, the playbook will also automatically expose all Synapse worker threads' metrics to `https://matrix.example.com/metrics/synapse/worker/ID`, where `ID` corresponds to the worker `id` as exemplified in `matrix_synapse_workers_enabled_list`.
|
If you are using workers (`matrix_synapse_workers_enabled: true`) and have enabled `matrix_synapse_metrics_proxying_enabled` as described above, the playbook will also automatically expose all Synapse worker threads' metrics to `https://matrix.DOMAIN/metrics/synapse/worker/ID`, where `ID` corresponds to the worker `id` as exemplified in `matrix_synapse_workers_enabled_list`.
|
||||||
|
|
||||||
The playbook also generates an exemplary config file (`/matrix/synapse/external_prometheus.yml.template`) with all the correct paths which you can copy to your Prometheus server and adapt to your needs. Make sure to edit the specified `password_file` path and contents and path to your `synapse-v2.rules`. It will look a bit like this:
|
The playbook also generates an exemplary config file (`/matrix/synapse/external_prometheus.yml.template`) with all the correct paths which you can copy to your Prometheus server and adapt to your needs. Make sure to edit the specified `password_file` path and contents and path to your `synapse-v2.rules`.
|
||||||
|
It will look a bit like this:
|
||||||
```yaml
|
```yaml
|
||||||
scrape_configs:
|
scrape_configs:
|
||||||
- job_name: 'synapse'
|
- job_name: 'synapse'
|
||||||
@ -122,7 +113,7 @@ scrape_configs:
|
|||||||
username: prometheus
|
username: prometheus
|
||||||
password_file: /etc/prometheus/password.pwd
|
password_file: /etc/prometheus/password.pwd
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ['matrix.example.com:443']
|
- targets: ['matrix.DOMAIN:443']
|
||||||
labels:
|
labels:
|
||||||
job: "master"
|
job: "master"
|
||||||
index: 1
|
index: 1
|
||||||
@ -133,7 +124,7 @@ scrape_configs:
|
|||||||
username: prometheus
|
username: prometheus
|
||||||
password_file: /etc/prometheus/password.pwd
|
password_file: /etc/prometheus/password.pwd
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ['matrix.example.com:443']
|
- targets: ['matrix.DOMAIN:443']
|
||||||
labels:
|
labels:
|
||||||
job: "generic_worker"
|
job: "generic_worker"
|
||||||
index: 18111
|
index: 18111
|
||||||
@ -142,8 +133,7 @@ scrape_configs:
|
|||||||
|
|
||||||
## More information
|
## More information
|
||||||
|
|
||||||
- [Enabling synapse-usage-exporter for Synapse usage statistics](configuring-playbook-synapse-usage-exporter.md)
|
- [Understanding Synapse Performance Issues Through Grafana Graphs](https://github.com/matrix-org/synapse/wiki/Understanding-Synapse-Performance-Issues-Through-Grafana-Graphs) at the Synapse Github Wiki
|
||||||
- [Understanding Synapse Performance Issues Through Grafana Graphs](https://element-hq.github.io/synapse/latest/usage/administration/understanding_synapse_through_grafana_graphs.html) at the Synapse Github Wiki
|
- [The Prometheus scraping rules](https://github.com/matrix-org/synapse/tree/master/contrib/prometheus) (we use v2)
|
||||||
- [The Prometheus scraping rules](https://github.com/element-hq/synapse/tree/master/contrib/prometheus) (we use v2)
|
- [The Synapse Grafana dashboard](https://github.com/matrix-org/synapse/tree/master/contrib/grafana)
|
||||||
- [The Synapse Grafana dashboard](https://github.com/element-hq/synapse/tree/master/contrib/grafana)
|
|
||||||
- [The Node Exporter dashboard](https://github.com/rfrail3/grafana-dashboards) (for generic non-synapse performance graphs)
|
- [The Node Exporter dashboard](https://github.com/rfrail3/grafana-dashboards) (for generic non-synapse performance graphs)
|
||||||
|
@ -1,33 +1,34 @@
|
|||||||
# Enabling metrics and graphs for NginX logs (optional)
|
# Enabling metrics and graphs for NginX logs (optional)
|
||||||
|
|
||||||
It can be useful to have some (visual) insight into [nginx](https://nginx.org/) logs.
|
It can be useful to have some (visual) insight into NignX logs.
|
||||||
|
|
||||||
This adds [prometheus-nginxlog-exporter](https://github.com/martin-helmich/prometheus-nginxlog-exporter/) to your Matrix deployment.
|
This adds [prometheus-nginxlog-exporter](https://github.com/martin-helmich/prometheus-nginxlog-exporter/) to your matrix deployment.
|
||||||
|
It will provide a prometheus 'metrics' endpoint exposing data from both the `matrix-nginx-proxy` and `matrix-synapse-reverse-proxy-companion` logs and automatically aggregates the data with prometheus.
|
||||||
|
Optionally it visualizes the data, if [`matrix-grafana`](configuring-playbook-prometheus-grafana.md) is enabled, by means of a dedicated Grafana dashboard named `NGINX PROXY`
|
||||||
|
|
||||||
It will collect access logs from various nginx reverse-proxies which may be used internally (e.g. `matrix-synapse-reverse-proxy-companion`, if Synapse workers are enabled) and will make them available at a Prometheus-compatible `/metrics` endpoint.
|
You can enable this role by adding the following settings in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
**Note**: nginx is only used internally by this Ansible playbook. With Traefik being our default reverse-proxy, collecting nginx metrics is less relevant.
|
|
||||||
|
|
||||||
To make use of this, you need to install [Prometheus](./configuring-playbook-prometheus-grafana.md) either via the playbook or externally. When using an external Prometheus, configuration adjustments are necessary - see [Save metrics on an external Prometheus server](#save-metrics-on-an-external-prometheus-server).
|
|
||||||
|
|
||||||
If your setup includes [Grafana](./configuring-playbook-prometheus-grafana.md), a dedicated `NGINX PROXY` Grafana dashboard will be created.
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_prometheus_nginxlog_exporter_enabled: true
|
matrix_prometheus_nginxlog_exporter_enabled: true
|
||||||
|
|
||||||
|
# required depency
|
||||||
|
prometheus_enabled: true
|
||||||
|
|
||||||
|
# optional for visualization
|
||||||
|
grafana_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
x | Prerequisites | Variable | Description
|
||||||
|
|:--:|:--:|:--:|:--|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
**REQUIRED** | `matrix-prometheus`| `prometheus_enabled`|[Prometheus](https://prometheus.io) is a time series database. It holds all the data we're going to talk about.
|
||||||
|
_Optional_ | [`matrix-grafana`](configuring-playbook-prometheus-grafana.md) | [`grafana_enabled`](configuring-playbook-prometheus-grafana.md)|[Grafana](https://grafana.com) is the visual component. It shows (on the `stats.<your-domain>` subdomain) graphs that we're interested in. When enabled the `NGINX PROXY` dashboard is automatically added.
|
||||||
|
|
||||||
## Docker Image Compatibility
|
## Docker Image Compatibility
|
||||||
|
|
||||||
At the moment of writing only images for `amd64` and `arm64` architectures are available. The playbook currently does not support [self-building](./self-building.md) a container image on other architectures. You can however use a custom-build image by setting:
|
At the moment of writing only images for `amd64` and `arm64` architectures are available
|
||||||
|
|
||||||
|
The playbook currently does not support building an image.
|
||||||
|
You can however use a custom-build image by setting
|
||||||
```yaml
|
```yaml
|
||||||
matrix_prometheus_nginxlog_exporter_docker_image_arch_check_enabled: false
|
matrix_prometheus_nginxlog_exporter_docker_image_arch_check_enabled: false
|
||||||
matrix_prometheus_nginxlog_exporter_docker_image: path/to/docker/image:tag
|
matrix_prometheus_nginxlog_exporter_docker_image: path/to/docker/image:tag
|
||||||
@ -35,16 +36,24 @@ matrix_prometheus_nginxlog_exporter_docker_image: path/to/docker/image:tag
|
|||||||
|
|
||||||
## Security and privacy
|
## Security and privacy
|
||||||
|
|
||||||
Metrics and resulting graphs can contain a lot of information. NginX logs contain information like IP address, URLs, UserAgents and more. This information can reveal usage patterns and could be considered Personally Identifiable Information (PII). Think about this before enabling (anonymous) access. Please make sure you change the default Grafana password.
|
Metrics and resulting graphs can contain a lot of information. NginX logs contain information like IP address, URLs, UserAgents and more. This information can reveal usage patterns and could be considered Personally Identifiable Information (PII). Think about this before enabling (anonymous) access.
|
||||||
|
Please make sure you change the default Grafana password.
|
||||||
|
|
||||||
## Save metrics on an external Prometheus server
|
## Save metrics on an external Prometheus server
|
||||||
|
|
||||||
The playbook will automatically integrate the metrics into the [Prometheus](./configuring-playbook-prometheus-grafana.md) server provided with this playbook (if enabled). In such cases, the metrics endpoint is not exposed publicly - it's only available on the container network.
|
The playbook will automatically integrate the metrics into the Prometheus server provided with this playbook. You can choose to save data on an external Prometheus instance.
|
||||||
|
|
||||||
When using an external Prometheus server, you'll need to expose metrics publicly. See [Collecting metrics to an external Prometheus server](./configuring-playbook-prometheus-grafana.md#collecting-metrics-to-an-external-prometheus-server).
|
The metrics of this role will be exposed on `https://matrix.DOMAIN/metrics/nginxlog` when setting
|
||||||
|
```yaml
|
||||||
|
matrix_prometheus_nginxlog_exporter_metrics_proxying_enabled: true
|
||||||
|
|
||||||
You can either use `matrix_prometheus_nginxlog_exporter_metrics_proxying_enabled: true` to expose just this one service, or `matrix_metrics_exposure_enabled: true` to expose all services.
|
# required dependency
|
||||||
|
matrix_nginx_proxy_proxy_matrix_metrics_enabled: true
|
||||||
|
```
|
||||||
|
The playbook can provide a single endpoint (`https://matrix.DOMAIN/metrics/*`), under which various services may expose their metrics (e.g. `/metrics/node-exporter`, `/metrics/postgres-exporter`, `/metrics/nginxlog`, etc). To enable this `/metrics/*` feature, use `matrix_nginx_proxy_proxy_matrix_metrics_enabled`. To protect access using [Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication), see `matrix_nginx_proxy_proxy_matrix_metrics_basic_auth_enabled`.
|
||||||
|
|
||||||
Whichever way you go with, this service will expose its metrics endpoint **without password-protection** at `https://matrix.example.com/metrics/nginxlog` by default.
|
The following variables may be of interest:
|
||||||
|
|
||||||
For password-protection, use (`matrix_metrics_exposure_http_basic_auth_enabled` and `matrix_metrics_exposure_http_basic_auth_users`) or (`matrix_prometheus_nginxlog_exporter_container_labels_metrics_middleware_basic_auth_enabled` and `matrix_prometheus_nginxlog_exporter_container_labels_metrics_middleware_basic_auth_users`).
|
Name | Description
|
||||||
|
-----|----------
|
||||||
|
`matrix_nginx_proxy_proxy_matrix_metrics_enabled`|Set this to `true` to enable metrics exposure for various services on `https://matrix.DOMAIN/metrics/*`. Refer to the individual `matrix_SERVICE_metrics_proxying_enabled` variables below for exposing metrics for each individual service.
|
||||||
|
@ -2,18 +2,13 @@
|
|||||||
|
|
||||||
Expanding on the metrics exposed by the [synapse exporter and the node exporter](configuring-playbook-prometheus-grafana.md), the playbook enables the [postgres exporter](https://github.com/prometheus-community/postgres_exporter) that exposes more detailed information about what's happening on your postgres database.
|
Expanding on the metrics exposed by the [synapse exporter and the node exporter](configuring-playbook-prometheus-grafana.md), the playbook enables the [postgres exporter](https://github.com/prometheus-community/postgres_exporter) that exposes more detailed information about what's happening on your postgres database.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
You can enable this with the following settings in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
To enable the postgres exporter, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
prometheus_postgres_exporter_enabled: true
|
prometheus_postgres_exporter_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
|
||||||
## What does it do?
|
## What does it do?
|
||||||
|
|
||||||
Name | Description
|
Name | Description
|
||||||
@ -21,9 +16,10 @@ Name | Description
|
|||||||
`prometheus_postgres_exporter_enabled`|Enable the postgres prometheus exporter. This sets up the docker container, connects it to the database and adds a 'job' to the prometheus config which tells prometheus about this new exporter. The default is 'false'
|
`prometheus_postgres_exporter_enabled`|Enable the postgres prometheus exporter. This sets up the docker container, connects it to the database and adds a 'job' to the prometheus config which tells prometheus about this new exporter. The default is 'false'
|
||||||
`prometheus_postgres_exporter_database_username`| The 'username' for the user that the exporter uses to connect to the database. The default is 'matrix_prometheus_postgres_exporter'
|
`prometheus_postgres_exporter_database_username`| The 'username' for the user that the exporter uses to connect to the database. The default is 'matrix_prometheus_postgres_exporter'
|
||||||
`prometheus_postgres_exporter_database_password`| The 'password' for the user that the exporter uses to connect to the database. By default, this is auto-generated by the playbook
|
`prometheus_postgres_exporter_database_password`| The 'password' for the user that the exporter uses to connect to the database. By default, this is auto-generated by the playbook
|
||||||
`prometheus_postgres_exporter_container_labels_traefik_enabled`|If set to `true`, exposes the Postgres exporter metrics on `https://matrix.example.com/metrics/postgres-exporter` for usage with an [external Prometheus server](configuring-playbook-prometheus-grafana.md#collecting-metrics-to-an-external-prometheus-server). To password-protect the metrics, see `matrix_metrics_exposure_http_basic_auth_users` on that other documentation page.
|
`matrix_prometheus_services_proxy_connect_prometheus_postgres_exporter_metrics_proxying_enabled`|If set to `true`, exposes the Postgres exporter metrics on `https://matrix.DOMAIN/metrics/postgres-exporter` for usage with an [external Prometheus server](configuring-playbook-prometheus-grafana.md#collecting-metrics-to-an-external-prometheus-server) (only takes effect if `matrix_nginx_proxy_proxy_matrix_metrics_enabled: true`)
|
||||||
|
|
||||||
|
|
||||||
## More information
|
## More information
|
||||||
|
|
||||||
- [The PostgresSQL dashboard](https://grafana.com/grafana/dashboards/9628) (generic postgres dashboard)
|
- [The PostgresSQL dashboard](https://grafana.com/grafana/dashboards/9628) (generic postgres dashboard)
|
||||||
|
|
||||||
|
@ -1,18 +1,44 @@
|
|||||||
# Setting up the rageshake bug report server (optional)
|
# Setting up Rageshake (optional)
|
||||||
|
|
||||||
The playbook can install and configure the [rageshake](https://github.com/matrix-org/rageshake) bug report server for you.
|
The playbook can install and configure the [rageshake](https://github.com/matrix-org/rageshake) bug report server for you.
|
||||||
|
|
||||||
This is useful if you're developing your own applications and would like to collect bug reports for them.
|
This is useful if you're developing your own applications and would like to collect bug reports for them.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
To enable rageshake, add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
## Decide on a domain and path
|
||||||
|
|
||||||
|
By default, Rageshake is configured to use its own dedicated domain (`rageshake.DOMAIN`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
||||||
|
|
||||||
|
You can override the domain and path like this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Switch to the domain used for Matrix services (`matrix.DOMAIN`),
|
||||||
|
# so we won't need to add additional DNS records for Rageshake.
|
||||||
|
matrix_rageshake_hostname: "{{ matrix_server_fqn_matrix }}"
|
||||||
|
|
||||||
|
# Expose under the /rageshake subpath
|
||||||
|
matrix_rageshake_path_prefix: /rageshake
|
||||||
|
```
|
||||||
|
|
||||||
|
**NOTE**: When using `matrix-nginx-proxy` instead of Traefik, you won't be able to override the path prefix. You can only override the domain, but that needs to happen using another variable: `matrix_server_fqn_rageshake` (e.g. `matrix_server_fqn_rageshake: "some-domain.{{ matrix_domain }}"`).
|
||||||
|
|
||||||
|
|
||||||
|
## Adjusting DNS records
|
||||||
|
|
||||||
|
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Rageshake domain to the Matrix server.
|
||||||
|
|
||||||
|
If you've decided to reuse the `matrix.` domain, you won't need to do any extra DNS configuration.
|
||||||
|
|
||||||
|
|
||||||
|
## Enabling the Rageshake service
|
||||||
|
|
||||||
|
Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file (adapt to your needs):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_rageshake_enabled: true
|
matrix_rageshake_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
rageshake has various options which don't have dedicated Ansible variables. You can see the full list of options in the [`rageshake.sample.yaml` file](https://github.com/matrix-org/rageshake/blob/master/rageshake.sample.yaml).
|
Rageshake has various options which don't have dedicated Ansible variables. You can see the full list of options in the [`rageshake.sample.yaml` file](https://github.com/matrix-org/rageshake/blob/master/rageshake.sample.yaml).
|
||||||
|
|
||||||
To set these, you can make use of the `matrix_rageshake_configuration_extension_yaml` variable like this:
|
To set these, you can make use of the `matrix_rageshake_configuration_extension_yaml` variable like this:
|
||||||
|
|
||||||
@ -24,34 +50,10 @@ matrix_rageshake_configuration_extension_yaml: |
|
|||||||
my-app: octocat/HelloWorld
|
my-app: octocat/HelloWorld
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the rageshake URL
|
|
||||||
|
|
||||||
By default, this playbook installs rageshake on the `rageshake.` subdomain (`rageshake.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `matrix_rageshake_hostname` and `matrix_rageshake_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
|
||||||
# so we won't need to add additional DNS records for rageshake.
|
|
||||||
matrix_rageshake_hostname: "{{ matrix_server_fqn_matrix }}"
|
|
||||||
|
|
||||||
# Expose under the /rageshake subpath
|
|
||||||
matrix_rageshake_path_prefix: /rageshake
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the rageshake domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `rageshake`. 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
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
```
|
```
|
||||||
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
|
@ -4,9 +4,7 @@ The playbook can install and configure [matrix-synapse-rest-auth](https://github
|
|||||||
|
|
||||||
See that project's documentation to learn what it does and why it might be useful to you.
|
See that project's documentation to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
If you decide that you'd like to let this playbook install it for you, you need some configuration like this:
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_synapse_ext_password_provider_rest_auth_enabled: true
|
matrix_synapse_ext_password_provider_rest_auth_enabled: true
|
||||||
@ -16,6 +14,7 @@ matrix_synapse_ext_password_provider_rest_auth_registration_profile_name_autofil
|
|||||||
matrix_synapse_ext_password_provider_rest_auth_login_profile_name_autofill: false
|
matrix_synapse_ext_password_provider_rest_auth_login_profile_name_autofill: false
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Authenticating only using a password provider
|
## Authenticating only using a password provider
|
||||||
|
|
||||||
If you wish for users to **authenticate only against configured password providers** (like this one), **without consulting Synapse's local database**, feel free to disable it:
|
If you wish for users to **authenticate only against configured password providers** (like this one), **without consulting Synapse's local database**, feel free to disable it:
|
||||||
@ -23,7 +22,3 @@ If you wish for users to **authenticate only against configured password provide
|
|||||||
```yaml
|
```yaml
|
||||||
matrix_synapse_password_config_localdb_enabled: false
|
matrix_synapse_password_config_localdb_enabled: false
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Configuring Riot-web (optional)
|
# Configuring Riot-web (optional)
|
||||||
|
|
||||||
By default, this playbook **used to install** the [Riot-web](https://github.com/element-hq/riot-web) Matrix client web application.
|
By default, this playbook **used to install** the [Riot-web](https://github.com/vector-im/riot-web) Matrix client web application.
|
||||||
|
|
||||||
Riot has since been [renamed to Element](https://element.io/blog/welcome-to-element/).
|
Riot has since been [renamed to Element](https://element.io/blog/welcome-to-element/).
|
||||||
|
|
||||||
@ -12,22 +12,28 @@ Riot has since been [renamed to Element](https://element.io/blog/welcome-to-elem
|
|||||||
|
|
||||||
### Migrating your custom settings
|
### Migrating your custom settings
|
||||||
|
|
||||||
If you have custom `matrix_riot_web_` variables in your `inventory/host_vars/matrix.example.com/vars.yml` file, you'll need to rename them (`matrix_riot_web_` -> `matrix_client_element_`).
|
If you have custom `matrix_riot_web_` variables in your `inventory/host_vars/matrix.DOMAIN/vars.yml` file, you'll need to rename them (`matrix_riot_web_` -> `matrix_client_element_`).
|
||||||
|
|
||||||
Some other playbook variables (but not all) with `riot` in their name are also renamed. The playbook checks and warns if you are using the old name for some commonly used ones.
|
Some other playbook variables (but not all) with `riot` in their name are also renamed. The playbook checks and warns if you are using the old name for some commonly used ones.
|
||||||
|
|
||||||
|
|
||||||
### Domain migration
|
### Domain migration
|
||||||
|
|
||||||
We used to set up Riot at the `riot.example.com` domain. The playbook now sets up Element at `element.example.com` by default.
|
We used to set up Riot at the `riot.DOMAIN` domain. The playbook now sets up Element at `element.DOMAIN` by default.
|
||||||
|
|
||||||
There are a few options for handling this:
|
There are a few options for handling this:
|
||||||
|
|
||||||
- (**avoiding changes** - using the old `riot.example.com` domain and avoiding DNS changes) -- to keep using `riot.example.com` instead of `element.example.com`, override the domain at which the playbook serves Element: `matrix_server_fqn_element: "riot.{{ matrix_domain }}"`
|
- (**avoiding changes** - using the old `riot.DOMAIN` domain and avoiding DNS changes) -- to keep using `riot.DOMAIN` instead of `element.DOMAIN`, override the domain at which the playbook serves Element: `matrix_server_fqn_element: "riot.{{ matrix_domain }}"`
|
||||||
|
|
||||||
- (**embracing changes** - using only `element.example.com`) - set up the `element.example.com` DNS record (see [Configuring DNS](configuring-dns.md)). You can drop the `riot.example.com` in this case.
|
- (**embracing changes** - using only `element.DOMAIN`) - set up the `element.DOMAIN` DNS record (see [Configuring DNS](configuring-dns.md)). You can drop the `riot.DOMAIN` in this case. If so, you may also wish to remove old SSL certificates (`rm -rf /matrix/ssl/config/live/riot.DOMAIN`) and renewal configuration (`rm -f /matrix/ssl/config/renewal/riot.DOMAIN.conf`), so that `certbot` would stop trying to renew them.
|
||||||
|
|
||||||
|
- (**embracing changes and transitioning smoothly** - using both `element.DOMAIN` and `riot.DOMAIN`) - to serve Element at the new domain (`element.DOMAIN`) and to also have `riot.DOMAIN` redirect there - set up the `element.DOMAIN` DNS record (see [Configuring DNS](configuring-dns.md)) and enable Riot to Element redirection (`matrix_nginx_proxy_proxy_riot_compat_redirect_enabled: true`).
|
||||||
|
|
||||||
|
|
||||||
### Re-running the playbook
|
### Re-running the playbook
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
As always, after making the necessary DNS and configuration adjustments, re-run the playbook to apply the changes:
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
|
```
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# Storing Matrix media files on Amazon S3 with Goofys (optional)
|
# Storing Matrix media files on Amazon S3 with Goofys (optional)
|
||||||
|
|
||||||
If you'd like to store Synapse's content repository (`media_store`) files on Amazon S3 (or other S3-compatible service), you can let this playbook configure [Goofys](https://github.com/kahing/goofys) for you.
|
If you'd like to store Synapse's content repository (`media_store`) files on Amazon S3 (or other S3-compatible service),
|
||||||
|
you can let this playbook configure [Goofys](https://github.com/kahing/goofys) for you.
|
||||||
|
|
||||||
Another (and better performing) way to use S3 storage with Synapse is [synapse-s3-storage-provider](configuring-playbook-synapse-s3-storage-provider.md).
|
Another (and better performing) way to use S3 storage with Synapse is [synapse-s3-storage-provider](configuring-playbook-synapse-s3-storage-provider.md).
|
||||||
|
|
||||||
@ -8,9 +9,10 @@ Using a Goofys-backed media store works, but performance may not be ideal. If po
|
|||||||
|
|
||||||
If you'd like to move your locally-stored media store data to Amazon S3 (or another S3-compatible object store), we also provide some migration instructions below.
|
If you'd like to move your locally-stored media store data to Amazon S3 (or another S3-compatible object store), we also provide some migration instructions below.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
|
||||||
|
|
||||||
After [creating the S3 bucket and configuring it](configuring-playbook-s3.md#bucket-creation-and-security-configuration), add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file (adapt to your needs):
|
## Usage
|
||||||
|
|
||||||
|
After [creating the S3 bucket and configuring it](configuring-playbook-s3.md#bucket-creation-and-security-configuration), you can proceed to configure Goofys in your configuration file (`inventory/host_vars/matrix.<your-domain>/vars.yml`):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_s3_media_store_enabled: true
|
matrix_s3_media_store_enabled: true
|
||||||
@ -34,92 +36,99 @@ If you have local media store files and wish to migrate to Backblaze B2 subseque
|
|||||||
|
|
||||||
It's a good idea to [make a complete server backup](faq.md#how-do-i-backup-the-data-on-my-server) before migrating your local media store to an S3-backed one.
|
It's a good idea to [make a complete server backup](faq.md#how-do-i-backup-the-data-on-my-server) before migrating your local media store to an S3-backed one.
|
||||||
|
|
||||||
After making the backup, follow one of the guides below for a migration path from a locally-stored media store to one stored on S3-compatible storage:
|
Follow one of the guides below for a migration path from a locally-stored media store to one stored on S3-compatible storage:
|
||||||
|
|
||||||
- [Migrating to any S3-compatible storage (universal, but likely slow)](#migrating-to-any-s3-compatible-storage-universal-but-likely-slow)
|
- [Storing Matrix media files on Amazon S3 with Goofys (optional)](#storing-matrix-media-files-on-amazon-s3-with-goofys-optional)
|
||||||
- [Migrating to Backblaze B2](#migrating-to-backblaze-b2)
|
- [Usage](#usage)
|
||||||
|
- [Migrating from local filesystem storage to S3](#migrating-from-local-filesystem-storage-to-s3)
|
||||||
|
- [Migrating to any S3-compatible storage (universal, but likely slow)](#migrating-to-any-s3-compatible-storage-universal-but-likely-slow)
|
||||||
|
- [Migrating to Backblaze B2](#migrating-to-backblaze-b2)
|
||||||
|
|
||||||
### Migrating to any S3-compatible storage (universal, but likely slow)
|
### Migrating to any S3-compatible storage (universal, but likely slow)
|
||||||
|
|
||||||
|
It's a good idea to [make a complete server backup](faq.md#how-do-i-backup-the-data-on-my-server) before doing this.
|
||||||
|
|
||||||
1. Proceed with the steps below without stopping Matrix services
|
1. Proceed with the steps below without stopping Matrix services
|
||||||
|
|
||||||
2. Start by adding the base S3 configuration in your `vars.yml` file (seen above, may be different depending on the S3 provider of your choice)
|
2. Start by adding the base S3 configuration in your `vars.yml` file (seen above, may be different depending on the S3 provider of your choice)
|
||||||
|
|
||||||
3. In addition to the base configuration you see above, add this to your `vars.yml` file:
|
3. In addition to the base configuration you see above, add this to your `vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_s3_media_store_path: /matrix/s3-media-store
|
matrix_s3_media_store_path: /matrix/s3-media-store
|
||||||
```
|
```
|
||||||
|
|
||||||
This enables S3 support, but mounts the S3 storage bucket to `/matrix/s3-media-store` without hooking it to your homeserver yet. Your homeserver will still continue using your local filesystem for its media store.
|
This enables S3 support, but mounts the S3 storage bucket to `/matrix/s3-media-store` without hooking it to your homeserver yet. Your homeserver will still continue using your local filesystem for its media store.
|
||||||
|
|
||||||
4. Run the playbook to apply the changes: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
5. Run the playbook to apply the changes: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
||||||
|
|
||||||
5. Do an **initial sync of your files** by running this **on the server** (it may take a very long time):
|
6. Do an **initial sync of your files** by running this **on the server** (it may take a very long time):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo -u matrix -- rsync --size-only --ignore-existing -avr /matrix/synapse/storage/media-store/. /matrix/s3-media-store/.
|
sudo -u matrix -- rsync --size-only --ignore-existing -avr /matrix/synapse/storage/media-store/. /matrix/s3-media-store/.
|
||||||
```
|
```
|
||||||
|
|
||||||
You may need to install `rsync` manually.
|
You may need to install `rsync` manually.
|
||||||
|
|
||||||
6. Stop all Matrix services (`ansible-playbook -i inventory/hosts setup.yml --tags=stop`)
|
7. Stop all Matrix services (`ansible-playbook -i inventory/hosts setup.yml --tags=stop`)
|
||||||
|
|
||||||
7. Start the S3 service by running this **on the server**: `systemctl start matrix-goofys`
|
8. Start the S3 service by running this **on the server**: `systemctl start matrix-goofys`
|
||||||
|
|
||||||
8. Sync the files again by re-running the `rsync` command you see in step #5
|
9. Sync the files again by re-running the `rsync` command you see in step #6
|
||||||
|
|
||||||
9. Stop the S3 service by running this **on the server**: `systemctl stop matrix-goofys`
|
10. Stop the S3 service by running this **on the server**: `systemctl stop matrix-goofys`
|
||||||
|
|
||||||
10. Get the old media store out of the way by running this command on the server:
|
11. Get the old media store out of the way by running this command on the server:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
mv /matrix/synapse/storage/media-store /matrix/synapse/storage/media-store-local-backup
|
mv /matrix/synapse/storage/media-store /matrix/synapse/storage/media-store-local-backup
|
||||||
```
|
```
|
||||||
|
|
||||||
11. Remove the `matrix_s3_media_store_path` configuration from your `vars.yml` file (undoing step #3 above)
|
12. Remove the `matrix_s3_media_store_path` configuration from your `vars.yml` file (undoing step #3 above)
|
||||||
|
|
||||||
12. Run the playbook: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
13. Run the playbook: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
||||||
|
|
||||||
13. You're done! Verify that loading existing (old) media files works and that you can upload new ones.
|
14. You're done! Verify that loading existing (old) media files works and that you can upload new ones.
|
||||||
|
|
||||||
14. When confident that it all works, get rid of the local media store directory: `rm -rf /matrix/synapse/storage/media-store-local-backup`
|
15. When confident that it all works, get rid of the local media store directory: `rm -rf /matrix/synapse/storage/media-store-local-backup`
|
||||||
|
|
||||||
|
|
||||||
### Migrating to Backblaze B2
|
### Migrating to Backblaze B2
|
||||||
|
|
||||||
|
It's a good idea to [make a complete server backup](faq.md#how-do-i-backup-the-data-on-my-server) before doing this.
|
||||||
|
|
||||||
1. While all Matrix services are running, run the following command on the server:
|
1. While all Matrix services are running, run the following command on the server:
|
||||||
|
|
||||||
(you need to adjust the 3 `--env` line below with your own data)
|
(you need to adjust the 3 `--env` line below with your own data)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker run -it --rm -w /work \
|
docker run -it --rm -w /work \
|
||||||
--env='B2_KEY_ID=YOUR_KEY_GOES_HERE' \
|
--env='B2_KEY_ID=YOUR_KEY_GOES_HERE' \
|
||||||
--env='B2_KEY_SECRET=YOUR_SECRET_GOES_HERE' \
|
--env='B2_KEY_SECRET=YOUR_SECRET_GOES_HERE' \
|
||||||
--env='B2_BUCKET_NAME=YOUR_BUCKET_NAME_GOES_HERE' \
|
--env='B2_BUCKET_NAME=YOUR_BUCKET_NAME_GOES_HERE' \
|
||||||
--mount type=bind,src=/matrix/synapse/storage/media-store,dst=/work,ro \
|
--mount type=bind,src=/matrix/synapse/storage/media-store,dst=/work,ro \
|
||||||
--entrypoint=/bin/sh \
|
--entrypoint=/bin/sh \
|
||||||
docker.io/tianon/backblaze-b2:3.6.0 \
|
docker.io/tianon/backblaze-b2:3.6.0 \
|
||||||
-c 'b2 authorize-account $B2_KEY_ID $B2_KEY_SECRET && b2 sync /work b2://$B2_BUCKET_NAME --skipNewer'
|
-c 'b2 authorize-account $B2_KEY_ID $B2_KEY_SECRET && b2 sync /work b2://$B2_BUCKET_NAME --skipNewer'
|
||||||
```
|
```
|
||||||
|
|
||||||
This is some initial file sync, which may take a very long time.
|
This is some initial file sync, which may take a very long time.
|
||||||
|
|
||||||
2. Stop all Matrix services (`ansible-playbook -i inventory/hosts setup.yml --tags=stop`)
|
2. Stop all Matrix services (`ansible-playbook -i inventory/hosts setup.yml --tags=stop`)
|
||||||
|
|
||||||
3. Run the command from step #1 again.
|
3. Run the command from step #1 again.
|
||||||
|
|
||||||
Doing this will sync any new files that may have been created locally in the meantime.
|
Doing this will sync any new files that may have been created locally in the meantime.
|
||||||
|
|
||||||
Now that Matrix services aren't running, we're sure to get Backblaze B2 and your local media store fully in sync.
|
Now that Matrix services aren't running, we're sure to get Backblaze B2 and your local media store fully in sync.
|
||||||
|
|
||||||
4. Get the old media store out of the way by running this command on the server:
|
4. Get the old media store out of the way by running this command on the server:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
mv /matrix/synapse/storage/media-store /matrix/synapse/storage/media-store-local-backup
|
mv /matrix/synapse/storage/media-store /matrix/synapse/storage/media-store-local-backup
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Put the [Backblaze B2 settings](configuring-playbook-s3.md#backblaze-b2) in your `vars.yml` file
|
5. Put the [Backblaze B2 settings seen above](#backblaze-b2) in your `vars.yml` file
|
||||||
|
|
||||||
6. Run the playbook: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
6. Run the playbook: `ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start`
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# Storing Synapse media files on Amazon S3 or another compatible Object Storage (optional)
|
# Storing Synapse media files on Amazon S3 or another compatible Object Storage (optional)
|
||||||
|
|
||||||
By default, this playbook configures your server to store Synapse's content repository (`media_store`) files on the local filesystem. If that's okay, you can skip this document.
|
By default, this playbook configures your server to store Synapse's content repository (`media_store`) files on the local filesystem.
|
||||||
|
If that's alright, you can skip this.
|
||||||
|
|
||||||
As an alternative to storing media files on the local filesystem, you can store them on [Amazon S3](https://aws.amazon.com/s3/) or another S3-compatible object store.
|
As an alternative to storing media files on the local filesystem, you can store them on [Amazon S3](https://aws.amazon.com/s3/) or another S3-compatible object store.
|
||||||
|
|
||||||
@ -64,7 +65,7 @@ You'll need an Amazon S3 bucket and some IAM user credentials (access key + secr
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: This policy needs to be attached to an IAM user created from the **Security Credentials** menu. This is not a **Bucket Policy**.
|
**NOTE**: This policy needs to be attached to an IAM user created from the **Security Credentials** menu. This is not a **Bucket Policy**.
|
||||||
|
|
||||||
|
|
||||||
## Backblaze B2
|
## Backblaze B2
|
||||||
@ -75,11 +76,11 @@ You [can't easily change which region (US, Europe) your Backblaze account stores
|
|||||||
|
|
||||||
After logging in to Backblaze:
|
After logging in to Backblaze:
|
||||||
|
|
||||||
- create a new **private** bucket through its user interface (you can call it something like `matrix-example-media-store`)
|
- create a new **private** bucket through its user interface (you can call it something like `matrix-DOMAIN-media-store`)
|
||||||
- note the **Endpoint** for your bucket (something like `s3.us-west-002.backblazeb2.com`).
|
- note the **Endpoint** for your bucket (something like `s3.us-west-002.backblazeb2.com`).
|
||||||
- adjust its Lifecycle Rules to: Keep only the last version of the file
|
- adjust its Lifecycle Rules to: Keep only the last version of the file
|
||||||
- go to [App Keys](https://secure.backblaze.com/app_keys.htm) and use the **Add a New Application Key** to create a new one
|
- go to [App Keys](https://secure.backblaze.com/app_keys.htm) and use the **Add a New Application Key** to create a new one
|
||||||
- restrict it to the previously created bucket (e.g. `matrix-example-media-store`)
|
- restrict it to the previously created bucket (e.g. `matrix-DOMAIN-media-store`)
|
||||||
- give it *Read & Write* access
|
- give it *Read & Write* access
|
||||||
|
|
||||||
The `keyID` value is your **Access Key** and `applicationKey` is your **Secret Key**.
|
The `keyID` value is your **Access Key** and `applicationKey` is your **Secret Key**.
|
||||||
|
@ -4,17 +4,16 @@ The playbook can install and configure [matrix-synapse-shared-secret-auth](https
|
|||||||
|
|
||||||
See that project's documentation to learn what it does and why it might be useful to you.
|
See that project's documentation to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
If you decide that you'd like to let this playbook install it for you, you need some configuration (`inventory/host_vars/matrix.<your-domain>/vars.yml`) like this:
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_synapse_ext_password_provider_shared_secret_auth_enabled: true
|
matrix_synapse_ext_password_provider_shared_secret_auth_enabled: true
|
||||||
|
|
||||||
# Generate a strong shared secret here. Consider generating it with `pwgen -s 64 1`
|
|
||||||
matrix_synapse_ext_password_provider_shared_secret_auth_shared_secret: YOUR_SHARED_SECRET_GOES_HERE
|
matrix_synapse_ext_password_provider_shared_secret_auth_shared_secret: YOUR_SHARED_SECRET_GOES_HERE
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can generate a strong shared secret with a command like this: `pwgen -s 64 1`
|
||||||
|
|
||||||
|
|
||||||
## Authenticating only using a password provider
|
## Authenticating only using a password provider
|
||||||
|
|
||||||
If you wish for users to **authenticate only against configured password providers** (like this one), **without consulting Synapse's local database**, feel free to disable it:
|
If you wish for users to **authenticate only against configured password providers** (like this one), **without consulting Synapse's local database**, feel free to disable it:
|
||||||
@ -22,7 +21,3 @@ If you wish for users to **authenticate only against configured password provide
|
|||||||
```yaml
|
```yaml
|
||||||
matrix_synapse_password_config_localdb_enabled: false
|
matrix_synapse_password_config_localdb_enabled: false
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing
|
|
||||||
|
|
||||||
After configuring the playbook, run the [installation](installing.md) command: `just install-all` or `just setup-all`
|
|
||||||
|
@ -1,50 +1,45 @@
|
|||||||
# Setting up the Sliding Sync proxy (optional)
|
# Setting up Sliding Sync Proxy (optional)
|
||||||
|
|
||||||
The playbook can install and configure [sliding-sync](https://github.com/matrix-org/sliding-sync) proxy for you.
|
The playbook can install and configure [sliding-sync](https://github.com/matrix-org/sliding-sync) proxy for you.
|
||||||
|
|
||||||
Sliding Sync is an implementation of [MSC3575](https://github.com/matrix-org/matrix-spec-proposals/blob/kegan/sync-v3/proposals/3575-sync.md) and a prerequisite for running the new (**still beta**) Element X clients ([Element X iOS](https://github.com/element-hq/element-x-ios) and [Element X Android](https://github.com/element-hq/element-x-android)).
|
Sliding Sync is an implementation of [MSC3575](https://github.com/matrix-org/matrix-spec-proposals/blob/kegan/sync-v3/proposals/3575-sync.md) and a prerequisite for running the new (**still beta**) Element X clients ([Element X iOS](https://github.com/vector-im/element-x-ios) and [Element X Android](https://github.com/vector-im/element-x-android)).
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/matrix-org/sliding-sync) to learn more.
|
See the project's [documentation](https://github.com/matrix-org/sliding-sync) to learn more.
|
||||||
|
|
||||||
Element X iOS is [available on TestFlight](https://testflight.apple.com/join/uZbeZCOi).
|
Element X iOS is [available on TestFlight](https://testflight.apple.com/join/uZbeZCOi).
|
||||||
|
|
||||||
Element X Android is [available on the Github Releases page](https://github.com/element-hq/element-x-android/releases).
|
Element X Android is [available on the Github Releases page](https://github.com/vector-im/element-x-android/releases).
|
||||||
|
|
||||||
|
**NOTE**: The Sliding Sync proxy **only works with the Traefik reverse-proxy**. If you have an old server installation (from the time `matrix-nginx-proxy` was our default reverse-proxy - `matrix_playbook_reverse_proxy_type: playbook-managed-nginx`), you won't be able to use Sliding Sync.
|
||||||
|
|
||||||
|
**NOTE**: The sliding-sync proxy is **not required** when using the **Conduit homeserver**. Starting from version `0.6.0` Conduit has native support for some sliding sync features. If there are issues with the native implementation, you might have a better experience when enabling the sliding-sync proxy anyway.
|
||||||
|
|
||||||
|
## Decide on a domain and path
|
||||||
|
|
||||||
|
By default, the Sliding Sync proxy is configured to be served on the Matrix domain (`matrix.DOMAIN`, controlled by `matrix_server_fqn_matrix`), under the `/sliding-sync` path.
|
||||||
|
|
||||||
|
This makes it easy to set it up, **without** having to [adjust your DNS records](#adjusting-dns-records).
|
||||||
|
|
||||||
|
If you'd like to run the Sliding Sync proxy on another hostname or path, use the `matrix_sliding_sync_hostname` and `matrix_sliding_sync_path_prefix` variables.
|
||||||
|
|
||||||
|
|
||||||
|
## Adjusting DNS records
|
||||||
|
|
||||||
|
If you've changed the default hostame, **you may need to adjust your DNS** records.
|
||||||
|
|
||||||
**Note**: The sliding-sync proxy is **not required** when using the **Conduit homeserver**. Starting from version `0.6.0` Conduit has native support for some sliding sync features. If there are issues with the native implementation, you might have a better experience when enabling the sliding-sync proxy anyway.
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable Sliding Sync proxy, 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.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_sliding_sync_enabled: true
|
matrix_sliding_sync_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Adjusting the Sliding Sync proxy URL
|
|
||||||
|
|
||||||
By default, this playbook installs the Sliding Sync proxy on the `matrix.` subdomain, at the `/sliding-sync` path (https://matrix.example.com/sliding-sync). This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_sliding_sync_hostname` and `matrix_sliding_sync_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix
|
|
||||||
matrix_sliding_sync_hostname: ss.example.com
|
|
||||||
matrix_sliding_sync_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the Honoroit domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command: `just install-all`.
|
After potentially [adjusting DNS records](#adjusting-dns-records) and configuring the playbook, run the [installation](installing.md) command again: `just install-all`.
|
||||||
|
|
||||||
### External databases
|
### External databases
|
||||||
|
|
||||||
@ -60,8 +55,9 @@ matrix_sliding_sync_database_name: 'matrix_sliding_sync'
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
You **don't need to do anything special** to make use of the Sliding Sync proxy. Simply open your client which supports Sliding Sync (like Element X) and log in.
|
You **don't need to do anything special** to make use of the Sliding Sync Proxy.
|
||||||
|
Simply open your client which supports Sliding Sync (like Element X) and log in.
|
||||||
|
|
||||||
When the Sliding Sync proxy is [installed](#installing), your `/.well-known/matrix/client` file is also updated. A new `org.matrix.msc3575.proxy` section and `url` property are added there and made to point to your Sliding Sync proxy's base URL (e.g. `https://matrix.example.com/sliding-sync`).
|
When the Sliding Sync proxy is [installed](#installing), your `/.well-known/matrix/client` file is also updated. A new `org.matrix.msc3575.proxy` section and `url` property are added there and made to point to your Sliding Sync proxy's base URL (e.g. `https://matrix.DOMAIN/sliding-sync`).
|
||||||
|
|
||||||
This allows clients which support Sliding Sync to detect the Sliding Sync proxy's URL and make use of it.
|
This allows clients which support Sliding Sync to detect the Sliding Sync Proxy's URL and make use of it.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Adjusting SSL certificate retrieval (optional, advanced)
|
# Adjusting SSL certificate retrieval (optional, advanced)
|
||||||
|
|
||||||
By default, this playbook retrieves and auto-renews free SSL certificates from [Let's Encrypt](https://letsencrypt.org/) for the domains it needs (e.g. `matrix.example.com` and others)
|
By default, this playbook retrieves and auto-renews free SSL certificates from [Let's Encrypt](https://letsencrypt.org/) for the domains it needs (e.g. `matrix.<your-domain>` and others)
|
||||||
|
|
||||||
This guide is about using the integrated Traefik server and doesn't apply if you're using [your own webserver](configuring-playbook-own-webserver.md).
|
This guide is about using the integrated Traefik server and doesn't apply if you're using [your own webserver](configuring-playbook-own-webserver.md).
|
||||||
|
|
||||||
@ -9,10 +9,10 @@ This guide is about using the integrated Traefik server and doesn't apply if you
|
|||||||
|
|
||||||
For testing purposes, you may wish to use staging certificates provide by Let's Encrypt.
|
For testing purposes, you may wish to use staging certificates provide by Let's Encrypt.
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
You can do this with the following configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
traefik_config_certificatesResolvers_acme_use_staging: true
|
devture_traefik_config_certificatesResolvers_acme_use_staging: true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -20,10 +20,10 @@ traefik_config_certificatesResolvers_acme_use_staging: true
|
|||||||
|
|
||||||
For testing or other purposes, you may wish to install services without SSL termination and have services exposed to `http://` instead of `https://`.
|
For testing or other purposes, you may wish to install services without SSL termination and have services exposed to `http://` instead of `https://`.
|
||||||
|
|
||||||
Add the following configuration to your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
You can do this with the following configuration:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
traefik_config_entrypoint_web_secure_enabled: false
|
devture_traefik_config_entrypoint_web_secure_enabled: false
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -46,32 +46,27 @@ To use your own SSL certificates with Traefik, you need to:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Disable ACME / Let's Encrypt support.
|
# Disable ACME / Let's Encrypt support.
|
||||||
traefik_config_certificatesResolvers_acme_enabled: false
|
devture_traefik_config_certificatesResolvers_acme_enabled: false
|
||||||
|
|
||||||
# Disabling ACME support (above) automatically disables the creation of the SSL directory.
|
# Disabling ACME support (above) automatically disables the creation of the SSL directory.
|
||||||
# Force-enable it here, because we'll add our certificate files there.
|
# Force-enable it here, because we'll add our certificate files there.
|
||||||
traefik_ssl_dir_enabled: true
|
devture_traefik_ssl_dir_enabled: true
|
||||||
|
|
||||||
# Tell Traefik to load our custom ssl key pair by extending provider configuration.
|
# Tell Traefik to load our custom configuration file (certificates.yml).
|
||||||
# The key pair files are created below, in `aux_file_definitions`.
|
# The file is created below, in `aux_file_definitions`.
|
||||||
# The `/ssl/..` path is an in-container path, not a path on the host (like `/matrix/traefik/ssl`). Do not change it!
|
# The `/config/..` path is an in-container path, not a path on the host (like `/matrix/traefik/config`). Do not change it!
|
||||||
traefik_provider_configuration_extension_yaml:
|
devture_traefik_configuration_extension_yaml: |
|
||||||
tls:
|
providers:
|
||||||
certificates:
|
file:
|
||||||
- certFile: /ssl/cert.pem
|
filename: /config/certificates.yml
|
||||||
keyFile: /ssl/privkey.pem
|
watch: true
|
||||||
stores:
|
|
||||||
default:
|
|
||||||
defaultCertificate:
|
|
||||||
certFile: /ssl/cert.pem
|
|
||||||
keyFile: /ssl/privkey.pem
|
|
||||||
|
|
||||||
# Use the aux role to create our custom files on the server.
|
# Use the aux role to create our custom files on the server.
|
||||||
# If you'd like to do this manually, you remove this `aux_file_definitions` variable.
|
# If you'd like to do this manually, you remove this `aux_file_definitions` variable.
|
||||||
aux_file_definitions:
|
aux_file_definitions:
|
||||||
# Create the privkey.pem file on the server by
|
# Create the privkey.pem file on the server by
|
||||||
# uploading a file from the computer where Ansible is running.
|
# uploading a file from the computer where Ansible is running.
|
||||||
- dest: "{{ traefik_ssl_dir_path }}/privkey.pem"
|
- dest: "{{ devture_traefik_ssl_dir_path }}/privkey.pem"
|
||||||
src: /path/on/your/Ansible/computer/to/privkey.pem
|
src: /path/on/your/Ansible/computer/to/privkey.pem
|
||||||
# Alternatively, comment out `src` above and uncomment the lines below to provide the certificate content inline.
|
# Alternatively, comment out `src` above and uncomment the lines below to provide the certificate content inline.
|
||||||
# Note the indentation level.
|
# Note the indentation level.
|
||||||
@ -81,37 +76,25 @@ aux_file_definitions:
|
|||||||
|
|
||||||
# Create the cert.pem file on the server
|
# Create the cert.pem file on the server
|
||||||
# uploading a file from the computer where Ansible is running.
|
# uploading a file from the computer where Ansible is running.
|
||||||
- dest: "{{ traefik_ssl_dir_path }}/cert.pem"
|
- dest: "{{ devture_traefik_ssl_dir_path }}/cert.pem"
|
||||||
src: /path/on/your/Ansible/computer/to/cert.pem
|
src: /path/on/your/Ansible/computer/to/cert.pem
|
||||||
# Alternatively, comment out `src` above and uncomment the lines below to provide the certificate content inline.
|
# Alternatively, comment out `src` above and uncomment the lines below to provide the certificate content inline.
|
||||||
# Note the indentation level.
|
# Note the indentation level.
|
||||||
# content: |
|
# content: |
|
||||||
# FILE CONTENT
|
# FILE CONTENT
|
||||||
# HERE
|
# HERE
|
||||||
|
|
||||||
|
# Create the custom Traefik configuration.
|
||||||
|
# The `/ssl/..` paths below are in-container paths, not paths on the host (/`matrix/traefik/ssl/..`). Do not change them!
|
||||||
|
- dest: "{{ devture_traefik_config_dir_path }}/certificates.yml"
|
||||||
|
content: |
|
||||||
|
tls:
|
||||||
|
certificates:
|
||||||
|
- certFile: /ssl/cert.pem
|
||||||
|
keyFile: /ssl/privkey.pem
|
||||||
|
stores:
|
||||||
|
default:
|
||||||
|
defaultCertificate:
|
||||||
|
certFile: /ssl/cert.pem
|
||||||
|
keyFile: /ssl/privkey.pem
|
||||||
```
|
```
|
||||||
|
|
||||||
## Using a DNS-01 ACME challenge type, instead of HTTP-01
|
|
||||||
|
|
||||||
You can configure Traefik to use the [DNS-01 challenge type](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) for Let's Encrypt. This is less commonly used than the default [HTTP-01 challenge type](https://letsencrypt.org/docs/challenge-types/#http-01-challenge), but it can be helpful to:
|
|
||||||
|
|
||||||
- hide your public IP from Let's Encrypt logs
|
|
||||||
- allow you to obtain SSL certificates for servers which are not accessible (via HTTP) from the public internet (and for which the HTTP-01 challenge would fail)
|
|
||||||
|
|
||||||
This is an example for how to edit the `vars.yml` file if you're using Cloudflare:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
traefik_config_certificatesResolvers_acme_dnsChallenge_enabled: true
|
|
||||||
traefik_config_certificatesResolvers_acme_dnsChallenge_provider: "cloudflare"
|
|
||||||
traefik_config_certificatesResolvers_acme_dnsChallenge_delayBeforeCheck: 60
|
|
||||||
traefik_config_certificatesResolvers_acme_dnsChallenge_resolvers:
|
|
||||||
- "1.1.1.1:53"
|
|
||||||
traefik_environment_variables_additional_variables: |
|
|
||||||
CF_API_EMAIL=redacted
|
|
||||||
CF_ZONE_API_TOKEN=redacted
|
|
||||||
CF_DNS_API_TOKEN=redacted
|
|
||||||
LEGO_DISABLE_CNAME_SUPPORT=true
|
|
||||||
```
|
|
||||||
|
|
||||||
Make sure to change the value of "provider" to your particular DNS solution, and provide the appropriate environment variables. The full list of supported providers is available [here](https://doc.traefik.io/traefik/https/acme/#providers).
|
|
||||||
|
|
||||||
This example assumes you're using Cloudflare to manage your DNS zone. Note that it requires the use of two tokens: one for reading all zones (`CF_ZONE_API_TOKEN`) and another that must be able to edit the particular domain you're using (`CF_DNS_API_TOKEN`). For security, it's recommended that you create two fine-grained tokens for this purpose, but you might choose to use the same token for both.
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Setting up the Sygnal push gateway (optional)
|
# Setting up Sygnal (optional)
|
||||||
|
|
||||||
The playbook can install and configure the [Sygnal](https://github.com/matrix-org/sygnal) push gateway for you.
|
The playbook can install and configure the [Sygnal](https://github.com/matrix-org/sygnal) push gateway for you.
|
||||||
|
|
||||||
@ -10,9 +10,35 @@ See the project's [documentation](https://github.com/matrix-org/sygnal) to learn
|
|||||||
|
|
||||||
This optional playbook component is only useful to people who develop/build their own Matrix client applications themselves.
|
This optional playbook component is only useful to people who develop/build their own Matrix client applications themselves.
|
||||||
|
|
||||||
|
|
||||||
|
## Decide on a domain and path
|
||||||
|
|
||||||
|
By default, Sygnal is configured to use its own dedicated domain (`sygnal.DOMAIN`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
||||||
|
|
||||||
|
You can override the domain and path like this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Switch to the domain used for Matrix services (`matrix.DOMAIN`),
|
||||||
|
# so we won't need to add additional DNS records for Sygnal.
|
||||||
|
matrix_sygnal_hostname: "{{ matrix_server_fqn_matrix }}"
|
||||||
|
|
||||||
|
# Expose under the /sygnal subpath
|
||||||
|
matrix_sygnal_path_prefix: /sygnal
|
||||||
|
```
|
||||||
|
|
||||||
|
**NOTE**: When using `matrix-nginx-proxy` instead of Traefik, you won't be able to override the path prefix. You can only override the domain, but that needs to happen using another variable: `matrix_server_fqn_sygnal` (e.g. `matrix_server_fqn_sygnal: "push.{{ matrix_domain }}"`).
|
||||||
|
|
||||||
|
|
||||||
|
## Adjusting DNS records
|
||||||
|
|
||||||
|
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Sygnal domain to the Matrix server.
|
||||||
|
|
||||||
|
If you've decided to reuse the `matrix.` domain, you won't need to do any extra DNS configuration.
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable Sygnal, 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.DOMAIN/vars.yml` file (adapt to your needs):
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_sygnal_enabled: true
|
matrix_sygnal_enabled: true
|
||||||
@ -44,36 +70,13 @@ For a more complete example of available fields and values they can take, see `r
|
|||||||
|
|
||||||
Configuring [GCM/FCM](https://firebase.google.com/docs/cloud-messaging/) is easier, as it only requires that you provide some config values.
|
Configuring [GCM/FCM](https://firebase.google.com/docs/cloud-messaging/) is easier, as it only requires that you provide some config values.
|
||||||
|
|
||||||
To configure [APNS](https://developer.apple.com/notifications/) (Apple Push Notification Service), you'd need to provide one or more certificate files. To do that, the above example configuration:
|
To configure [APNS](https://developer.apple.com/notifications/) (Apple Push Notification Service), you'd need to provide one or more certificate files.
|
||||||
|
To do that, the above example configuration:
|
||||||
|
|
||||||
- makes use of the [`aux` role](https://github.com/mother-of-all-self-hosting/ansible-role-aux) (and its `aux_file_definitions` variable) to make the playbook install files into `/matrix/sygnal/data` (the `matrix_sygnal_data_path` variable). See [`defaults/main.yml` file](https://github.com/mother-of-all-self-hosting/ansible-role-aux/blob/main/defaults/main.yml) of the `aux` role for usage examples. It also makes sure the files are owned by `matrix:matrix`, so that Sygnal can read them. Of course, you can also install these files manually yourself, if you'd rather not use `aux`.
|
- makes use of the [`aux` role](https://github.com/mother-of-all-self-hosting/ansible-role-aux) (and its `aux_file_definitions` variable) to make the playbook install files into `/matrix/sygnal/data` (the `matrix_sygnal_data_path` variable). See [`defaults/main.yml` file](https://github.com/mother-of-all-self-hosting/ansible-role-aux/blob/main/defaults/main.yml) of the `aux` role for usage examples. It also makes sure the files are owned by `matrix:matrix`, so that Sygnal can read them. Of course, you can also install these files manually yourself, if you'd rather not use `aux`.
|
||||||
|
|
||||||
- references these files in the Sygnal configuration (`matrix_sygnal_apps`) using a path like `/data/..` (the `/matrix/sygnal/data` directory on the host system is mounted into the `/data` directory inside the container)
|
- references these files in the Sygnal configuration (`matrix_sygnal_apps`) using a path like `/data/..` (the `/matrix/sygnal/data` directory on the host system is mounted into the `/data` directory inside the container)
|
||||||
|
|
||||||
### Adjusting the Sygnal URL
|
|
||||||
|
|
||||||
By default, this playbook installs Sygnal on the `sygnal.` subdomain (`sygnal.example.com`) and requires you to [adjust your DNS records](#adjusting-dns-records).
|
|
||||||
|
|
||||||
By tweaking the `matrix_sygnal_hostname` and `matrix_sygnal_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Switch to the domain used for Matrix services (`matrix.example.com`),
|
|
||||||
# so we won't need to add additional DNS records for Sygnal.
|
|
||||||
matrix_sygnal_hostname: "{{ matrix_server_fqn_matrix }}"
|
|
||||||
|
|
||||||
# Expose under the /sygnal subpath
|
|
||||||
matrix_sygnal_path_prefix: /sygnal
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
Once you've decided on the domain and path, **you may need to adjust your DNS** records to point the Sygnal domain to the Matrix server.
|
|
||||||
|
|
||||||
By default, you will need to create a CNAME record for `sygnal`. 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
|
## Installing
|
||||||
|
|
||||||
@ -86,6 +89,6 @@ ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To make use of your Sygnal installation, you'd need to build your own Matrix client application, which uses the same API keys (for [GCM/FCM](https://firebase.google.com/docs/cloud-messaging/)) and certificates (for [APNS](https://developer.apple.com/notifications/)) and is to your Sygnal URL endpoint (e.g. `https://sygnal.example.com`).
|
To make use of your Sygnal installation, you'd need to build your own Matrix client application, which uses the same API keys (for [GCM/FCM](https://firebase.google.com/docs/cloud-messaging/)) and certificates (for [APNS](https://developer.apple.com/notifications/)) and is to your Sygnal URL endpoint (e.g. `https://sygnal.DOMAIN`).
|
||||||
|
|
||||||
Refer to Sygnal's [Notes for application developers](https://github.com/matrix-org/sygnal/blob/master/docs/applications.md) document.
|
Refer to Sygnal's [Notes for application developers](https://github.com/matrix-org/sygnal/blob/master/docs/applications.md) document.
|
||||||
|
@ -1,57 +1,48 @@
|
|||||||
# Setting up Synapse Admin (optional)
|
# Setting up Synapse Admin (optional)
|
||||||
|
|
||||||
The playbook can install and configure [etkecc/synapse-admin](https://github.com/etkecc/synapse-admin) (a [feature-rich](https://github.com/etkecc/synapse-admin#fork-differences) fork of [Awesome-Technologies/synapse-admin](https://github.com/Awesome-Technologies/synapse-admin), community room: [#synapse-admin:etke.cc](https://matrix.to/#/#synapse-admin:etke.cc)) for you.
|
The playbook can install and configure [synapse-admin](https://github.com/Awesome-Technologies/synapse-admin) for you.
|
||||||
|
|
||||||
synapse-admin is a web UI tool you can use to **administrate users, rooms, media, etc. on your Matrix server**. It's designed to work with the Synapse homeserver implementation and WON'T work with Dendrite because [Dendrite Admin API](https://matrix-org.github.io/dendrite/administration/adminapi) differs from [Synapse Admin API](https://element-hq.github.io/synapse/latest/usage/administration/admin_api/).
|
It's a web UI tool you can use to **administrate users and rooms on your Matrix server**.
|
||||||
|
|
||||||
See the project's [documentation](https://github.com/etkecc/synapse-admin) to learn what it does and why it might be useful to you.
|
See the project's [documentation](https://github.com/Awesome-Technologies/synapse-admin) to learn what it does and why it might be useful to you.
|
||||||
|
|
||||||
|
|
||||||
## Adjusting the playbook configuration
|
## Adjusting the playbook configuration
|
||||||
|
|
||||||
To enable Synapse Admin, 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.DOMAIN/vars.yml` file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
matrix_synapse_admin_enabled: true
|
matrix_synapse_admin_enabled: true
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note**: Synapse Admin requires Synapse's [Admin APIs](https://element-hq.github.io/synapse/latest/usage/administration/admin_api/index.html) to function. Access to them is restricted with a valid access token, so exposing them publicly should not be a real security concern. Still, for additional security, we normally leave them unexposed, following [official Synapse reverse-proxying recommendations](https://element-hq.github.io/synapse/latest/reverse_proxy.html#synapse-administration-endpoints). Because Synapse Admin needs these APIs to function, when installing Synapse Admin, the playbook **automatically** exposes the Synapse Admin API publicly for you. Depending on the homeserver implementation you're using (Synapse, Dendrite), this is equivalent to:
|
**Note**: Synapse Admin requires Synapse's [Admin APIs](https://matrix-org.github.io/synapse/latest/usage/administration/admin_api/index.html) to function. Access to them is restricted with a valid access token, so exposing them publicly should not be a real security concern. Still, for additional security, we normally leave them unexposed, following [official Synapse reverse-proxying recommendations](https://github.com/matrix-org/synapse/blob/master/docs/reverse_proxy.md#synapse-administration-endpoints). Because Synapse Admin needs these APIs to function, when installing Synapse Admin, we **automatically** exposes them publicly for you (equivalent to `matrix_nginx_proxy_proxy_matrix_client_api_forwarded_location_synapse_admin_api_enabled: true`).
|
||||||
|
|
||||||
- for [Synapse](./configuring-playbook-synapse.md) (our default homeserver implementation): `matrix_synapse_container_labels_public_client_synapse_admin_api_enabled: true`
|
|
||||||
- for [Dendrite](./configuring-playbook-dendrite.md): `matrix_dendrite_container_labels_public_client_synapse_admin_api_enabled: true`
|
|
||||||
|
|
||||||
By default, synapse-admin installation will be [restricted to only work with one homeserver](https://github.com/etkecc/synapse-admin/blob/e21e44362c879ac41f47c580b04210842b6ff3d7/README.md#restricting-available-homeserver) - the one managed by the playbook. To adjust these restrictions, tweak the `matrix_synapse_admin_config_restrictBaseUrl` variable.
|
|
||||||
|
|
||||||
⚠ **Warning**: If you're using [Matrix Authentication Service](./configuring-playbook-matrix-authentication-service.md) (MAS) for authentication, you will be able to [log into synapse-admin with an access token](https://github.com/etkecc/synapse-admin/pull/58), but certain synapse-admin features (especially those around user management) will be limited or not work at all.
|
|
||||||
|
|
||||||
### Adjusting the Synapse Admin URL
|
|
||||||
|
|
||||||
By default, this playbook installs Synapse Admin on the `matrix.` subdomain, at the `/synapse-admin` path (https://matrix.example.com/synapse-admin). This makes it easy to install it, because it **doesn't require additional DNS records to be set up**. If that's okay, you can skip this section.
|
|
||||||
|
|
||||||
By tweaking the `matrix_synapse_admin_hostname` and `matrix_synapse_admin_path_prefix` variables, you can easily make the service available at a **different hostname and/or path** than the default one.
|
|
||||||
|
|
||||||
Example additional configuration for your `inventory/host_vars/matrix.example.com/vars.yml` file:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# Change the default hostname and path prefix
|
|
||||||
matrix_synapse_admin_hostname: admin.example.com
|
|
||||||
matrix_synapse_admin_path_prefix: /
|
|
||||||
```
|
|
||||||
|
|
||||||
## Adjusting DNS records
|
|
||||||
|
|
||||||
If you've changed the default hostname, **you may need to adjust your DNS** records to point the Synapse Admin domain to the Matrix server.
|
|
||||||
|
|
||||||
See [Configuring DNS](configuring-dns.md) for details about DNS changes.
|
|
||||||
|
|
||||||
If you've decided to use the default hostname, you won't need to do any extra DNS configuration.
|
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
After configuring the playbook and potentially [adjusting your DNS records](#adjusting-dns-records), run the [installation](installing.md) command:
|
After configuring the playbook, run the [installation](installing.md) command again:
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
After installation, Synapse Admin will be accessible at: `https://matrix.example.com/synapse-admin/`
|
After installation, Synapse Admin will be accessible at: `https://matrix.DOMAIN/synapse-admin/`
|
||||||
|
|
||||||
To use Synapse Admin, you need to have [registered at least one administrator account](registering-users.md) on your server.
|
To use Synapse Admin, you need to have [registered at least one administrator account](registering-users.md) on your server.
|
||||||
|
|
||||||
|
The Homeserver URL to use on Synapse Admin's login page is: `https://matrix.DOMAIN`
|
||||||
|
|
||||||
|
### Sample configuration for running behind Caddy v2
|
||||||
|
|
||||||
|
Below is a sample configuration for using this playbook with a [Caddy](https://caddyserver.com/v2) 2.0 reverse proxy (non-default configuration where `matrix-nginx-proxy` is disabled - `matrix_nginx_proxy_enabled: false`).
|
||||||
|
|
||||||
|
```caddy
|
||||||
|
# This is a basic configuration that will function the same as the default nginx proxy - exposing the synapse-admin panel to matrix.YOURSERVER.com/synapse-admin/
|
||||||
|
handle_path /synapse-admin* {
|
||||||
|
reverse_proxy localhost:8766 {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user