udelarinterior.matrix_synapse

Matrice de Rôles Ansible Synapse

Statut de Build Galaxy Tag GitHub (dernier par date) Étoiles GitHub Forks GitHub

Installation automatisée à partir des sources avec un proxy inverse Nginx et une base de données PostgreSQL

Ce rôle automatise l'installation, la mise à niveau et la configuration d'un serveur Matrix Synapse en utilisant la méthode from source, qui est l'option recommandée pour disposer de la version la plus à jour sans vulnérabilités de sécurité connues.

De plus, sur recommandation, un proxy inverse Nginx et des certificats Let's Encrypt valides sont configurés pour simplifier la communication avec les clients et les serveurs fédérés.

En tant que serveur de base de données, vous pouvez utiliser PostgreSQL (recommandé pour les environnements de production) et SQLite (recommandé pour les petits environnements ou de test). L'option par défaut du rôle est PostgreSQL, y compris son installation et sa configuration.

Une installation locale simple de Postfix ou un serveur SMTP externe permet d'envoyer des notifications, la récupération de compte, etc., par email, avec des modèles facilement personnalisables via des variables.

En option, ce rôle permet aussi de fournir une installation CoTURN pour activer le relais VoIP sur votre serveur Matrix avec TURN.

Grâce aux fournisseurs d'authentification, il est possible d'intégrer des connexions décentralisées. Ce rôle propose une intégration avec LDAP en option.

Enfin, ce rôle permet également de servir l'application web Element (anciennement Riot) avec Synapse. Cette fonctionnalité est désactivée par défaut (synapse_installation_with_element: false) en raison de la recommandation de sécurité du projet. Cependant, servir Element est très utile. Fortement recommandé si vous avez la possibilité d'attribuer des noms de domaine différents pour Synapse et Element (synapse_server_name != element_server_name). Sinon, vous pouvez installer les deux sur le même nom de domaine à vos risques et périls (synapse_server_name == element_server_name).

Depuis la version 3.0.0, ce rôle est compatible avec l'application web Element version 1.7.15 et plus, mais n'est pas compatible avec les versions Riot/Element 1.7.14 et anciennes.

Diagramme de déploiement

Installation de base

L'installation essentielle pour avoir votre propre serveur Matrix prêt pour la production (Notez que c'est le comportement par défaut du rôle) :

                        80,443,8448/tcp           25/tcp
                              |                     |
+-----------------------------|------------+   +----+----+
|                             |            |   | Postfix |
|  Serveur Nginx              |            |   +----^----+
|                   +---------v----------+ |        |
|                   | Site Proxy Inverse  | |        |
|                   +----------------^---+ |        |
+------------------------------------|-----+        |
                                     | 8008/tcp     |
                                  +--v--------------+-----+
   +-------------------+ 5432/tcp |                       |
   | Serveur PostgreSQL|<---------+ Serveur Matrix Synapse |
   +-------------------+          |                       |
                                  +-----------------------+

Installation complète

Le cas d'utilisation typique et recommandé consiste à déployer l'architecture suivante (Notez que c'est le comportement par défaut du rôle, avec l'ajout de la configuration synapse_installation_with_element et synapse_with_turn à true) :

         +~~~~~~~~~~~~~~~~~~~~~~~~~+
         |    Application Web      |
         | (Exécutée dans le navigateur client) |<----<---+
         +~~~~~~~~~~~~~~~~~~~~~~~~~+         |
                                 ^           v
                                 ^           |                         3478,5349/tcp&upd
   GET sur 80,443/tcp retournera ^       443,8448/tcp         25/tcp    49152:65535/udp
                  |                          |                   |         |
+-----------------|--------------------------|-------------------|---------|------+
|                 |                          |                   |         |      |
|  +--------------|--------------------------|----------+   +----+----+    |      |
|  | Serveur Nginx |                          |          |   | Postfix |    |      |
|  |   +----------v--------+                 |          |   +----^----+    |      |
|  |   |   Site Standard   |     +-----------v--------+ |        |         |      |
|  |   |  (Serve riot.js)  |     | Site Proxy Inverse  | |        |         |      |
|  |   +-------------------+     +----------------^---+ |        |         |      |
|  +----------------------------------------------|-----+        |         |      |
|                                                 | 8008/tcp     |         |      |
|                                             +---v--------------+----+    |      |
|              +-------------------+ 5432/tcp |                       |    |      |
|              | Serveur PostgreSQL|<---------+ Serveur Matrix Synapse |    |      |
|              +-------------------+          |                       |    |      |
|                                             +--------------------^--+    |      |
|                                                                  |       |      |
|                                                3478,5349/tcp&upd |       |      |
|                                                      +-----------v-------v-+    |
|                                                      |    Serveur coTURN    |    |
|   Votre serveur basé sur Debian                                                    |
+---------------------------------------------------------------------------------+

Exigences

Version Ansible >= 2.7

Variables de Rôle

# Notre nom de domaine convivial et public pour le serveur Synapse
# (celui qui correspond à l'ID utilisateur et à l'alias de salle)
# ex : my-organization.org (vous obtiendrez @users:my-organization.org et #rooms:my-organization.org)
synapse_server_name: "{{ inventory_hostname }}"

# FQDN du serveur qui héberge effectivement synapse (point d'extrémité matrix)
# ex : matrix.my-organization.org
synapse_server_fqdn: "{{ inventory_hostname }}"

