Route the whole mautrix-signal HTTP port via Traefik under `<matrix-fqn>/bridges/signal` and populate appservice.public_address, reusing the matrix_bridges_exposure_* mechanism. The provisioning shared secret is already auto-generated in group_vars, so the provisioning API is enabled. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>pull/4317/merge
| @@ -1829,6 +1829,11 @@ matrix_mautrix_signal_metrics_proxying_enabled: "{{ matrix_mautrix_signal_metric | |||||
| matrix_mautrix_signal_metrics_proxying_hostname: "{{ matrix_metrics_exposure_hostname }}" | matrix_mautrix_signal_metrics_proxying_hostname: "{{ matrix_metrics_exposure_hostname }}" | ||||
| matrix_mautrix_signal_metrics_proxying_path_prefix: "{{ matrix_metrics_exposure_path_prefix }}/mautrix-signal" | matrix_mautrix_signal_metrics_proxying_path_prefix: "{{ matrix_metrics_exposure_path_prefix }}/mautrix-signal" | ||||
| matrix_mautrix_signal_scheme: "{{ 'https' if matrix_playbook_ssl_enabled else 'http' }}" | |||||
| matrix_mautrix_signal_exposure_enabled: "{{ matrix_bridges_exposure_enabled }}" | |||||
| matrix_mautrix_signal_exposure_hostname: "{{ matrix_bridges_exposure_hostname }}" | |||||
| matrix_mautrix_signal_exposure_path_prefix: "{{ matrix_bridges_exposure_path_prefix }}/signal" | |||||
| matrix_mautrix_signal_database_engine: "{{ 'postgres' if postgres_enabled else 'sqlite' }}" | matrix_mautrix_signal_database_engine: "{{ 'postgres' if postgres_enabled else 'sqlite' }}" | ||||
| matrix_mautrix_signal_database_hostname: "{{ postgres_connection_hostname if postgres_enabled else '' }}" | matrix_mautrix_signal_database_hostname: "{{ postgres_connection_hostname if postgres_enabled else '' }}" | ||||
| matrix_mautrix_signal_database_password: "{{ (matrix_homeserver_generic_secret_key + ':mau.signal.db') | hash('sha512') | to_uuid }}" | matrix_mautrix_signal_database_password: "{{ (matrix_homeserver_generic_secret_key + ':mau.signal.db') | hash('sha512') | to_uuid }}" | ||||
| @@ -46,6 +46,13 @@ matrix_mautrix_signal_homeserver_domain: "{{ matrix_domain }}" | |||||
| matrix_mautrix_signal_homeserver_async_media: false | matrix_mautrix_signal_homeserver_async_media: false | ||||
| matrix_mautrix_signal_appservice_address: "http://matrix-mautrix-signal:8080" | matrix_mautrix_signal_appservice_address: "http://matrix-mautrix-signal:8080" | ||||
| # Scheme of the bridge's public address (see `matrix_mautrix_signal_bridge_public_address`). | |||||
| matrix_mautrix_signal_scheme: https | |||||
| # The public base URL at which this bridge's HTTP API is reachable from outside (when exposed). | |||||
| # Used for the provisioning API's external-server (OpenID) flow and for public media links. | |||||
| matrix_mautrix_signal_bridge_public_address: "{{ (matrix_mautrix_signal_scheme + '://' + matrix_mautrix_signal_exposure_hostname + matrix_mautrix_signal_exposure_path_prefix) if matrix_mautrix_signal_exposure_enabled else '' }}" | |||||
| matrix_mautrix_signal_msc4190_enabled: "{{ matrix_bridges_msc4190_enabled }}" | matrix_mautrix_signal_msc4190_enabled: "{{ matrix_bridges_msc4190_enabled }}" | ||||
| matrix_mautrix_signal_self_sign_enabled: "{{ matrix_bridges_self_sign_enabled }}" | matrix_mautrix_signal_self_sign_enabled: "{{ matrix_bridges_self_sign_enabled }}" | ||||
| @@ -100,6 +107,15 @@ matrix_mautrix_signal_container_labels_metrics_middleware_basic_auth_enabled: fa | |||||
| # See: https://doc.traefik.io/traefik/middlewares/http/basicauth/#users | # See: https://doc.traefik.io/traefik/middlewares/http/basicauth/#users | ||||
| matrix_mautrix_signal_container_labels_metrics_middleware_basic_auth_users: '' | matrix_mautrix_signal_container_labels_metrics_middleware_basic_auth_users: '' | ||||
| # Controls whether labels will be added that expose mautrix-signal's HTTP API | |||||
| # (used by tools like mautrix-manager for bridge login) at `https://<hostname><path_prefix>`. | |||||
| matrix_mautrix_signal_container_labels_exposure_enabled: "{{ matrix_mautrix_signal_exposure_enabled }}" | |||||
| matrix_mautrix_signal_container_labels_exposure_traefik_rule: "Host(`{{ matrix_mautrix_signal_exposure_hostname }}`) && PathPrefix(`{{ matrix_mautrix_signal_exposure_path_prefix }}`)" | |||||
| matrix_mautrix_signal_container_labels_exposure_traefik_priority: 0 | |||||
| matrix_mautrix_signal_container_labels_exposure_traefik_entrypoints: "{{ matrix_mautrix_signal_container_labels_traefik_entrypoints }}" | |||||
| matrix_mautrix_signal_container_labels_exposure_traefik_tls: "{{ matrix_mautrix_signal_container_labels_exposure_traefik_entrypoints != 'web' }}" | |||||
| matrix_mautrix_signal_container_labels_exposure_traefik_tls_certResolver: "{{ matrix_mautrix_signal_container_labels_traefik_tls_certResolver }}" # noqa var-naming | |||||
| # matrix_mautrix_signal_container_labels_additional_labels contains a multiline string with additional labels to add to the container label file. | # matrix_mautrix_signal_container_labels_additional_labels contains a multiline string with additional labels to add to the container label file. | ||||
| # See `../templates/labels.j2` for details. | # See `../templates/labels.j2` for details. | ||||
| # | # | ||||
| @@ -150,6 +166,11 @@ matrix_mautrix_signal_metrics_proxying_enabled: false | |||||
| matrix_mautrix_signal_metrics_proxying_hostname: '' | matrix_mautrix_signal_metrics_proxying_hostname: '' | ||||
| matrix_mautrix_signal_metrics_proxying_path_prefix: '' | matrix_mautrix_signal_metrics_proxying_path_prefix: '' | ||||
| # Controls whether mautrix-signal's HTTP API is exposed publicly (used by tools like mautrix-manager for bridge login). | |||||
| matrix_mautrix_signal_exposure_enabled: false | |||||
| matrix_mautrix_signal_exposure_hostname: '' | |||||
| matrix_mautrix_signal_exposure_path_prefix: '' | |||||
| # Database-related configuration fields. | # Database-related configuration fields. | ||||
| # | # | ||||
| # To use SQLite, stick to these defaults. | # To use SQLite, stick to these defaults. | ||||
| @@ -171,7 +171,7 @@ appservice: | |||||
| # A public address that external services can use to reach this appservice. | # A public address that external services can use to reach this appservice. | ||||
| # This value doesn't affect the registration file. | # This value doesn't affect the registration file. | ||||
| public_address: "" | |||||
| public_address: {{ matrix_mautrix_signal_bridge_public_address | to_json }} | |||||
| # The hostname and port where this appservice should listen. | # The hostname and port where this appservice should listen. | ||||
| # For Docker, you generally have to change the hostname to 0.0.0.0. | # For Docker, you generally have to change the hostname to 0.0.0.0. | ||||
| @@ -46,6 +46,39 @@ traefik.http.routers.matrix-mautrix-signal-metrics.tls.certResolver={{ matrix_ma | |||||
| ############################################################ | ############################################################ | ||||
| {% endif %} | {% endif %} | ||||
| {% if matrix_mautrix_signal_container_labels_exposure_enabled %} | |||||
| ############################################################ | |||||
| # # | |||||
| # Bridge API exposure # | |||||
| # # | |||||
| ############################################################ | |||||
| traefik.http.services.matrix-mautrix-signal-exposure.loadbalancer.server.port=8080 | |||||
| traefik.http.middlewares.matrix-mautrix-signal-exposure-strip-prefix.stripprefix.prefixes={{ matrix_mautrix_signal_exposure_path_prefix }} | |||||
| traefik.http.routers.matrix-mautrix-signal-exposure.middlewares=matrix-mautrix-signal-exposure-strip-prefix | |||||
| traefik.http.routers.matrix-mautrix-signal-exposure.rule={{ matrix_mautrix_signal_container_labels_exposure_traefik_rule }} | |||||
| {% if matrix_mautrix_signal_container_labels_exposure_traefik_priority | int > 0 %} | |||||
| traefik.http.routers.matrix-mautrix-signal-exposure.priority={{ matrix_mautrix_signal_container_labels_exposure_traefik_priority }} | |||||
| {% endif %} | |||||
| traefik.http.routers.matrix-mautrix-signal-exposure.service=matrix-mautrix-signal-exposure | |||||
| traefik.http.routers.matrix-mautrix-signal-exposure.entrypoints={{ matrix_mautrix_signal_container_labels_exposure_traefik_entrypoints }} | |||||
| traefik.http.routers.matrix-mautrix-signal-exposure.tls={{ matrix_mautrix_signal_container_labels_exposure_traefik_tls | to_json }} | |||||
| {% if matrix_mautrix_signal_container_labels_exposure_traefik_tls %} | |||||
| traefik.http.routers.matrix-mautrix-signal-exposure.tls.certResolver={{ matrix_mautrix_signal_container_labels_exposure_traefik_tls_certResolver }} | |||||
| {% endif %} | |||||
| ############################################################ | |||||
| # # | |||||
| # /Bridge API exposure # | |||||
| # # | |||||
| ############################################################ | |||||
| {% endif %} | |||||
| {% endif %} | {% endif %} | ||||