udelarinterior.matrix_synapse
Matriz de Roles de Ansible para Synapse
Instalación automatizada desde el código fuente con Nginx como proxy inverso y base de datos PostgreSQL
Este rol automatiza la instalación, actualización y configuración de un servidor Matrix Synapse utilizando el método de instalación desde el código fuente
, opción recomendada para tener la versión más actualizada que no presente vulnerabilidades de seguridad conocidas.
Siguiendo la recomendación, se configura un proxy inverso Nginx y certificados válidos de Let's Encrypt para simplificar la comunicación con los clientes y servidores federados.
Como servidor de base de datos, se puede usar PostgreSQL (recomendado para entornos de producción) y SQLite (recomendado para entornos pequeños o de prueba). La opción predeterminada del rol es PostgreSQL, incluyendo su instalación y configuración.
Una instalación local simple de Postfix o un servidor SMTP externo permite enviar notificaciones, recuperación de cuentas, etc., por correo electrónico, con plantillas fácilmente personalizables mediante variables.
Opcionalmente, este rol permite configurar una instalación de CoTURN para habilitar el reenvío de VoIP en su servidor matriz con TURN.
A través de proveedores de autenticación, es posible integrar inicios de sesión descentralizados. Este rol implementa la integración con LDAP de forma opcional.
Finalmente, este rol también le permite servir la aplicación web Element (anteriormente Riot) junto con Synapse. Esta característica está desactivada por defecto (synapse_installation_with_element: false
) debido a la recomendación de seguridad del proyecto. Sin embargo, servir Element es muy útil. Totalmente recomendado si tiene la posibilidad de destinar diferentes nombres de dominio para Synapse y Element (synapse_server_name
!= element_server_name
). De lo contrario, puede instalar ambos en el mismo nombre de dominio a su propio riesgo (synapse_server_name
== element_server_name
).
Desde la versión 3.0.0, este rol es compatible con la versión de la aplicación web Element 1.7.15 y superiores, pero no es compatible con Riot/Element versiones 1.7.14 y anteriores.
Diagrama de implementación
Instalación básica
La instalación esencial para tener su propio servidor matriz listo para producción (tenga en cuenta que este es el comportamiento predeterminado del rol):
80,443,8448/tcp 25/tcp
| |
+-----------------------------|------------+ +----+----+
| | | | Postfix |
| Servidor Nginx | | +----^----+
| +---------v----------+ | |
| | Sitio Proxy Inverso | | |
| +----------------^---+ | |
+------------------------------------|-----+ |
| 8008/tcp |
+--v--------------+-----+
+-------------------+ 5432/tcp | |
| Servidor PostgreSQL |<---------+ Servidor Matrix Synapse |
+-------------------+ | |
+-----------------------+
Instalación completa
El caso de uso típico y recomendado consiste en desplegar la siguiente arquitectura (tenga en cuenta que este es el comportamiento predeterminado del rol, con la adición de establecer synapse_installation_with_element
y synapse_with_turn
a true
):
+~~~~~~~~~~~~~~~~~~~~~~~~~+
| Aplicación Web Element |
| (Corriendo en el navegador del cliente) |<----<---+
+~~~~~~~~~~~~~~~~~~~~~~~~~+ |
^ v
^ | 3478,5349/tcp&upd
GET en 80,443/tcp regresará ^ 443,8448/tcp 25/tcp 49152:65535/udp
| | | |
+-----------------|--------------------------|-------------------|---------|------+
| | | | | |
| +--------------|--------------------------|----------+ +----+----+ | |
| | Servidor Nginx | | | | Postfix | | |
| | +----------v--------+ | | +----^----+ | |
| | | Sitio Estándar | +-----------v--------+ | | | |
| | | (Servir riot.js) | | Sitio Proxy Inverso | | | | |
| | +-------------------+ +----------------^---+ | | | |
| +----------------------------------------------|-----+ | | |
| | 8008/tcp | | |
| +---v--------------+----+ | |
| +-------------------+ 5432/tcp | | | |
| | Servidor PostgreSQL |<---------+ Servidor Matrix Synapse | | |
| +-------------------+ | | | |
| +--------------------^--+ | |
| | | |
| 3478,5349/tcp&upd | | |
| +-----------v-------v-+ |
| | Servidor coTURN | |
| Su servidor Debian +---------------------+ |
| basado |
+---------------------------------------------------------------------------------+
Requisitos
Versión de Ansible >= 2.7
Variables del Rol
# Nuestro nombre de dominio público y amigable para el servidor Synapse
# (el que conforma la ID de usuario y el alias de la sala)
# ej: my-organization.org (obtendrás @users:my-organization.org y #rooms:my-organization.org)
synapse_server_name: "{{ inventory_hostname }}"
# FQDN del servidor que efectivamente hospeda synapse (punto final de matriz)
# ej: matrix.my-organization.org
synapse_server_fqdn: "{{ inventory_hostname }}"
# Ubicación desde donde se descargará e instalará synapse desde PyPI
synapse_installation_path: /var/lib/matrix-synapse
# present : Mantiene la misma versión una vez que synapse está instalado o
# latest : lo actualiza si hay una nueva actualización disponible desde pip
# SI PLANEAS ACTUALIZAR, VERIFICA PRIMERO: https://github.com/matrix-org/synapse/blob/master/UPGRADE.rst
synapse_pip_state: present
# Si deseas instalar una versión específica de matrix-synapse
# cámbialo por algo como: "matrix-synapse==1.12.4"
matrix_synapse_pip_pkg: "matrix-synapse"
# Habilitar registro para nuevos usuarios
synapse_enable_registration: "false"
synapse_enable_registration_with_captcha: false
synapse_recaptcha_public_key: 2Q1toXytnLYl4WIrpWgvBJOaQS1Ym36tNAJnKcZY
synapse_recaptcha_private_key: QgsOB0r79J9fpn8fAAnEIiITv7IMnjnUftdJwThs
synapse_report_stats: 'no'
# El tamaño máximo permitido para la carga en bytes
synapse_max_upload_size: 10M
# Los puntos finales para administrar tu instancia de Synapse se colocan bajo /_synapse/admin. Estos requieren
# autenticación a través de un token de acceso de un usuario administrador. Sin embargo, como el acceso a estos puntos finales otorga
# al llamador mucho poder, no se recomienda exponerlos a Internet público sin una buena razón.
# Ver https://matrix-org.github.io/synapse/latest/reverse_proxy.html
synapse_enable_admin_endpoints: false
# Fuentes locales para plantillas y archivos de configuración, útil
# para sobrescribir si deseas usar tus propias plantillas en conf.d
synapse_confd_templates_src: var/lib/matrix-synapse/conf.d
### Instalar y configurar Synapse con Servidor PostgreSQL
synapse_with_postgresql: true
# Credenciales de PostgreSQL
synapse_psql_db_name: matrix-synapse
synapse_psql_db_host: localhost
synapse_psql_user: matrix-synapse
synapse_psql_password: secret-password
### Correo electrónico
# Si el correo electrónico no está configurado, la recuperación de contraseña, el registro y las notificaciones por correo electrónico estarán deshabilitados.
synapse_email_enable: true
synapse_smtp_host: localhost
synapse_smtp_port: 25
# synapse_smtp_user: synapse
# synapse_smtp_pass: secret
synapse_email_hostname: "{{ synapse_server_fqdn }}"
synapse_email_notif_from: "Servidor de Matriz de Mi Organización <[email protected]>"
synapse_email_with_custom_templates: false
# Si es verdadero, recuerda usar una versión personalizada de la plantilla conf.d/email.yaml.j2 para hacer referencia a ellas
synapse_email_templates_src: email_notif_templates
synapse_email_templates_dest: "{{ synapse_installation_path }}/email_notif_templates"
### LDAP
synapse_with_ldap_authentication: false
synapse_ldap_uri: ldap.example.com:389
synapse_ldap_start_tls: 'true'
synapse_ldap_base: ou=users,dc=example,dc=com
synapse_ldap_uid: cn
synapse_ldap_mail: email
synapse_ldap_name: givenName
synapse_ldap_bind_dn: ""
synapse_ldap_bind_password: ""
### TURN
synapse_with_turn: false
synapse_turn_uri: "{{ synapse_server_fqdn }}"
synapse_turn_port: 3478
# synapse_turn_tls_port: 5349 (No definido para que el rol no fuerce la configuración de TLS en TURN)
synapse_turn_communication_min_port: 49152
synapse_turn_communication_max_port: 65535
synapse_turn_shared_secret: 5Eydym68SovsZkYLT8G9TOSCFwc2E6ijVLwL4FQgbukKPUalQZOe5gj22E9EhYrm # cámbialo y guárdalo en un vault
synapse_turn_user_lifetime: 86400000
synapse_turn_allow_guests: True
synapse_turn_denied_peer_ip:
- 10.0.0.0-10.255.255.255
- 172.16.0.0-172.31.255.255
- 192.168.0.0-192.168.255.255
synapse_turn_allowed_peer_ip:
# El servidor turn en sí (caso especial) para que los flujos client->TURN->TURN->client funcionen
- "{{ ansible_default_ipv4.address if(ansible_default_ipv4.address) is defined else '' }}"
- "{{ ansible_default_ipv6.address if(ansible_default_ipv6.address) is defined else '' }}"
synapse_turn_external_ip: []
# - 1.2.3.4/172.16.0.1 # Indica la(s) IP(s) pública(s) y su correspondiente IP privada cuando el servidor TURN está detrás de un NAT
synapse_turn_tls_cert: "/etc/letsencrypt/live/{{ synapse_turn_uri }}/cert.pem"
synapse_turn_tls_pkey: "/etc/letsencrypt/live/{{ synapse_turn_uri }}/privkey.pem"
### Aplicación Web Element
# También instalar la aplicación web Element junto a synapse
synapse_installation_with_element: false
element_installation_path: /var/www/element
# Nuestro nombre de dominio público para el cliente Web de Element
# ej: element.my-organization.org
element_server_name: "{{ synapse_server_name }}"
# Mira https://github.com/vector-im/element-web/releases para usar la última versión
element_version: '1.7.15'
element_jitsi_preferred_domain: jitsi.riot.im
# Nombre para mostrar en el servidor
element_display_name: 'Chat de Mi Org'
element_default_theme: light # 'light', 'dark' o tu propio 'custom-${tema-nombre}' (ver debajo de element_custom_themes)
element_default_country_code: GB
### Personalización de la UI de Element
element_customatize_ui: false
element_welcome_page_template_src: var/www/element/custom-welcome.html.j2 # Déjalo vacío si no deseas sobrescribir la página de bienvenida predeterminada de Element
element_welcome_logo_url: welcome/images/logo.svg
element_welcome_title: '¡Bienvenido a Element!'
element_welcome_description: 'Chat y colaboración descentralizada y encriptada impulsada por [matrix]'
element_custom_branding:
welcomeBackgroundUrl: themes/element/img/backgrounds/lake.jpg
authHeaderLogoUrl: themes/element/img/logos/element-logo.svg
authFooterLinks:
- text: blog
url: https://element.io/blog
- text: twitter
url: https://twitter.com/element_hq
- text: github
url: https://github.com/vector-im/riot-web
element_custom_themes:
- name: "Púrpura Profundo"
is_dark: true
colors:
accent-color: "#6503b3"
primary-color: "#368bd6"
warning-color: "#b30356"
sidebar-color: "#15171B"
roomlist-background-color: "#22262E"
roomlist-text-color: "#A1B2D1"
roomlist-text-secondary-color: "#EDF3FF"
roomlist-highlights-color: "#343A46"
roomlist-separator-color: "#a1b2d1"
timeline-background-color: "#181b21"
timeline-text-color: "#EDF3FF"
timeline-text-secondary-color: "#A1B2D1"
timeline-highlights-color: "#22262E"
Dependencias
Este rol depende de geerlingguy.certbot para generar y renovar certificados válidos de Let's Encrypt que permiten una comunicación adecuada con los clientes y otros servidores federados.
Ejemplo de Playbook
- hosts: servers
roles:
- role: udelarinterior.matrix_synapse
vars:
synapse_enable_registration: "true"
synapse_with_postgresql: true
synapse_psql_db_name: matrix-synapse
synapse_psql_db_host: localhost
synapse_psql_user: matrix-synapse
synapse_psql_password: my-password
certbot_admin_email: [email protected]
certbot_certs:
- domains:
- "{{ synapse_server_name }}"
- 'msg.my-organization.org'
- 'chat.my-organization.org'
Licencia
(c) Universidad de la República (UdelaR), Red de Unidades Informáticas de la UdelaR en el Interior. Licenciado bajo GPL-v3.
Información del Autor
@santiagomr
@UdelaRInterior
https://proyectos.interior.edu.uy/
Role to install and configure Matrix Synapse server from source
ansible-galaxy install udelarinterior.matrix_synapse