# Emplacement où Synapse sera téléchargé et installé depuis PyPI
synapse_installation_path: /var/lib/matrix-synapse

# present : Conserver la même version une fois que synapse est installé ou
# latest : mettre à niveau s'il y a une nouvelle version disponible depuis pip
# SI VOUS PRÉVOYEZ DE METTRE À NIVEAU, VÉRIFIEZ D'ABORD : https://github.com/matrix-org/synapse/blob/master/UPGRADE.rst
synapse_pip_state: present

# Si vous souhaitez installer une version spécifique de matrix-synapse
# changez-la par quelque chose comme : "matrix-synapse==1.12.4"
matrix_synapse_pip_pkg: "matrix-synapse"

# Activer l'inscription des nouveaux utilisateurs
synapse_enable_registration: "false"
synapse_enable_registration_with_captcha: false
synapse_recaptcha_public_key: 2Q1toXytnLYl4WIrpWgvBJOaQS1Ym36tNAJnKcZY
synapse_recaptcha_private_key: QgsOB0r79J9fpn8fAAnEIiITv7IMnjnUftdJwThs

synapse_report_stats: 'no'

# La taille maximale de téléchargement autorisée en octets
synapse_max_upload_size: 10M

# Les points de terminaison pour administrer votre instance Synapse se situent sous /_synapse/admin. Ceux-ci nécessitent
# une authentification via un jeton d'accès d'un utilisateur administrateur. Cependant, l'accès à ces points de terminaison accorde
# beaucoup de pouvoir à l'appelant, nous ne recommandons donc pas de les exposer au public sans bonne raison.
# Voir https://matrix-org.github.io/synapse/latest/reverse_proxy.html
synapse_enable_admin_endpoints: false

# Sources locales pour les modèles et les fichiers de configuration, utiles
# pour les remplacer si vous souhaitez utiliser vos propres modèles dans conf.d
synapse_confd_templates_src: var/lib/matrix-synapse/conf.d

### Installer et configurer Synapse avec le serveur PostgreSQL
synapse_with_postgresql: true
# Identifiants PostgreSQL
synapse_psql_db_name: matrix-synapse
synapse_psql_db_host: localhost
synapse_psql_user: matrix-synapse
synapse_psql_password: secret-password

### Email
# Si l'email n'est pas configuré, la réinitialisation du mot de passe, l'inscription et les notifications par email seront désactivées.
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: "MonServeur Matrix de MyOrganization <[email protected]>"

synapse_email_with_custom_templates: false
# Si vrai, souvenez-vous d’utiliser une version personnalisée du modèle conf.d/email.yaml.j2 pour les référencer
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  (Non défini pour que le rôle n'impose pas de configurer TLS sur TURN)
synapse_turn_communication_min_port: 49152
synapse_turn_communication_max_port: 65535
synapse_turn_shared_secret: 5Eydym68SovsZkYLT8G9TOSCFwc2E6ijVLwL4FQgbukKPUalQZOe5gj22E9EhYrm # changez-le et mettez-le dans un coffre
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:
    # Le serveur TURN lui-même (cas spécial) afin que les flux client->TURN->TURN->client fonctionnent
  - "{{ 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    # Indiquer le(s) IP publics et leur(s) IP privées correspondants lorsque le serveur TURN est derrière 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"

### Application Web Element
# Installer également l'application web Element avec Synapse
synapse_installation_with_element: false
element_installation_path: /var/www/element
# Notre nom de domaine public pour le client web Element
# ex : element.my-organization.org
element_server_name: "{{ synapse_server_name }}"
# Consultez https://github.com/vector-im/element-web/releases pour utiliser la version la plus récente
element_version: '1.7.15'
element_jitsi_preferred_domain: jitsi.riot.im
# Nom à afficher pour le serveur
element_display_name: 'Chat de Mon Org'
element_default_theme: light # 'light', 'dark' ou votre propre 'custom-${nom-du-theme}' (voir les thèmes personnalisés ci-dessous)
element_default_country_code: GB

### Personnalisation de l'interface utilisateur Element
element_customatize_ui: false

element_welcome_page_template_src: var/www/element/custom-welcome.html.j2   # Laissez-le vide si vous ne voulez pas remplacer la page d'accueil par défaut d'Element
element_welcome_logo_url: welcome/images/logo.svg
element_welcome_title: 'Bienvenue sur Element!'
element_welcome_description: 'Chat et collaboration décentralisés et chiffrés propulsés par [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: "Deep Purple"
    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"

Dépendances

Ce rôle dépend de geerlingguy.certbot pour générer et renouveler des certificats Let's Encrypt valides qui permettent une communication appropriée avec les clients et les autres serveurs fédérés.

Exemple 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'

Licence

(c) Université de la République (UdelaR), Réseau des unités informatiques de l'UdelaR dans l'intérieur. Licence sous GPL-v3.

Informations sur l'auteur

@santiagomr @UdelaRInterior https://proyectos.interior.edu.uy/

À propos du projet

Role to install and configure Matrix Synapse server from source

Installer
ansible-galaxy install udelarinterior.matrix_synapse
Licence
gpl-3.0
Téléchargements
266
Propriétaire
Red Unidades Informáticas de la UdelaR en el Interior