| @@ -13,7 +13,7 @@ jobs: | |||||
| - name: Check out | - name: Check out | ||||
| uses: actions/checkout@v3 | uses: actions/checkout@v3 | ||||
| - name: Run yamllint | - name: Run yamllint | ||||
| uses: frenck/action-yamllint@v1.4.0 | |||||
| uses: frenck/action-yamllint@v1.4.1 | |||||
| ansible-lint: | ansible-lint: | ||||
| name: ansible-lint | name: ansible-lint | ||||
| runs-on: ubuntu-latest | runs-on: ubuntu-latest | ||||
| @@ -6,6 +6,20 @@ The matrix registration bot got some updates and supports password-based login. | |||||
| **For existing users** You need to set `matrix_bot_matrix_registration_bot_bot_password`. If previously only used `matrix_bot_matrix_registration_bot_bot_access_token` this was also used as `matrix_bot_matrix_registration_bot_api_token`. You now need to define the `api_token` explicitly while the `bot_access_token` is depreacted. You can therefore rename `matrix_bot_matrix_registration_bot_bot_access_token` -> `matrix_bot_matrix_registration_bot_api_token`. | **For existing users** You need to set `matrix_bot_matrix_registration_bot_bot_password`. If previously only used `matrix_bot_matrix_registration_bot_bot_access_token` this was also used as `matrix_bot_matrix_registration_bot_api_token`. You now need to define the `api_token` explicitly while the `bot_access_token` is depreacted. You can therefore rename `matrix_bot_matrix_registration_bot_bot_access_token` -> `matrix_bot_matrix_registration_bot_api_token`. | ||||
| # 2023-05-25 | |||||
| ## Enabling `forget_rooms_on_leave` by default for Synapse | |||||
| With the [Synapse v1.84.0 update](https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/2698), we've also **changed the default value** of the `forget_rooms_on_leave` setting of Synapse to a value of `true`. | |||||
| This way, **when you leave a room, Synapse will now forget it automatically**. | |||||
| The upstream Synapse default is `false` (disabled), so that you must forget rooms manually after leaving. | |||||
| **We go against the upstream default** ([somewhat controversially](https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/2700)) in an effort to make Synapse leaner and potentially do what we believe most users would expect their homeserver to be doing. | |||||
| If you'd like to go back to the old behavior, add the following to your configuration: `matrix_synapse_forget_rooms_on_leave: false` | |||||
| # 2023-04-03 | # 2023-04-03 | ||||
| ## The matrix-jitsi role lives independently now | ## The matrix-jitsi role lives independently now | ||||
| @@ -20,10 +20,12 @@ ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=bot.chatgpt | |||||
| ``` | ``` | ||||
| ## 2. Get an access token | |||||
| ## 2. Get an access token and create encryption keys | |||||
| Refer to the documentation on [how to obtain an access token](obtaining-access-tokens.md). | Refer to the documentation on [how to obtain an access token](obtaining-access-tokens.md). | ||||
| To make sure the bot can read encrypted messages, it will need an encryption key, just like any other new user. While obtaining the access token, follow the prompts to setup a backup key. More information can be found in the [element documentation](https://element.io/help#encryption6). | |||||
| ## 3. Adjusting the playbook configuration | ## 3. Adjusting the playbook configuration | ||||
| @@ -14,6 +14,10 @@ Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars. | |||||
| ```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 | ||||
| @@ -4,12 +4,26 @@ | |||||
| The playbook can install and configure [Postmoogle](https://gitlab.com/etke.cc/postmoogle) for you. | 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 | |||||
| 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. | 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 | |||||
| ## Adjusting the playbook configuration | |||||
| ### 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: | Add the following configuration to your `inventory/host_vars/matrix.DOMAIN/vars.yml` file: | ||||
| @@ -21,9 +35,20 @@ matrix_bot_postmoogle_enabled: true | |||||
| # 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` | ||||
| matrix_bot_postmoogle_password: PASSWORD_FOR_THE_BOT | 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' | |||||
| ``` | ``` | ||||
| You will also need to add several DNS records so that postmoogle can send emails. | |||||
| ### DNS | |||||
| You will also need to add several DNS records so that Postmoogle can send emails. | |||||
| See [Configuring DNS](configuring-dns.md). | See [Configuring DNS](configuring-dns.md). | ||||
| @@ -51,3 +76,13 @@ Then send `!pm mailbox NAME` to expose this Matrix room as an inbox with the ema | |||||
| Send `!pm help` to the room to see the bot's help menu for additional commands. | 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). | 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' | |||||
| ``` | |||||
| @@ -160,7 +160,7 @@ devture_traefik_additional_entrypoints_auto: | |||||
| # # trustedIPs: ['IP-ADDRESS-OF-YOUR-REVERSE-PROXY'] | # # trustedIPs: ['IP-ADDRESS-OF-YOUR-REVERSE-PROXY'] | ||||
| ``` | ``` | ||||
| For an example where the playbook's Traefik reverse-proxy is fronted by [Nginx](https://nginx.org/) running on the same server, see [Nginx reverse-proxy fronting the playbook's Traefik](../examples/nginx/README.md). | |||||
| 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). | |||||
| ### Using no reverse-proxy on the Matrix side at all | ### Using no reverse-proxy on the Matrix side at all | ||||
| @@ -1,112 +1,10 @@ | |||||
| (cors) { | |||||
| @cors_preflight method OPTIONS | |||||
| handle @cors_preflight { | |||||
| header Access-Control-Allow-Origin "{args.0}" | |||||
| header Access-Control-Allow-Methods "HEAD, GET, POST, PUT, PATCH, DELETE" | |||||
| header Access-Control-Allow-Headers "Content-Type, Authorization" | |||||
| header Access-Control-Max-Age "3600" | |||||
| } | |||||
| } | |||||
| matrix.DOMAIN.tld { | |||||
| # creates letsencrypt certificate | |||||
| # tls your@email.com | |||||
| @identity { | |||||
| path /_matrix/identity/* | |||||
| } | |||||
| @noidentity { | |||||
| not path /_matrix/identity/* | |||||
| } | |||||
| @search { | |||||
| path /_matrix/client/r0/user_directory/search/* | |||||
| } | |||||
| @nosearch { | |||||
| not path /_matrix/client/r0/user_directory/search/* | |||||
| } | |||||
| @static { | |||||
| path /matrix/static-files/* | |||||
| } | |||||
| @nostatic { | |||||
| not path /matrix/static-files/* | |||||
| } | |||||
| @wellknown { | |||||
| path /.well-known/matrix/* | |||||
| } | |||||
| header { | |||||
| # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS | |||||
| Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" | |||||
| # Enable cross-site filter (XSS) and tell browser to block detected attacks | |||||
| X-XSS-Protection "1; mode=block" | |||||
| # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type | |||||
| X-Content-Type-Options "nosniff" | |||||
| # Disallow the site to be rendered within a frame (clickjacking protection) | |||||
| X-Frame-Options "DENY" | |||||
| # X-Robots-Tag | |||||
| X-Robots-Tag "noindex, noarchive, nofollow" | |||||
| } | |||||
| # Cache | |||||
| header @static { | |||||
| # Cache | |||||
| Cache-Control "public, max-age=31536000" | |||||
| defer | |||||
| } | |||||
| # identity | |||||
| handle @identity { | |||||
| reverse_proxy localhost:8090 { | |||||
| header_up X-Forwarded-Port {http.request.port} | |||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| header_up X-Forwarded-HttpsProto {proto} | |||||
| } | |||||
| } | |||||
| # search | |||||
| handle @search { | |||||
| reverse_proxy localhost:8090 { | |||||
| header_up X-Forwarded-Port {http.request.port} | |||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| header_up X-Forwarded-HttpsProto {proto} | |||||
| } | |||||
| } | |||||
| handle @wellknown { | |||||
| encode zstd gzip | |||||
| root * /matrix/static-files | |||||
| header Cache-Control max-age=14400 | |||||
| header Content-Type application/json | |||||
| header Access-Control-Allow-Origin * | |||||
| file_server | |||||
| } | |||||
| # If you have other well-knowns already handled by your base domain, you can replace the above block by this one, along with the replacement suggested in the base domain | |||||
| #handle @wellknown { | |||||
| # # .well-known is handled by base domain | |||||
| # reverse_proxy https://DOMAIN.tld { | |||||
| # header_up Host {http.reverse_proxy.upstream.hostport} | |||||
| #} | |||||
| matrix.example.tld { | |||||
| handle { | handle { | ||||
| encode zstd gzip | encode zstd gzip | ||||
| reverse_proxy localhost:8008 { | |||||
| reverse_proxy localhost:81 { | |||||
| header_up X-Forwarded-Port {http.request.port} | header_up X-Forwarded-Port {http.request.port} | ||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | header_up X-Forwarded-TlsProto {tls_protocol} | ||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | header_up X-Forwarded-TlsCipher {tls_cipher} | ||||
| header_up X-Forwarded-HttpsProto {proto} | header_up X-Forwarded-HttpsProto {proto} | ||||
| @@ -114,13 +12,12 @@ matrix.DOMAIN.tld { | |||||
| } | } | ||||
| } | } | ||||
| matrix.DOMAIN.tld:8448 { | |||||
| matrix.example.tld:8448 { | |||||
| handle { | handle { | ||||
| encode zstd gzip | encode zstd gzip | ||||
| reverse_proxy 127.0.0.1:8048 { | |||||
| reverse_proxy 127.0.0.1:8449 { | |||||
| header_up X-Forwarded-Port {http.request.port} | header_up X-Forwarded-Port {http.request.port} | ||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | header_up X-Forwarded-TlsProto {tls_protocol} | ||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | header_up X-Forwarded-TlsCipher {tls_cipher} | ||||
| header_up X-Forwarded-HttpsProto {proto} | header_up X-Forwarded-HttpsProto {proto} | ||||
| @@ -128,142 +25,16 @@ matrix.DOMAIN.tld:8448 { | |||||
| } | } | ||||
| } | } | ||||
| element.DOMAIN.tld { | |||||
| # creates letsencrypt certificate | |||||
| # tls your@email.com | |||||
| import cors https://*.DOMAIN.tld | |||||
| header { | |||||
| # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS | |||||
| Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" | |||||
| # Enable cross-site filter (XSS) and tell browser to block detected attacks | |||||
| X-XSS-Protection "1; mode=block" | |||||
| # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type | |||||
| X-Content-Type-Options "nosniff" | |||||
| # Disallow the site to be rendered within a frame (clickjacking protection) | |||||
| X-Frame-Options "DENY" | |||||
| # If using integrations that add frames to Element, such as Dimension and its integrations running on the same domain, it can be a good idea to limit sources allowed to be rendered | |||||
| # Content-Security-Policy frame-src https://*.DOMAIN.tld | |||||
| # X-Robots-Tag | |||||
| X-Robots-Tag "noindex, noarchive, nofollow" | |||||
| } | |||||
| handle { | |||||
| encode zstd gzip | |||||
| example.tld { | |||||
| # Uncomment this if you are following "(Option 3): Setting up reverse-proxying of the well-known files from the base domain's server to the Matrix server" of https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-well-known.md#option-3-setting-up-reverse-proxying-of-the-well-known-files-from-the-base-domains-server-to-the-matrix-server | |||||
| @wellknown { | |||||
| path /.well-known/matrix/* | |||||
| } | |||||
| reverse_proxy localhost:8765 { | |||||
| header_up X-Forwarded-Port {http.request.port} | |||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| header_up X-Forwarded-HttpsProto {proto} | |||||
| handle @wellknown { | |||||
| reverse_proxy https://matrix.example.tld { | |||||
| header_up Host {http.reverse_proxy.upstream.hostport} | |||||
| } | } | ||||
| } | |||||
| } | } | ||||
| #dimension.DOMAIN.tld { | |||||
| # | |||||
| # # creates letsencrypt certificate | |||||
| # # tls your@email.com | |||||
| # | |||||
| # import cors https://*.DOMAIN.tld | |||||
| # | |||||
| # header { | |||||
| # # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS | |||||
| # Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" | |||||
| # # Enable cross-site filter (XSS) and tell browser to block detected attacks | |||||
| # X-XSS-Protection "1; mode=block" | |||||
| # # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type | |||||
| # X-Content-Type-Options "nosniff" | |||||
| # # Only allow same base domain to render this website in a frame; Can be removed if the client (Element for example) is hosted on another domain (clickjacking protection) | |||||
| # Content-Security-Policy frame-ancestors https://*.DOMAIN.tld | |||||
| # # X-Robots-Tag | |||||
| # X-Robots-Tag "noindex, noarchive, nofollow" | |||||
| # } | |||||
| # | |||||
| # handle { | |||||
| # encode zstd gzip | |||||
| # | |||||
| # reverse_proxy localhost:8184 { | |||||
| # header_up X-Forwarded-Port {http.request.port} | |||||
| # header_up X-Forwarded-Proto {http.request.scheme} | |||||
| # header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| # header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| # header_up X-Forwarded-HttpsProto {proto} | |||||
| # } | |||||
| # } | |||||
| #} | |||||
| #jitsi.DOMAIN.tld { | |||||
| # | |||||
| # creates letsencrypt certificate | |||||
| # tls your@email.com | |||||
| # | |||||
| # import cors https://*.DOMAIN.tld | |||||
| # | |||||
| # header { | |||||
| # # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS | |||||
| # Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" | |||||
| # | |||||
| # # Enable cross-site filter (XSS) and tell browser to block detected attacks | |||||
| # X-XSS-Protection "1; mode=block" | |||||
| # | |||||
| # # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type | |||||
| # X-Content-Type-Options "nosniff" | |||||
| # # Only allow same base domain to render this website in a frame; Can be removed if the client (Element for example) is hosted on another domain | |||||
| # Content-Security-Policy frame-ancestors https://*.DOMAIN.tld | |||||
| # | |||||
| # # Disable some features | |||||
| # Feature-Policy "accelerometer 'none';ambient-light-sensor 'none'; autoplay 'none';camera 'none';encrypted-media 'none';focus-without-user-activation 'none'; geolocation 'none';gyroscope #'none';magnetometer 'none';microphone 'none';midi 'none';payment 'none';picture-in-picture 'none'; speaker 'none';sync-xhr 'none';usb 'none';vr 'none'" | |||||
| # | |||||
| # # Referer | |||||
| # Referrer-Policy "no-referrer" | |||||
| # | |||||
| # # X-Robots-Tag | |||||
| # X-Robots-Tag "none" | |||||
| # | |||||
| # # Remove Server header | |||||
| # -Server | |||||
| # } | |||||
| # | |||||
| # handle { | |||||
| # encode zstd gzip | |||||
| # | |||||
| # reverse_proxy 127.0.0.1:13080 { | |||||
| # header_up X-Forwarded-Port {http.request.port} | |||||
| # header_up X-Forwarded-Proto {http.request.scheme} | |||||
| # header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| # header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| # header_up X-Forwarded-HttpsProto {proto} | |||||
| # } | |||||
| # } | |||||
| #} | |||||
| #DOMAIN.com { | |||||
| # Uncomment this if you are following "(Option 3): Setting up reverse-proxying of the well-known files from the base domain's server to the Matrix server" of https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-well-known.md#option-3-setting-up-reverse-proxying-of-the-well-known-files-from-the-base-domains-server-to-the-matrix-server | |||||
| # @wellknown { | |||||
| # path /.well-known/matrix/* | |||||
| # } | |||||
| # | |||||
| # handle @wellknown { | |||||
| # reverse_proxy https://matrix.DOMAIN.com { | |||||
| # header_up Host {http.reverse_proxy.upstream.hostport} | |||||
| # } | |||||
| # } | |||||
| # # If you have other well-knowns already handled by your base domain, you can replace the above block by this one, along with the replacement suggested in the matrix subdomain | |||||
| # # handle /.well-known/* { | |||||
| # # encode zstd gzip | |||||
| # # header Cache-Control max-age=14400 | |||||
| # # header Content-Type application/json | |||||
| # # header Access-Control-Allow-Origin * | |||||
| # #} | |||||
| # | |||||
| # # Configration for the base domain goes here | |||||
| # # handle { | |||||
| # # header -Server | |||||
| # # encode zstd gzip | |||||
| # # reverse_proxy localhost:4020 | |||||
| # # } | |||||
| #} | |||||
| @@ -0,0 +1,269 @@ | |||||
| (cors) { | |||||
| @cors_preflight method OPTIONS | |||||
| handle @cors_preflight { | |||||
| header Access-Control-Allow-Origin "{args.0}" | |||||
| header Access-Control-Allow-Methods "HEAD, GET, POST, PUT, PATCH, DELETE" | |||||
| header Access-Control-Allow-Headers "Content-Type, Authorization" | |||||
| header Access-Control-Max-Age "3600" | |||||
| } | |||||
| } | |||||
| matrix.DOMAIN.tld { | |||||
| # creates letsencrypt certificate | |||||
| # tls your@email.com | |||||
| @identity { | |||||
| path /_matrix/identity/* | |||||
| } | |||||
| @noidentity { | |||||
| not path /_matrix/identity/* | |||||
| } | |||||
| @search { | |||||
| path /_matrix/client/r0/user_directory/search/* | |||||
| } | |||||
| @nosearch { | |||||
| not path /_matrix/client/r0/user_directory/search/* | |||||
| } | |||||
| @static { | |||||
| path /matrix/static-files/* | |||||
| } | |||||
| @nostatic { | |||||
| not path /matrix/static-files/* | |||||
| } | |||||
| @wellknown { | |||||
| path /.well-known/matrix/* | |||||
| } | |||||
| header { | |||||
| # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS | |||||
| Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" | |||||
| # Enable cross-site filter (XSS) and tell browser to block detected attacks | |||||
| X-XSS-Protection "1; mode=block" | |||||
| # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type | |||||
| X-Content-Type-Options "nosniff" | |||||
| # Disallow the site to be rendered within a frame (clickjacking protection) | |||||
| X-Frame-Options "DENY" | |||||
| # X-Robots-Tag | |||||
| X-Robots-Tag "noindex, noarchive, nofollow" | |||||
| } | |||||
| # Cache | |||||
| header @static { | |||||
| # Cache | |||||
| Cache-Control "public, max-age=31536000" | |||||
| defer | |||||
| } | |||||
| # identity | |||||
| handle @identity { | |||||
| reverse_proxy localhost:8090 { | |||||
| header_up X-Forwarded-Port {http.request.port} | |||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| header_up X-Forwarded-HttpsProto {proto} | |||||
| } | |||||
| } | |||||
| # search | |||||
| handle @search { | |||||
| reverse_proxy localhost:8090 { | |||||
| header_up X-Forwarded-Port {http.request.port} | |||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| header_up X-Forwarded-HttpsProto {proto} | |||||
| } | |||||
| } | |||||
| handle @wellknown { | |||||
| encode zstd gzip | |||||
| root * /matrix/static-files | |||||
| header Cache-Control max-age=14400 | |||||
| header Content-Type application/json | |||||
| header Access-Control-Allow-Origin * | |||||
| file_server | |||||
| } | |||||
| # If you have other well-knowns already handled by your base domain, you can replace the above block by this one, along with the replacement suggested in the base domain | |||||
| #handle @wellknown { | |||||
| # # .well-known is handled by base domain | |||||
| # reverse_proxy https://DOMAIN.tld { | |||||
| # header_up Host {http.reverse_proxy.upstream.hostport} | |||||
| #} | |||||
| handle { | |||||
| encode zstd gzip | |||||
| reverse_proxy localhost:8008 { | |||||
| header_up X-Forwarded-Port {http.request.port} | |||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| header_up X-Forwarded-HttpsProto {proto} | |||||
| } | |||||
| } | |||||
| } | |||||
| matrix.DOMAIN.tld:8448 { | |||||
| handle { | |||||
| encode zstd gzip | |||||
| reverse_proxy 127.0.0.1:8048 { | |||||
| header_up X-Forwarded-Port {http.request.port} | |||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| header_up X-Forwarded-HttpsProto {proto} | |||||
| } | |||||
| } | |||||
| } | |||||
| element.DOMAIN.tld { | |||||
| # creates letsencrypt certificate | |||||
| # tls your@email.com | |||||
| import cors https://*.DOMAIN.tld | |||||
| header { | |||||
| # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS | |||||
| Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" | |||||
| # Enable cross-site filter (XSS) and tell browser to block detected attacks | |||||
| X-XSS-Protection "1; mode=block" | |||||
| # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type | |||||
| X-Content-Type-Options "nosniff" | |||||
| # Disallow the site to be rendered within a frame (clickjacking protection) | |||||
| X-Frame-Options "DENY" | |||||
| # If using integrations that add frames to Element, such as Dimension and its integrations running on the same domain, it can be a good idea to limit sources allowed to be rendered | |||||
| # Content-Security-Policy frame-src https://*.DOMAIN.tld | |||||
| # X-Robots-Tag | |||||
| X-Robots-Tag "noindex, noarchive, nofollow" | |||||
| } | |||||
| handle { | |||||
| encode zstd gzip | |||||
| reverse_proxy localhost:8765 { | |||||
| header_up X-Forwarded-Port {http.request.port} | |||||
| header_up X-Forwarded-Proto {http.request.scheme} | |||||
| header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| header_up X-Forwarded-HttpsProto {proto} | |||||
| } | |||||
| } | |||||
| #dimension.DOMAIN.tld { | |||||
| # | |||||
| # # creates letsencrypt certificate | |||||
| # # tls your@email.com | |||||
| # | |||||
| # import cors https://*.DOMAIN.tld | |||||
| # | |||||
| # header { | |||||
| # # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS | |||||
| # Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" | |||||
| # # Enable cross-site filter (XSS) and tell browser to block detected attacks | |||||
| # X-XSS-Protection "1; mode=block" | |||||
| # # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type | |||||
| # X-Content-Type-Options "nosniff" | |||||
| # # Only allow same base domain to render this website in a frame; Can be removed if the client (Element for example) is hosted on another domain (clickjacking protection) | |||||
| # Content-Security-Policy frame-ancestors https://*.DOMAIN.tld | |||||
| # # X-Robots-Tag | |||||
| # X-Robots-Tag "noindex, noarchive, nofollow" | |||||
| # } | |||||
| # | |||||
| # handle { | |||||
| # encode zstd gzip | |||||
| # | |||||
| # reverse_proxy localhost:8184 { | |||||
| # header_up X-Forwarded-Port {http.request.port} | |||||
| # header_up X-Forwarded-Proto {http.request.scheme} | |||||
| # header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| # header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| # header_up X-Forwarded-HttpsProto {proto} | |||||
| # } | |||||
| # } | |||||
| #} | |||||
| #jitsi.DOMAIN.tld { | |||||
| # | |||||
| # creates letsencrypt certificate | |||||
| # tls your@email.com | |||||
| # | |||||
| # import cors https://*.DOMAIN.tld | |||||
| # | |||||
| # header { | |||||
| # # Enable HTTP Strict Transport Security (HSTS) to force clients to always connect via HTTPS | |||||
| # Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" | |||||
| # | |||||
| # # Enable cross-site filter (XSS) and tell browser to block detected attacks | |||||
| # X-XSS-Protection "1; mode=block" | |||||
| # | |||||
| # # Prevent some browsers from MIME-sniffing a response away from the declared Content-Type | |||||
| # X-Content-Type-Options "nosniff" | |||||
| # # Only allow same base domain to render this website in a frame; Can be removed if the client (Element for example) is hosted on another domain | |||||
| # Content-Security-Policy frame-ancestors https://*.DOMAIN.tld | |||||
| # | |||||
| # # Disable some features | |||||
| # Feature-Policy "accelerometer 'none';ambient-light-sensor 'none'; autoplay 'none';camera 'none';encrypted-media 'none';focus-without-user-activation 'none'; geolocation 'none';gyroscope #'none';magnetometer 'none';microphone 'none';midi 'none';payment 'none';picture-in-picture 'none'; speaker 'none';sync-xhr 'none';usb 'none';vr 'none'" | |||||
| # | |||||
| # # Referer | |||||
| # Referrer-Policy "no-referrer" | |||||
| # | |||||
| # # X-Robots-Tag | |||||
| # X-Robots-Tag "none" | |||||
| # | |||||
| # # Remove Server header | |||||
| # -Server | |||||
| # } | |||||
| # | |||||
| # handle { | |||||
| # encode zstd gzip | |||||
| # | |||||
| # reverse_proxy 127.0.0.1:13080 { | |||||
| # header_up X-Forwarded-Port {http.request.port} | |||||
| # header_up X-Forwarded-Proto {http.request.scheme} | |||||
| # header_up X-Forwarded-TlsProto {tls_protocol} | |||||
| # header_up X-Forwarded-TlsCipher {tls_cipher} | |||||
| # header_up X-Forwarded-HttpsProto {proto} | |||||
| # } | |||||
| # } | |||||
| #} | |||||
| #DOMAIN.com { | |||||
| # Uncomment this if you are following "(Option 3): Setting up reverse-proxying of the well-known files from the base domain's server to the Matrix server" of https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-well-known.md#option-3-setting-up-reverse-proxying-of-the-well-known-files-from-the-base-domains-server-to-the-matrix-server | |||||
| # @wellknown { | |||||
| # path /.well-known/matrix/* | |||||
| # } | |||||
| # | |||||
| # handle @wellknown { | |||||
| # reverse_proxy https://matrix.DOMAIN.com { | |||||
| # header_up Host {http.reverse_proxy.upstream.hostport} | |||||
| # } | |||||
| # } | |||||
| # # If you have other well-knowns already handled by your base domain, you can replace the above block by this one, along with the replacement suggested in the matrix subdomain | |||||
| # # handle /.well-known/* { | |||||
| # # encode zstd gzip | |||||
| # # header Cache-Control max-age=14400 | |||||
| # # header Content-Type application/json | |||||
| # # header Access-Control-Allow-Origin * | |||||
| # #} | |||||
| # | |||||
| # # Configration for the base domain goes here | |||||
| # # handle { | |||||
| # # header -Server | |||||
| # # encode zstd gzip | |||||
| # # reverse_proxy localhost:4020 | |||||
| # # } | |||||
| #} | |||||
| @@ -1,12 +1,20 @@ | |||||
| # Caddyfile | |||||
| # Caddy reverse-proxy fronting the playbook's integrated Traefik reverse-proxy | |||||
| This directory contains sample files that show you how to do reverse-proxying using Caddy2. | |||||
| This directory contains a sample config that shows you how to front the integrated [Traefik](https://traefik.io/) reverse-proxy webserver with your own [Caddy](https://caddyserver.com/) reverse-proxy. | |||||
| ## Config | |||||
| | Variable | Function | | |||||
| | ------------------ | -------- | | |||||
| | tls your@email.com | Specify an email address for your [ACME account](https://caddyserver.com/docs/caddyfile/directives/tls) (but if only one email is used for all sites, we recommend the email [global option](https://caddyserver.com/docs/caddyfile/options) instead) | | |||||
| | tls | To enable [tls](https://caddyserver.com/docs/caddyfile/directives/tls) support uncomment the lines for tls | | |||||
| | Dimension | To enable Dimension support uncomment the lines for Dimension and set your data | | |||||
| | Jitsi | To enable Jitsi support uncomment the lines for Jitsi and set your data | | |||||
| ## Prerequisite configuration | |||||
| To get started, first follow the [front the integrated reverse-proxy webserver with another reverse-proxy](../../docs/configuring-playbook-own-webserver.md#fronting-the-integrated-reverse-proxy-webserver-with-another-reverse-proxy) instructions and update your playbook's configuration (`inventory/host_vars/matrix.<your-domain>/vars.yml`). | |||||
| ## Using the Caddyfile | |||||
| You can either just use the [Caddyfile](Caddyfile) directly or append its content to your own Caddyfile. | |||||
| In both cases make sure to replace all the `example.tld` domains with your own domain. | |||||
| This example does not include additional services like element, but you should be able copy the first block and replace the matrix subdomain with the additional services subdomain. I have not tested this though. | |||||
| # Caddyfile.deprecated | |||||
| This can be used as a [Caddy](https://caddyserver.com/) reverse-proxy without intermediary playbook managed reverse proxy. However, this setup is not supported by the playbook anymore. Instead [front the integrated reverse-proxy webserver with another reverse-proxy](../../docs/configuring-playbook-own-webserver.md#fronting-the-integrated-reverse-proxy-webserver-with-another-reverse-proxy) as described above. | |||||
| @@ -1,6 +1,6 @@ | |||||
| # Nginx reverse-proxy fronting the playbook's integrated Traefik reverse-proxy | # Nginx reverse-proxy fronting the playbook's integrated Traefik reverse-proxy | ||||
| This directory contains a sample config that shows you how use the [nginx](https://nginx.org/) webserver to front the integrated [Traefik](https://traefik.io/) reverse-proxy webserver with another reverse-proxy. | |||||
| This directory contains a sample config that shows you how to use the [nginx](https://nginx.org/) webserver to front the integrated [Traefik](https://traefik.io/) reverse-proxy webserver with another reverse-proxy. | |||||
| ## Prerequisite configuration | ## Prerequisite configuration | ||||
| @@ -210,25 +210,25 @@ devture_systemd_service_manager_services_list_auto: | | |||||
| {{ | {{ | ||||
| ([{'name': (backup_borg_identifier + '.timer'), 'priority': 5000, 'groups': ['matrix', 'backup', 'borg']}] if backup_borg_enabled else []) | ([{'name': (backup_borg_identifier + '.timer'), 'priority': 5000, 'groups': ['matrix', 'backup', 'borg']}] if backup_borg_enabled else []) | ||||
| + | + | ||||
| ([{'name': 'matrix-bot-buscarron.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'buscarron']}] if matrix_bot_buscarron_enabled else []) | |||||
| ([{'name': 'matrix-bot-buscarron.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'buscarron', 'bot-buscarron']}] if matrix_bot_buscarron_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-go-neb.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'go-neb']}] if matrix_bot_go_neb_enabled else []) | |||||
| ([{'name': 'matrix-bot-go-neb.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'go-neb', 'bot-go-neb']}] if matrix_bot_go_neb_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-honoroit.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'honoroit']}] if matrix_bot_honoroit_enabled else []) | |||||
| ([{'name': 'matrix-bot-honoroit.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'honoroit', 'bot-honoroit']}] if matrix_bot_honoroit_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-matrix-registration-bot.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'registration-bot']}] if matrix_bot_matrix_registration_bot_enabled else []) | |||||
| ([{'name': 'matrix-bot-matrix-registration-bot.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'registration-bot', 'bot-matrix-registration-bot']}] if matrix_bot_matrix_registration_bot_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-matrix-reminder-bot.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'reminder-bot']}] if matrix_bot_matrix_reminder_bot_enabled else []) | |||||
| ([{'name': 'matrix-bot-matrix-reminder-bot.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'reminder-bot', 'bot-matrix-reminder-bot']}] if matrix_bot_matrix_reminder_bot_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-maubot.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'maubot']}] if matrix_bot_maubot_enabled else []) | |||||
| ([{'name': 'matrix-bot-maubot.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'maubot', 'bot-maubot']}] if matrix_bot_maubot_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-mjolnir.service', 'priority': 4000, 'groups': ['matrix', 'bots', 'mjolnir']}] if matrix_bot_mjolnir_enabled else []) | |||||
| ([{'name': 'matrix-bot-mjolnir.service', 'priority': 4000, 'groups': ['matrix', 'bots', 'mjolnir', 'bot-mjolnir']}] if matrix_bot_mjolnir_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-draupnir.service', 'priority': 4000, 'groups': ['matrix', 'bots', 'draupnir']}] if matrix_bot_draupnir_enabled else []) | |||||
| ([{'name': 'matrix-bot-draupnir.service', 'priority': 4000, 'groups': ['matrix', 'bots', 'draupnir', 'bot-draupnir']}] if matrix_bot_draupnir_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-postmoogle.service', 'priority': 4000, 'groups': ['matrix', 'bots', 'postmoogle']}] if matrix_bot_postmoogle_enabled else []) | |||||
| ([{'name': 'matrix-bot-postmoogle.service', 'priority': 4000, 'groups': ['matrix', 'bots', 'postmoogle', 'bot-postmoogle']}] if matrix_bot_postmoogle_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-bot-chatgpt.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'chatgpt']}] if matrix_bot_chatgpt_enabled else []) | |||||
| ([{'name': 'matrix-bot-chatgpt.service', 'priority': 2200, 'groups': ['matrix', 'bots', 'chatgpt', 'bot-chatgpt']}] if matrix_bot_chatgpt_enabled else []) | |||||
| + | + | ||||
| ([{'name': 'matrix-appservice-discord.service', 'priority': 2000, 'groups': ['matrix', 'bridges', 'appservice-discord']}] if matrix_appservice_discord_enabled else []) | ([{'name': 'matrix-appservice-discord.service', 'priority': 2000, 'groups': ['matrix', 'bridges', 'appservice-discord']}] if matrix_appservice_discord_enabled else []) | ||||
| + | + | ||||
| @@ -1653,8 +1653,15 @@ matrix_bot_maubot_database_password: "{{ '%s' | format(matrix_homeserver_generic | |||||
| # We don't enable bots by default. | # We don't enable bots by default. | ||||
| matrix_bot_honoroit_enabled: false | matrix_bot_honoroit_enabled: false | ||||
| matrix_bot_honoroit_hostname: "{{ matrix_server_fqn_matrix }}" | matrix_bot_honoroit_hostname: "{{ matrix_server_fqn_matrix }}" | ||||
| matrix_bot_honoroit_path_prefix: /honoroit | |||||
| # For consistency with other things hosted at the matrix FQN, we adjust the metrics endpoint | |||||
| # so that metrics would be served at `/metrics/SERVICE_NAME`, and not at the default path for the role (`PREFIX/metrics`). | |||||
| matrix_bot_honoroit_container_labels_traefik_metrics_path: /metrics/honoroit | |||||
| matrix_bot_honoroit_systemd_required_services_list: | | matrix_bot_honoroit_systemd_required_services_list: | | ||||
| {{ | {{ | ||||
| ['docker.service'] | ['docker.service'] | ||||
| @@ -1,7 +1,7 @@ | |||||
| --- | --- | ||||
| - src: git+https://github.com/mother-of-all-self-hosting/ansible-role-aux.git | - src: git+https://github.com/mother-of-all-self-hosting/ansible-role-aux.git | ||||
| version: v1.0.0-0 | |||||
| version: v1.0.0-1 | |||||
| name: aux | name: aux | ||||
| - src: git+https://gitlab.com/etke.cc/roles/backup_borg.git | - src: git+https://gitlab.com/etke.cc/roles/backup_borg.git | ||||
| version: v1.2.4-1.7.13-0 | version: v1.2.4-1.7.13-0 | ||||
| @@ -26,7 +26,7 @@ | |||||
| - src: git+https://github.com/devture/com.devture.ansible.role.timesync.git | - src: git+https://github.com/devture/com.devture.ansible.role.timesync.git | ||||
| version: v1.0.0-0 | version: v1.0.0-0 | ||||
| - src: git+https://github.com/devture/com.devture.ansible.role.traefik.git | - src: git+https://github.com/devture/com.devture.ansible.role.traefik.git | ||||
| version: v2.9.10-2 | |||||
| version: v2.10.1-1 | |||||
| - src: git+https://github.com/devture/com.devture.ansible.role.traefik_certs_dumper.git | - src: git+https://github.com/devture/com.devture.ansible.role.traefik_certs_dumper.git | ||||
| version: v2.8.1-0 | version: v2.8.1-0 | ||||
| - src: git+https://gitlab.com/etke.cc/roles/etherpad.git | - src: git+https://gitlab.com/etke.cc/roles/etherpad.git | ||||
| @@ -40,13 +40,14 @@ | |||||
| version: v8615-0 | version: v8615-0 | ||||
| name: jitsi | name: jitsi | ||||
| - src: git+https://gitlab.com/etke.cc/roles/ntfy.git | - src: git+https://gitlab.com/etke.cc/roles/ntfy.git | ||||
| version: v2.4.0-0 | |||||
| version: v2.5.0-0 | |||||
| - src: git+https://github.com/mother-of-all-self-hosting/ansible-role-prometheus.git | - src: git+https://github.com/mother-of-all-self-hosting/ansible-role-prometheus.git | ||||
| version: v2.44.0-0 | version: v2.44.0-0 | ||||
| name: prometheus | name: prometheus | ||||
| - src: git+https://gitlab.com/etke.cc/roles/prometheus_node_exporter.git | - src: git+https://gitlab.com/etke.cc/roles/prometheus_node_exporter.git | ||||
| version: v1.5.0-7 | |||||
| - src: git+https://gitlab.com/etke.cc/roles/prometheus_postgres_exporter.git | |||||
| version: v1.6.0-0 | |||||
| - src: git+https://github.com/mother-of-all-self-hosting/ansible-role-prometheus-postgres-exporter.git | |||||
| version: v0.12.0-0 | version: v0.12.0-0 | ||||
| name: prometheus_postgres_exporter | |||||
| - src: git+https://gitlab.com/etke.cc/roles/redis.git | - src: git+https://gitlab.com/etke.cc/roles/redis.git | ||||
| version: v7.0.10-0 | version: v7.0.10-0 | ||||
| @@ -4,7 +4,7 @@ | |||||
| matrix_bot_chatgpt_enabled: true | matrix_bot_chatgpt_enabled: true | ||||
| matrix_bot_chatgpt_version: 3.1.0 | |||||
| matrix_bot_chatgpt_version: 3.1.2 | |||||
| matrix_bot_chatgpt_container_image_self_build: false | matrix_bot_chatgpt_container_image_self_build: false | ||||
| matrix_bot_chatgpt_container_image_self_build_repo: "https://github.com/matrixgpt/matrix-chatgpt-bot" | matrix_bot_chatgpt_container_image_self_build_repo: "https://github.com/matrixgpt/matrix-chatgpt-bot" | ||||
| @@ -4,7 +4,7 @@ | |||||
| matrix_bot_draupnir_enabled: true | matrix_bot_draupnir_enabled: true | ||||
| matrix_bot_draupnir_version: "v1.80.1" | |||||
| matrix_bot_draupnir_version: "v1.83.0" | |||||
| matrix_bot_draupnir_container_image_self_build: false | matrix_bot_draupnir_container_image_self_build: false | ||||
| matrix_bot_draupnir_container_image_self_build_repo: "https://github.com/Gnuxie/Draupnir.git" | matrix_bot_draupnir_container_image_self_build_repo: "https://github.com/Gnuxie/Draupnir.git" | ||||
| @@ -56,8 +56,7 @@ matrix_bot_honoroit_container_labels_traefik_docker_network: "{{ matrix_bot_hono | |||||
| matrix_bot_honoroit_container_labels_traefik_hostname: "{{ matrix_bot_honoroit_hostname }}" | matrix_bot_honoroit_container_labels_traefik_hostname: "{{ matrix_bot_honoroit_hostname }}" | ||||
| # The path prefix must either be `/` or not end with a slash (e.g. `/honoroit`). | # The path prefix must either be `/` or not end with a slash (e.g. `/honoroit`). | ||||
| matrix_bot_honoroit_container_labels_traefik_path_prefix: "{{ matrix_bot_honoroit_path_prefix }}" | matrix_bot_honoroit_container_labels_traefik_path_prefix: "{{ matrix_bot_honoroit_path_prefix }}" | ||||
| matrix_bot_honoroit_container_labels_traefik_rule: "Host(`{{ matrix_bot_honoroit_container_labels_traefik_hostname }}`){% if matrix_bot_honoroit_container_labels_traefik_path_prefix != '/' %} && PathPrefix(`{{ matrix_bot_honoroit_container_labels_traefik_path_prefix }}`){% endif %}" | |||||
| matrix_bot_honoroit_container_labels_traefik_metrics_path: "{{ matrix_bot_honoroit_metrics_path }}" | |||||
| matrix_bot_honoroit_container_labels_traefik_metrics_path: "{{ '' if matrix_bot_honoroit_path_prefix == '/' else matrix_bot_honoroit_path_prefix }}{{ matrix_bot_honoroit_metrics_path }}" | |||||
| matrix_bot_honoroit_container_labels_traefik_metrics_rule: "Host(`{{ matrix_bot_honoroit_container_labels_traefik_hostname }}`) && Path(`{{ matrix_bot_honoroit_container_labels_traefik_metrics_path }}`)" | matrix_bot_honoroit_container_labels_traefik_metrics_rule: "Host(`{{ matrix_bot_honoroit_container_labels_traefik_hostname }}`) && Path(`{{ matrix_bot_honoroit_container_labels_traefik_metrics_path }}`)" | ||||
| matrix_bot_honoroit_container_labels_traefik_priority: 0 | matrix_bot_honoroit_container_labels_traefik_priority: 0 | ||||
| matrix_bot_honoroit_container_labels_traefik_entrypoints: web-secure | matrix_bot_honoroit_container_labels_traefik_entrypoints: web-secure | ||||
| @@ -31,27 +31,12 @@ traefik.http.middlewares.matrix-bot-honoroit-auth.basicauth.users={{ lookup('ans | |||||
| {% set middlewares_metrics = middlewares + ['matrix-bot-honoroit-auth'] %} | {% set middlewares_metrics = middlewares + ['matrix-bot-honoroit-auth'] %} | ||||
| {% endif %} | {% endif %} | ||||
| traefik.http.routers.matrix-bot-honoroit.rule={{ matrix_bot_honoroit_container_labels_traefik_rule }} | |||||
| {% if matrix_bot_honoroit_container_labels_traefik_priority | int > 0 %} | |||||
| traefik.http.routers.matrix-bot-honoroit.priority={{ matrix_bot_honoroit_container_labels_traefik_priority }} | |||||
| {% endif %} | |||||
| traefik.http.routers.matrix-bot-honoroit.service=matrix-bot-honoroit | |||||
| {% if middlewares | length > 0 %} | |||||
| traefik.http.routers.matrix-bot-honoroit.middlewares={{ middlewares | join(',') }} | |||||
| {% endif %} | |||||
| traefik.http.routers.matrix-bot-honoroit.entrypoints={{ matrix_bot_honoroit_container_labels_traefik_entrypoints }} | |||||
| traefik.http.routers.matrix-bot-honoroit.tls={{ matrix_bot_honoroit_container_labels_traefik_tls | to_json }} | |||||
| {% if matrix_bot_honoroit_container_labels_traefik_tls %} | |||||
| traefik.http.routers.matrix-bot-honoroit.tls.certResolver={{ matrix_bot_honoroit_container_labels_traefik_tls_certResolver }} | |||||
| {% endif %} | |||||
| traefik.http.services.matrix-bot-honoroit.loadbalancer.server.port=8080 | |||||
| {% if middlewares_metrics | length > 0 %} | {% if middlewares_metrics | length > 0 %} | ||||
| traefik.http.routers.matrix-bot-honoroit-metrics.rule={{ matrix_bot_honoroit_container_labels_traefik_metrics_rule }} | traefik.http.routers.matrix-bot-honoroit-metrics.rule={{ matrix_bot_honoroit_container_labels_traefik_metrics_rule }} | ||||
| {% if matrix_bot_honoroit_container_labels_traefik_priority | int > 0 %} | {% if matrix_bot_honoroit_container_labels_traefik_priority | int > 0 %} | ||||
| traefik.http.routers.matrix-bot-honoroit-metrics.priority={{ matrix_bot_honoroit_container_labels_traefik_priority }} | traefik.http.routers.matrix-bot-honoroit-metrics.priority={{ matrix_bot_honoroit_container_labels_traefik_priority }} | ||||
| {% endif %} | {% endif %} | ||||
| traefik.http.routers.matrix-bot-honoroit-metrics.service=matrix-bot-honoroit | |||||
| traefik.http.routers.matrix-bot-honoroit-metrics.service=matrix-bot-honoroit-metrics | |||||
| traefik.http.routers.matrix-bot-honoroit-metrics.middlewares={{ middlewares_metrics | join(',') }} | traefik.http.routers.matrix-bot-honoroit-metrics.middlewares={{ middlewares_metrics | join(',') }} | ||||
| traefik.http.routers.matrix-bot-honoroit-metrics.entrypoints={{ matrix_bot_honoroit_container_labels_traefik_entrypoints }} | traefik.http.routers.matrix-bot-honoroit-metrics.entrypoints={{ matrix_bot_honoroit_container_labels_traefik_entrypoints }} | ||||
| traefik.http.routers.matrix-bot-honoroit-metrics.tls={{ matrix_bot_honoroit_container_labels_traefik_tls | to_json }} | traefik.http.routers.matrix-bot-honoroit-metrics.tls={{ matrix_bot_honoroit_container_labels_traefik_tls | to_json }} | ||||
| @@ -81,10 +81,10 @@ matrix_bot_postmoogle_maxsize: '1024' | |||||
| # A list of admins | # A list of admins | ||||
| # Example set of rules: | # Example set of rules: | ||||
| # matrix_bot_postmoogle_admins: | # matrix_bot_postmoogle_admins: | ||||
| # - @someone:example.com | |||||
| # - @another:example.com | |||||
| # - @bot.*:example.com | |||||
| # - @*:another.com | |||||
| # - '@someone:example.com' | |||||
| # - '@another:example.com' | |||||
| # - '@bot.*:example.com' | |||||
| # - '@*:another.com' | |||||
| matrix_bot_postmoogle_admins: "{{ [matrix_admin] if matrix_admin else [] }}" | matrix_bot_postmoogle_admins: "{{ [matrix_admin] if matrix_admin else [] }}" | ||||
| # Sentry DSN. Deprecated, use matrix_bot_postmoogle_monitoring_sentry_dsn | # Sentry DSN. Deprecated, use matrix_bot_postmoogle_monitoring_sentry_dsn | ||||
| @@ -10,7 +10,7 @@ matrix_hookshot_container_image_self_build: false | |||||
| matrix_hookshot_container_image_self_build_repo: "https://github.com/matrix-org/matrix-hookshot.git" | matrix_hookshot_container_image_self_build_repo: "https://github.com/matrix-org/matrix-hookshot.git" | ||||
| matrix_hookshot_container_image_self_build_branch: "{{ 'main' if matrix_hookshot_version == 'latest' else matrix_hookshot_version }}" | matrix_hookshot_container_image_self_build_branch: "{{ 'main' if matrix_hookshot_version == 'latest' else matrix_hookshot_version }}" | ||||
| matrix_hookshot_version: 4.0.0 | |||||
| matrix_hookshot_version: 4.1.0 | |||||
| matrix_hookshot_docker_image: "{{ matrix_hookshot_docker_image_name_prefix }}halfshot/matrix-hookshot:{{ matrix_hookshot_version }}" | matrix_hookshot_docker_image: "{{ matrix_hookshot_docker_image_name_prefix }}halfshot/matrix-hookshot:{{ matrix_hookshot_version }}" | ||||
| matrix_hookshot_docker_image_name_prefix: "{{ 'localhost/' if matrix_hookshot_container_image_self_build else matrix_container_global_registry_prefix }}" | matrix_hookshot_docker_image_name_prefix: "{{ 'localhost/' if matrix_hookshot_container_image_self_build else matrix_container_global_registry_prefix }}" | ||||
| @@ -81,7 +81,7 @@ | |||||
| --user={{ matrix_user_uid }}:{{ matrix_user_gid }} | --user={{ matrix_user_uid }}:{{ matrix_user_gid }} | ||||
| --cap-drop=ALL | --cap-drop=ALL | ||||
| -v {{ matrix_hookshot_base_path }}/config.yml:/config.yml | -v {{ matrix_hookshot_base_path }}/config.yml:/config.yml | ||||
| {{ matrix_hookshot_docker_image }} node Config/Config.js /config.yml | |||||
| {{ matrix_hookshot_docker_image }} node config/Config.js /config.yml | |||||
| register: hookshot_config_validation_result | register: hookshot_config_validation_result | ||||
| changed_when: false | changed_when: false | ||||
| @@ -7,7 +7,7 @@ matrix_mautrix_facebook_enabled: true | |||||
| matrix_mautrix_facebook_container_image_self_build: false | matrix_mautrix_facebook_container_image_self_build: false | ||||
| matrix_mautrix_facebook_container_image_self_build_repo: "https://mau.dev/mautrix/facebook.git" | matrix_mautrix_facebook_container_image_self_build_repo: "https://mau.dev/mautrix/facebook.git" | ||||
| matrix_mautrix_facebook_version: v0.4.1 | |||||
| matrix_mautrix_facebook_version: v0.5.0 | |||||
| matrix_mautrix_facebook_docker_image: "{{ matrix_mautrix_facebook_docker_image_name_prefix }}mautrix/facebook:{{ matrix_mautrix_facebook_version }}" | matrix_mautrix_facebook_docker_image: "{{ matrix_mautrix_facebook_docker_image_name_prefix }}mautrix/facebook:{{ matrix_mautrix_facebook_version }}" | ||||
| matrix_mautrix_facebook_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_facebook_container_image_self_build else 'dock.mau.dev/' }}" | matrix_mautrix_facebook_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_facebook_container_image_self_build else 'dock.mau.dev/' }}" | ||||
| matrix_mautrix_facebook_docker_image_force_pull: "{{ matrix_mautrix_facebook_docker_image.endswith(':latest') }}" | matrix_mautrix_facebook_docker_image_force_pull: "{{ matrix_mautrix_facebook_docker_image.endswith(':latest') }}" | ||||
| @@ -8,7 +8,7 @@ matrix_mautrix_instagram_container_image_self_build: false | |||||
| matrix_mautrix_instagram_container_image_self_build_repo: "https://github.com/mautrix/instagram.git" | matrix_mautrix_instagram_container_image_self_build_repo: "https://github.com/mautrix/instagram.git" | ||||
| matrix_mautrix_instagram_container_image_self_build_repo_version: "{{ 'master' if matrix_mautrix_instagram_version == 'latest' else matrix_mautrix_instagram_version }}" | matrix_mautrix_instagram_container_image_self_build_repo_version: "{{ 'master' if matrix_mautrix_instagram_version == 'latest' else matrix_mautrix_instagram_version }}" | ||||
| matrix_mautrix_instagram_version: v0.2.3 | |||||
| matrix_mautrix_instagram_version: v0.3.0 | |||||
| # See: https://mau.dev/tulir/mautrix-instagram/container_registry | # See: https://mau.dev/tulir/mautrix-instagram/container_registry | ||||
| matrix_mautrix_instagram_docker_image: "{{ matrix_mautrix_instagram_docker_image_name_prefix }}mautrix/instagram:{{ matrix_mautrix_instagram_version }}" | matrix_mautrix_instagram_docker_image: "{{ matrix_mautrix_instagram_docker_image_name_prefix }}mautrix/instagram:{{ matrix_mautrix_instagram_version }}" | ||||
| matrix_mautrix_instagram_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_instagram_container_image_self_build else 'dock.mau.dev/' }}" | matrix_mautrix_instagram_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_instagram_container_image_self_build else 'dock.mau.dev/' }}" | ||||
| @@ -9,7 +9,7 @@ matrix_mautrix_signal_docker_repo: "https://mau.dev/mautrix/signal.git" | |||||
| matrix_mautrix_signal_docker_repo_version: "{{ 'master' if matrix_mautrix_signal_version == 'latest' else matrix_mautrix_signal_version }}" | matrix_mautrix_signal_docker_repo_version: "{{ 'master' if matrix_mautrix_signal_version == 'latest' else matrix_mautrix_signal_version }}" | ||||
| matrix_mautrix_signal_docker_src_files_path: "{{ matrix_base_data_path }}/mautrix-signal/docker-src" | matrix_mautrix_signal_docker_src_files_path: "{{ matrix_base_data_path }}/mautrix-signal/docker-src" | ||||
| matrix_mautrix_signal_version: v0.4.2 | |||||
| matrix_mautrix_signal_version: v0.4.3 | |||||
| matrix_mautrix_signal_daemon_version: 0.23.2 | matrix_mautrix_signal_daemon_version: 0.23.2 | ||||
| # See: https://mau.dev/mautrix/signal/container_registry | # See: https://mau.dev/mautrix/signal/container_registry | ||||
| matrix_mautrix_signal_docker_image: "{{ matrix_mautrix_signal_docker_image_name_prefix }}mautrix/signal:{{ matrix_mautrix_signal_version }}" | matrix_mautrix_signal_docker_image: "{{ matrix_mautrix_signal_docker_image_name_prefix }}mautrix/signal:{{ matrix_mautrix_signal_version }}" | ||||
| @@ -17,7 +17,7 @@ matrix_mautrix_telegram_docker_repo: "https://mau.dev/mautrix/telegram.git" | |||||
| matrix_mautrix_telegram_docker_repo_version: "{{ 'master' if matrix_mautrix_telegram_version == 'latest' else matrix_mautrix_telegram_version }}" | matrix_mautrix_telegram_docker_repo_version: "{{ 'master' if matrix_mautrix_telegram_version == 'latest' else matrix_mautrix_telegram_version }}" | ||||
| matrix_mautrix_telegram_docker_src_files_path: "{{ matrix_base_data_path }}/mautrix-telegram/docker-src" | matrix_mautrix_telegram_docker_src_files_path: "{{ matrix_base_data_path }}/mautrix-telegram/docker-src" | ||||
| matrix_mautrix_telegram_version: v0.13.0 | |||||
| matrix_mautrix_telegram_version: v0.14.0 | |||||
| # See: https://mau.dev/mautrix/telegram/container_registry | # See: https://mau.dev/mautrix/telegram/container_registry | ||||
| matrix_mautrix_telegram_docker_image: "{{ matrix_mautrix_telegram_docker_image_name_prefix }}mautrix/telegram:{{ matrix_mautrix_telegram_version }}" | matrix_mautrix_telegram_docker_image: "{{ matrix_mautrix_telegram_docker_image_name_prefix }}mautrix/telegram:{{ matrix_mautrix_telegram_version }}" | ||||
| matrix_mautrix_telegram_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_telegram_container_image_self_build else 'dock.mau.dev/' }}" | matrix_mautrix_telegram_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_telegram_container_image_self_build else 'dock.mau.dev/' }}" | ||||
| @@ -8,7 +8,7 @@ matrix_mautrix_twitter_container_image_self_build: false | |||||
| matrix_mautrix_twitter_container_image_self_build_repo: "https://github.com/mautrix/twitter.git" | matrix_mautrix_twitter_container_image_self_build_repo: "https://github.com/mautrix/twitter.git" | ||||
| matrix_mautrix_twitter_container_image_self_build_repo_version: "{{ 'master' if matrix_mautrix_twitter_version == 'latest' else matrix_mautrix_twitter_version }}" | matrix_mautrix_twitter_container_image_self_build_repo_version: "{{ 'master' if matrix_mautrix_twitter_version == 'latest' else matrix_mautrix_twitter_version }}" | ||||
| matrix_mautrix_twitter_version: v0.1.5 | |||||
| matrix_mautrix_twitter_version: v0.1.6 | |||||
| # See: https://mau.dev/tulir/mautrix-twitter/container_registry | # See: https://mau.dev/tulir/mautrix-twitter/container_registry | ||||
| matrix_mautrix_twitter_docker_image: "{{ matrix_mautrix_twitter_docker_image_name_prefix }}mautrix/twitter:{{ matrix_mautrix_twitter_version }}" | matrix_mautrix_twitter_docker_image: "{{ matrix_mautrix_twitter_docker_image_name_prefix }}mautrix/twitter:{{ matrix_mautrix_twitter_version }}" | ||||
| matrix_mautrix_twitter_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_twitter_container_image_self_build else 'dock.mau.dev/' }}" | matrix_mautrix_twitter_docker_image_name_prefix: "{{ 'localhost/' if matrix_mautrix_twitter_container_image_self_build else 'dock.mau.dev/' }}" | ||||
| @@ -3,7 +3,7 @@ | |||||
| "defaultHomeServer": {{ matrix_client_hydrogen_default_hs_url | string | to_json }}, | "defaultHomeServer": {{ matrix_client_hydrogen_default_hs_url | string | to_json }}, | ||||
| "bugReportEndpointUrl": {{ matrix_client_hydrogen_bugReportEndpointUrl | to_json }}, | "bugReportEndpointUrl": {{ matrix_client_hydrogen_bugReportEndpointUrl | to_json }}, | ||||
| "themeManifests": [ | "themeManifests": [ | ||||
| "{{ matrix_client_hydrogen_path_prefix }}assets/theme-element.json" | |||||
| "{{ '' if matrix_client_hydrogen_path_prefix == '/' else matrix_client_hydrogen_path_prefix }}/assets/theme-element.json" | |||||
| ], | ], | ||||
| "defaultTheme": { | "defaultTheme": { | ||||
| "light": "element-light", | "light": "element-light", | ||||
| @@ -4,7 +4,7 @@ | |||||
| matrix_synapse_enabled: true | matrix_synapse_enabled: true | ||||
| matrix_synapse_version: v1.83.0 | |||||
| matrix_synapse_version: v1.84.1 | |||||
| matrix_synapse_username: '' | matrix_synapse_username: '' | ||||
| matrix_synapse_uid: '' | matrix_synapse_uid: '' | ||||
| @@ -334,6 +334,11 @@ matrix_synapse_limit_profile_requests_to_users_who_share_rooms: false | |||||
| # Defaults to 'true'. | # Defaults to 'true'. | ||||
| matrix_synapse_include_profile_data_on_invite: true | matrix_synapse_include_profile_data_on_invite: true | ||||
| # User search behaviour | |||||
| matrix_synapse_user_directory_search_all_users: false | |||||
| matrix_synapse_user_directory_prefer_local_users: false | |||||
| # Controls whether people with access to the homeserver can register by themselves. | # Controls whether people with access to the homeserver can register by themselves. | ||||
| matrix_synapse_enable_registration: false | matrix_synapse_enable_registration: false | ||||
| # Controls whether people with access to the homeserver can register by themselves without verification (email/msisdn/token) | # Controls whether people with access to the homeserver can register by themselves without verification (email/msisdn/token) | ||||
| @@ -928,6 +933,10 @@ matrix_synapse_room_list_publication_rules: | |||||
| matrix_synapse_default_room_version: "10" | matrix_synapse_default_room_version: "10" | ||||
| # Controls whether leaving a room will automatically forget it. | |||||
| # The upstream default is `false`, but we try to make Synapse less wasteful of resources, so we do things differently. | |||||
| matrix_synapse_forget_rooms_on_leave: true | |||||
| # Controls the Synapse `spam_checker` setting. | # Controls the Synapse `spam_checker` setting. | ||||
| # | # | ||||
| # If a spam-checker extension is enabled, this variable's value is set automatically by the playbook during runtime. | # If a spam-checker extension is enabled, this variable's value is set automatically by the playbook during runtime. | ||||
| @@ -21,7 +21,7 @@ | |||||
| ansible.builtin.set_fact: | ansible.builtin.set_fact: | ||||
| worker: | worker: | ||||
| id: "stream-writer-{{ idx }}-{{ item.stream }}" | id: "stream-writer-{{ idx }}-{{ item.stream }}" | ||||
| # Names must not include understores. Certain stream writer streams (to_device, account_data, ..) do, so we fix them up. | |||||
| # Names must not include underscores. Certain stream writer streams (to_device, account_data, ..) do, so we fix them up. | |||||
| name: "matrix-synapse-worker-stream-writer-{{ idx }}-{{ item.stream | replace('_', '-') }}" | name: "matrix-synapse-worker-stream-writer-{{ idx }}-{{ item.stream | replace('_', '-') }}" | ||||
| type: 'stream_writer' | type: 'stream_writer' | ||||
| app: "generic_worker" | app: "generic_worker" | ||||
| @@ -141,6 +141,10 @@ allow_public_rooms_over_federation: {{ matrix_synapse_allow_public_rooms_over_fe | |||||
| # | # | ||||
| default_room_version: {{ matrix_synapse_default_room_version|to_json }} | default_room_version: {{ matrix_synapse_default_room_version|to_json }} | ||||
| # Set to true to automatically forget rooms for users when they leave them, either | |||||
| # normally or via a kick or ban. Defaults to false. | |||||
| forget_rooms_on_leave: {{ matrix_synapse_forget_rooms_on_leave | to_json }} | |||||
| # The GC threshold parameters to pass to `gc.set_threshold`, if defined | # The GC threshold parameters to pass to `gc.set_threshold`, if defined | ||||
| # | # | ||||
| #gc_thresholds: [700, 10, 10] | #gc_thresholds: [700, 10, 10] | ||||
| @@ -2626,7 +2630,7 @@ user_directory: | |||||
| # Uncomment to return search results containing all known users, even if that | # Uncomment to return search results containing all known users, even if that | ||||
| # user does not share a room with the requester. | # user does not share a room with the requester. | ||||
| # | # | ||||
| #search_all_users: true | |||||
| search_all_users: {{ matrix_synapse_user_directory_search_all_users | to_json }} | |||||
| # Defines whether to prefer local users in search query results. | # Defines whether to prefer local users in search query results. | ||||
| # If True, local users are more likely to appear above remote users | # If True, local users are more likely to appear above remote users | ||||
| @@ -2635,7 +2639,7 @@ user_directory: | |||||
| # Uncomment to prefer local over remote users in user directory search | # Uncomment to prefer local over remote users in user directory search | ||||
| # results. | # results. | ||||
| # | # | ||||
| #prefer_local_users: true | |||||
| prefer_local_users: {{ matrix_synapse_user_directory_prefer_local_users | to_json }} | |||||
| # User Consent configuration | # User Consent configuration | ||||
| @@ -23,7 +23,7 @@ ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} create \ | |||||
| --read-only \ | --read-only \ | ||||
| --tmpfs=/tmp:rw,noexec,nosuid,size={{ matrix_synapse_tmp_directory_size_mb }}m \ | --tmpfs=/tmp:rw,noexec,nosuid,size={{ matrix_synapse_tmp_directory_size_mb }}m \ | ||||
| --network={{ matrix_synapse_container_network }} \ | --network={{ matrix_synapse_container_network }} \ | ||||
| {% if matrix_synapse_worker_details.port != 0 %} | |||||
| {% if matrix_synapse_worker_details.port != 0 and matrix_synapse_worker_details.webserving %} | |||||
| --health-cmd 'curl -fSs http://localhost:{{ matrix_synapse_worker_details.port }}/health || exit 1' \ | --health-cmd 'curl -fSs http://localhost:{{ matrix_synapse_worker_details.port }}/health || exit 1' \ | ||||
| {% else %} | {% else %} | ||||
| --no-healthcheck \ | --no-healthcheck \ | ||||