MAS now connects to the playbook-managed Postgres via a UNIX socket by default (when available), matching the approach already used by Synapse. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>create-pull-request/i18n
| @@ -1,3 +1,19 @@ | |||||
| # 2026-03-19 | |||||
| ## Matrix Authentication Service now prefers UNIX sockets for playbook-managed Postgres | |||||
| When [Matrix Authentication Service](docs/configuring-playbook-matrix-authentication-service.md) (MAS) uses the playbook-managed Postgres service, it now connects to it via a [UNIX socket](https://en.wikipedia.org/wiki/Unix_domain_socket) by default instead of TCP. | |||||
| This follows the same approach [applied to Synapse](#synapse-now-prefers-unix-sockets-for-playbook-managed-postgres-and-valkey) and reduces unnecessary container-network wiring, keeping local IPC off the network stack. | |||||
| If you use an external Postgres server for MAS, this does not change your setup. | |||||
| If you'd like to keep the previous TCP-based behavior, add the following configuration to your `vars.yml`: | |||||
| ```yaml | |||||
| matrix_authentication_service_config_database_socket_enabled: false | |||||
| ``` | |||||
| # 2026-03-17 | # 2026-03-17 | ||||
| ## Synapse now prefers UNIX sockets for playbook-managed Postgres and Valkey | ## Synapse now prefers UNIX sockets for playbook-managed Postgres and Valkey | ||||
| @@ -1079,9 +1079,18 @@ matrix_authentication_service_enabled: false | |||||
| matrix_authentication_service_hostname: "{{ matrix_server_fqn_matrix }}" | matrix_authentication_service_hostname: "{{ matrix_server_fqn_matrix }}" | ||||
| matrix_authentication_service_path_prefix: /auth | matrix_authentication_service_path_prefix: /auth | ||||
| matrix_authentication_service_config_database_host: "{{ postgres_connection_hostname if postgres_enabled else '' }}" | |||||
| matrix_playbook_matrix_authentication_service_uses_managed_postgres: "{{ postgres_enabled }}" | |||||
| matrix_authentication_service_config_database_host: "{{ matrix_authentication_service_config_database_socket_path if matrix_authentication_service_config_database_socket_enabled else (postgres_connection_hostname if matrix_playbook_matrix_authentication_service_uses_managed_postgres else '') }}" | |||||
| matrix_authentication_service_config_database_password: "{{ (matrix_homeserver_generic_secret_key + ':mas.db') | hash('sha512') | to_uuid }}" | matrix_authentication_service_config_database_password: "{{ (matrix_homeserver_generic_secret_key + ':mas.db') | hash('sha512') | to_uuid }}" | ||||
| # unix socket connection | |||||
| matrix_authentication_service_config_database_socket_enabled: "{{ matrix_playbook_matrix_authentication_service_uses_managed_postgres and postgres_container_unix_socket_enabled }}" | |||||
| # path to the Postgres socket's parent dir inside the MAS container | |||||
| matrix_authentication_service_config_database_socket_path: "{{ '/run-postgres' if matrix_playbook_matrix_authentication_service_uses_managed_postgres else '' }}" | |||||
| # path to the Postgres socket on the host | |||||
| matrix_authentication_service_config_database_socket_path_host: "{{ postgres_run_path if matrix_playbook_matrix_authentication_service_uses_managed_postgres else '' }}" | |||||
| matrix_authentication_service_config_matrix_homeserver: "{{ matrix_domain }}" | matrix_authentication_service_config_matrix_homeserver: "{{ matrix_domain }}" | ||||
| matrix_authentication_service_config_matrix_secret: "{{ (matrix_homeserver_generic_secret_key + ':mas.hs.secret') | hash('sha512') | to_uuid }}" | matrix_authentication_service_config_matrix_secret: "{{ (matrix_homeserver_generic_secret_key + ':mas.hs.secret') | hash('sha512') | to_uuid }}" | ||||
| matrix_authentication_service_config_matrix_endpoint: "{{ matrix_homeserver_container_url }}" | matrix_authentication_service_config_matrix_endpoint: "{{ matrix_homeserver_container_url }}" | ||||
| @@ -1114,7 +1123,7 @@ matrix_authentication_service_container_network: "{{ matrix_homeserver_container | |||||
| matrix_authentication_service_container_additional_networks_auto: |- | matrix_authentication_service_container_additional_networks_auto: |- | ||||
| {{ | {{ | ||||
| ( | ( | ||||
| ([postgres_container_network] if postgres_enabled and matrix_authentication_service_config_database_host == postgres_connection_hostname else []) | |||||
| ([postgres_container_network] if (matrix_playbook_matrix_authentication_service_uses_managed_postgres and not matrix_authentication_service_config_database_socket_enabled) else []) | |||||
| + | + | ||||
| ([exim_relay_container_network] if (exim_relay_enabled and matrix_authentication_service_config_email_transport == 'smtp' and matrix_authentication_service_config_email_hostname == exim_relay_identifier and matrix_authentication_service_container_network != exim_relay_container_network) else []) | ([exim_relay_container_network] if (exim_relay_enabled and matrix_authentication_service_config_email_transport == 'smtp' and matrix_authentication_service_config_email_hostname == exim_relay_identifier and matrix_authentication_service_container_network != exim_relay_container_network) else []) | ||||
| + | + | ||||
| @@ -1139,7 +1148,7 @@ matrix_authentication_service_container_labels_internal_compatibility_layer_entr | |||||
| # We'll put our dependency on the homeserver as a "want", rather than a requirement. | # We'll put our dependency on the homeserver as a "want", rather than a requirement. | ||||
| matrix_authentication_service_systemd_required_services_list_auto: | | matrix_authentication_service_systemd_required_services_list_auto: | | ||||
| {{ | {{ | ||||
| ([postgres_identifier ~ '.service'] if postgres_enabled and matrix_authentication_service_config_database_host == postgres_connection_hostname else []) | |||||
| ([postgres_identifier ~ '.service'] if matrix_playbook_matrix_authentication_service_uses_managed_postgres else []) | |||||
| }} | }} | ||||
| # See more information about this homeserver "want" in the comment for `matrix_authentication_service_systemd_required_services_list_auto` above. | # See more information about this homeserver "want" in the comment for `matrix_authentication_service_systemd_required_services_list_auto` above. | ||||
| @@ -1150,7 +1159,7 @@ matrix_authentication_service_systemd_wanted_services_list_auto: | | |||||
| ([exim_relay_identifier ~ '.service'] if (exim_relay_enabled and matrix_authentication_service_config_email_transport == 'smtp' and matrix_authentication_service_config_email_hostname == exim_relay_identifier and matrix_authentication_service_container_network != exim_relay_container_network) else []) | ([exim_relay_identifier ~ '.service'] if (exim_relay_enabled and matrix_authentication_service_config_email_transport == 'smtp' and matrix_authentication_service_config_email_hostname == exim_relay_identifier and matrix_authentication_service_container_network != exim_relay_container_network) else []) | ||||
| }} | }} | ||||
| matrix_authentication_service_syn2mas_container_network: "{{ postgres_container_network if postgres_enabled and matrix_authentication_service_config_database_host == postgres_connection_hostname else matrix_authentication_service_container_network }}" | |||||
| matrix_authentication_service_syn2mas_container_network: "{{ postgres_container_network if (matrix_playbook_matrix_authentication_service_uses_managed_postgres and not matrix_authentication_service_config_database_socket_enabled) else matrix_authentication_service_container_network }}" | |||||
| matrix_authentication_service_syn2mas_synapse_homeserver_config_path: "{{ matrix_synapse_config_dir_path + '/homeserver.yaml' if matrix_synapse_enabled else '' }}" | matrix_authentication_service_syn2mas_synapse_homeserver_config_path: "{{ matrix_synapse_config_dir_path + '/homeserver.yaml' if matrix_synapse_enabled else '' }}" | ||||
| matrix_authentication_service_syn2mas_synapse_database_socket_enabled: "{{ matrix_synapse_database_socket_enabled if matrix_synapse_enabled else false }}" | matrix_authentication_service_syn2mas_synapse_database_socket_enabled: "{{ matrix_synapse_database_socket_enabled if matrix_synapse_enabled else false }}" | ||||
| @@ -4047,7 +4056,7 @@ postgres_managed_databases_auto: | | |||||
| 'name': matrix_authentication_service_config_database_database, | 'name': matrix_authentication_service_config_database_database, | ||||
| 'username': matrix_authentication_service_config_database_username, | 'username': matrix_authentication_service_config_database_username, | ||||
| 'password': matrix_authentication_service_config_database_password, | 'password': matrix_authentication_service_config_database_password, | ||||
| }] if (matrix_authentication_service_enabled and matrix_authentication_service_config_database_host == postgres_connection_hostname) else []) | |||||
| }] if (matrix_authentication_service_enabled and matrix_playbook_matrix_authentication_service_uses_managed_postgres) else []) | |||||
| + | + | ||||
| ([{ | ([{ | ||||
| 'name': matrix_bot_matrix_reminder_bot_database_name, | 'name': matrix_bot_matrix_reminder_bot_database_name, | ||||
| @@ -300,6 +300,15 @@ matrix_authentication_service_config_database_idle_timeout: 600 | |||||
| # Controls the `database.max_lifetime` configuration setting. | # Controls the `database.max_lifetime` configuration setting. | ||||
| matrix_authentication_service_config_database_max_lifetime: 1800 | matrix_authentication_service_config_database_max_lifetime: 1800 | ||||
| # Controls whether the database connection is made via a UNIX socket. | |||||
| matrix_authentication_service_config_database_socket_enabled: false | |||||
| # The path to the Postgres socket's parent directory inside the MAS container. | |||||
| matrix_authentication_service_config_database_socket_path: "/run-postgres" | |||||
| # The path to the Postgres socket directory on the host (bind-mount source). | |||||
| matrix_authentication_service_config_database_socket_path_host: "" | |||||
| ######################################################################################## | ######################################################################################## | ||||
| # # | # # | ||||
| # /Database configuration # | # /Database configuration # | ||||
| @@ -71,7 +71,10 @@ | |||||
| --mount type=bind,src={{ matrix_authentication_service_config_path }}/config.yaml,dst=/config.yaml,ro | --mount type=bind,src={{ matrix_authentication_service_config_path }}/config.yaml,dst=/config.yaml,ro | ||||
| --mount type=bind,src={{ matrix_authentication_service_data_keys_path }},dst=/keys,ro | --mount type=bind,src={{ matrix_authentication_service_data_keys_path }},dst=/keys,ro | ||||
| --mount type=bind,src={{ matrix_authentication_service_syn2mas_synapse_homeserver_config_path }},dst=/homeserver.yaml,ro | --mount type=bind,src={{ matrix_authentication_service_syn2mas_synapse_homeserver_config_path }},dst=/homeserver.yaml,ro | ||||
| {% if matrix_authentication_service_syn2mas_synapse_database_socket_enabled %} | |||||
| {% if matrix_authentication_service_config_database_socket_enabled %} | |||||
| --mount type=bind,src={{ matrix_authentication_service_config_database_socket_path_host }},dst={{ matrix_authentication_service_config_database_socket_path }} | |||||
| {% endif %} | |||||
| {% if matrix_authentication_service_syn2mas_synapse_database_socket_enabled and (not matrix_authentication_service_config_database_socket_enabled or matrix_authentication_service_syn2mas_synapse_database_socket_path != matrix_authentication_service_config_database_socket_path) %} | |||||
| --mount type=bind,src={{ matrix_authentication_service_syn2mas_synapse_database_socket_path_host }},dst={{ matrix_authentication_service_syn2mas_synapse_database_socket_path }} | --mount type=bind,src={{ matrix_authentication_service_syn2mas_synapse_database_socket_path_host }},dst={{ matrix_authentication_service_syn2mas_synapse_database_socket_path }} | ||||
| {% endif %} | {% endif %} | ||||
| {{ matrix_authentication_service_container_image }} | {{ matrix_authentication_service_container_image }} | ||||
| @@ -14,7 +14,8 @@ | |||||
| - {'name': 'matrix_authentication_service_hostname', when: true} | - {'name': 'matrix_authentication_service_hostname', when: true} | ||||
| - {'name': 'matrix_authentication_service_config_database_username', when: true} | - {'name': 'matrix_authentication_service_config_database_username', when: true} | ||||
| - {'name': 'matrix_authentication_service_config_database_password', when: true} | - {'name': 'matrix_authentication_service_config_database_password', when: true} | ||||
| - {'name': 'matrix_authentication_service_config_database_host', when: true} | |||||
| - {'name': 'matrix_authentication_service_config_database_host', when: "{{ not matrix_authentication_service_config_database_socket_enabled }}"} | |||||
| - {'name': 'matrix_authentication_service_config_database_socket_path_host', when: "{{ matrix_authentication_service_config_database_socket_enabled }}"} | |||||
| - {'name': 'matrix_authentication_service_config_database_database', when: true} | - {'name': 'matrix_authentication_service_config_database_database', when: true} | ||||
| - {'name': 'matrix_authentication_service_config_secrets_encryption', when: true} | - {'name': 'matrix_authentication_service_config_secrets_encryption', when: true} | ||||
| - {'name': 'matrix_authentication_service_config_matrix_homeserver', when: true} | - {'name': 'matrix_authentication_service_config_matrix_homeserver', when: true} | ||||
| @@ -28,6 +28,9 @@ ExecStartPre={{ devture_systemd_docker_base_host_command_docker }} create \ | |||||
| --label-file={{ matrix_authentication_service_config_path }}/labels \ | --label-file={{ matrix_authentication_service_config_path }}/labels \ | ||||
| --mount type=bind,src={{ matrix_authentication_service_config_path }}/config.yaml,dst=/config.yaml,ro \ | --mount type=bind,src={{ matrix_authentication_service_config_path }}/config.yaml,dst=/config.yaml,ro \ | ||||
| --mount type=bind,src={{ matrix_authentication_service_data_keys_path }},dst=/keys,ro \ | --mount type=bind,src={{ matrix_authentication_service_data_keys_path }},dst=/keys,ro \ | ||||
| {% if matrix_authentication_service_config_database_socket_enabled %} | |||||
| --mount type=bind,src={{ matrix_authentication_service_config_database_socket_path_host }},dst={{ matrix_authentication_service_config_database_socket_path }} \ | |||||
| {% endif %} | |||||
| {% for arg in matrix_authentication_service_container_extra_arguments %} | {% for arg in matrix_authentication_service_container_extra_arguments %} | ||||
| {{ arg }} \ | {{ arg }} \ | ||||
| {% endfor %} | {% endfor %} | ||||
| @@ -254,6 +254,13 @@ matrix_playbook_synapse_uses_managed_postgres: false | |||||
| matrix_playbook_synapse_uses_managed_valkey: false | matrix_playbook_synapse_uses_managed_valkey: false | ||||
| matrix_playbook_synapse_auto_compressor_uses_managed_postgres: false | matrix_playbook_synapse_auto_compressor_uses_managed_postgres: false | ||||
| # This playbook-level helper describes whether Matrix Authentication Service should be wired | |||||
| # to the playbook-managed Postgres instance. | |||||
| # It is meant for orchestration concerns like container networking, systemd ordering, and database creation, | |||||
| # while `matrix_authentication_service_*` variables stay focused on actual connection parameters. | |||||
| # This likely gets overridden elsewhere. | |||||
| matrix_playbook_matrix_authentication_service_uses_managed_postgres: false | |||||
| # Controls whether various services should expose metrics publicly. | # Controls whether various services should expose metrics publicly. | ||||
| # If Prometheus is operating on the same machine, exposing metrics publicly is not necessary. | # If Prometheus is operating on the same machine, exposing metrics publicly is not necessary. | ||||
| matrix_metrics_exposure_enabled: false | matrix_metrics_exposure_enabled: false | ||||