udelarinterior.matrix_synapse

Ansible-Rollenmatrix Synapse

Build Status Galaxy GitHub tag (latest by date) GitHub stars GitHub forks

Automatisierte Installation aus dem Quellcode mit Nginx-Proxy und PostgreSQL-Datenbank

Diese Rolle automatisiert die Installation, das Upgrade und die Konfiguration eines Matrix Synapse Homeservers mit der Methode from source, die empfohlen wird, um die aktuellste Version zu haben, die keine bekannten Sicherheitsanfälligkeiten aufweist.

Zusätzlich wird basierend auf der Empfehlung ein Nginx-Reverse-Proxy und gültige Let's Encrypt-Zertifikate eingerichtet, um die Kommunikation mit Clients und föderierten Servern zu erleichtern.

Als Datenbankserver kann PostgreSQL (empfohlen für Produktionsumgebungen) oder SQLite (empfohlen für kleine oder Testumgebungen) verwendet werden. Die Standardoption der Rolle ist PostgreSQL, wobei dessen Installation und Konfiguration berücksichtigt wird.

Eine einfache lokale Installation von Postfix oder ein externer SMTP-Server ermöglicht den Versand von Benachrichtigungen, Passwortwiederherstellung usw. per E-Mail. Die Vorlagen sind leicht über Variablen anpassbar.

Optional ermöglicht diese Rolle die Bereitstellung einer CoTURN-Installation, um VoIP-Weiterleitung auf Ihrem Matrix-Homeserver mit TURN zu aktivieren.

Über Authentifizierungsanbieter ist es möglich, dezentrale Anmeldungen zu integrieren. Diese Rolle implementiert optional die Integration mit LDAP.

Schließlich erlaubt diese Rolle auch, die Element (ehemals Riot) Webanwendung zusammen mit Synapse bereitzustellen. Diese Funktion ist standardmäßig deaktiviert (synapse_installation_with_element: false), basierend auf der Sicherheitsempfehlung des Projekts. Das Bereitstellen von Element ist jedoch sehr nützlich und wird voll empfohlen, wenn Sie die Möglichkeit haben, verschiedene Domainnamen für Synapse und Element zu verwenden (synapse_server_name != element_server_name). Andernfalls können Sie beide unter demselben Domänennamen auf eigenes Risiko installieren (synapse_server_name == element_server_name).

Seit Version 3.0.0 ist diese Rolle kompatibel mit Element-Web-App-Version 1.7.15 und höher, aber nicht kompatibel mit Riot/Element-Versionen 1.7.14 und älter.

Bereitstellungsdiagramm

Basisinstallation

Die grundlegende Installation, um Ihren eigenen Matrix-Homeserver für den Einsatz bereitzumachen (dies ist das Standardverhalten der Rolle):

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

Vollständige Installation

Der typische und empfohlene Anwendungsfall besteht darin, die folgende Architektur bereitzustellen (das ist das Standardverhalten der Rolle mit der Ergänzung, synapse_installation_with_element und synapse_with_turn auf true zu setzen):

         +~~~~~~~~~~~~~~~~~~~~~~~~~+
         |    Element Web App      |
         | (Läuft im Client-Browser)|<----<---+
         +~~~~~~~~~~~~~~~~~~~~~~~~~+         |
                                 ^           v
                                 ^           |                         3478,5349/tcp&upd
   GET auf 80,443/tcp gibt zurück ^       443,8448/tcp         25/tcp    49152:65535/udp
                  |                          |                   |         |
+-----------------|--------------------------|-------------------|---------|------+
|                 |                          |                   |         |      |
|  +--------------|--------------------------|----------+   +----+----+    |      |
|  | Nginx-Server |                          |          |   | Postfix |    |      |
|  |   +----------v--------+                 |          |   +----^----+    |      |
|  |   |   Standard Site   |     +-----------v--------+ |        |         |      |
|  |   |  (Bedient riot.js) |     | Reverse Proxy Site | |        |         |      |
|  |   +-------------------+     +----------------^---+ |        |         |      |
|  +----------------------------------------------|-----+        |         |      |
|                                                 | 8008/tcp     |         |      |
|                                             +---v--------------+----+    |      |
|              +-------------------+ 5432/tcp |                       |    |      |
|              | PostgreSQL-Server |<---------+ Matrix Synapse Server |    |      |
|              +-------------------+          |                       |    |      |
|                                             +--------------------^--+    |      |
|                                                                  |       |      |
|                                                3478,5349/tcp&upd |       |      |
|                                                      +-----------v-------v-+    |
|                                                      |    coTURN-Server    |    |
|   Ihr Debian                                       +---------------------+    |
|   basierter Server                                                                   |
+---------------------------------------------------------------------------------+

Anforderungen

Ansible-Version >= 2.7

Rollenvariablen

# Unser freundlicher und öffentlicher Domänenname für den Synapse-Server
# (der den Benutzer-ID und Raum-Alias entspricht)
# z.B.: my-organization.org (Sie würden @users:my-organization.org und #rooms:my-organization.org erhalten)
synapse_server_name: "{{ inventory_hostname }}"

# FQDN des Servers, der tatsächlich Synapse hostet (Matrix-Endpunkt)
# z.B.: matrix.my-organization.org
synapse_server_fqdn: "{{ inventory_hostname }}"

# Ort, von dem Synapse heruntergeladen und aus PyPI installiert wird
synapse_installation_path: /var/lib/matrix-synapse

# present: Beibehalten der gleichen Version, sobald Synapse installiert ist
# latest: Upgrade, wenn eine neue Version von pip verfügbar ist
# WENN SIE EIN UPDATE PLANEN, ÜBERPRÜFEN SIE ZUERST: https://github.com/matrix-org/synapse/blob/master/UPGRADE.rst
synapse_pip_state: present

# Wenn Sie eine bestimmte Version von matrix-synapse installieren möchten
# ändern Sie es auf etwas wie: "matrix-synapse==1.12.4"
matrix_synapse_pip_pkg: "matrix-synapse"

# Anmeldung für neue Benutzer aktivieren
synapse_enable_registration: "false"
synapse_enable_registration_with_captcha: false
synapse_recaptcha_public_key: 2Q1toXytnLYl4WIrpWgvBJOaQS1Ym36tNAJnKcZY
synapse_recaptcha_private_key: QgsOB0r79J9fpn8fAAnEIiITv7IMnjnUftdJwThs

synapse_report_stats: 'no'

# Die maximale erlaubte Upload-Größe in Bytes
synapse_max_upload_size: 10M

# Endpunkte zur Verwaltung Ihrer Synapse-Instanz befinden sich unter /_synapse/admin. Diese erfordern
# eine Authentifizierung durch ein Zugriffstoken eines Administrators. Da der Zugriff auf diese Endpunkte dem
# Aufrufer viel Macht gibt, empfehlen wir, sie nicht ohne triftigen Grund öffentlich verfügbar zu machen.
# Weitere Informationen finden Sie unter https://matrix-org.github.io/synapse/latest/reverse_proxy.html
synapse_enable_admin_endpoints: false

# Lokale Quellen für Vorlagen und Konfigurationsdateien, nützlich
# zum Überschreiben, wenn Sie Ihre eigenen Vorlagen in conf.d verwenden möchten
synapse_confd_templates_src: var/lib/matrix-synapse/conf.d

### Installieren und Konfigurieren von Synapse mit PostgreSQL-Server
synapse_with_postgresql: true
# PostgreSQL-Zugangsdaten
synapse_psql_db_name: matrix-synapse
synapse_psql_db_host: localhost
synapse_psql_user: matrix-synapse
synapse_psql_password: secret-password

### E-Mail
# Wenn E-Mail nicht konfiguriert ist, sind Passwort zurücksetzen, Registrierung und Benachrichtigungen über E-Mail deaktiviert.
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: "MyOrganization Matrix Homeserver <[email protected]>"

synapse_email_with_custom_templates: false
# Wenn wahr, denken Sie daran, eine angepasste Version der Vorlage conf.d/email.yaml.j2 zu verwenden
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  (Nicht definiert, damit die Rolle nicht erzwingt, TLS auf TURN einzurichten)
synapse_turn_communication_min_port: 49152
synapse_turn_communication_max_port: 65535
synapse_turn_shared_secret: 5Eydym68SovsZkYLT8G9TOSCFwc2E6ijVLwL4FQgbukKPUalQZOe5gj22E9EhYrm # ändern Sie es und legen Sie es aus einem geheimen Speicher
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:
    # Der TURN-Server selbst (Sonderfall), damit client->TURN->TURN->client-Streams funktionieren
  - "{{ 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    # Geben Sie die öffentliche IP(s) und ihre entsprechenden privaten IPs an, wenn der TURN-Server hinter einem NAT ist
synapse_turn_tls_cert: "/etc/letsencrypt/live/{{ synapse_turn_uri }}/cert.pem"
synapse_turn_tls_pkey: "/etc/letsencrypt/live/{{ synapse_turn_uri }}/privkey.pem"

### Element Web App
# Installieren Sie auch die Element-Webanwendung zusammen mit Synapse
synapse_installation_with_element: false
element_installation_path: /var/www/element
# Unser öffentlicher Domainname für den Element-Webclient
# z.B.: element.my-organization.org
element_server_name: "{{ synapse_server_name }}"
# Siehe https://github.com/vector-im/element-web/releases für die neueste Version
element_version: '1.7.15'
element_jitsi_preferred_domain: jitsi.riot.im
# Name, der für den Server angezeigt werden soll
element_display_name: 'My Org Chat'
element_default_theme: light # 'light', 'dark' oder Ihr eigener 'custom-${theme-name}' (siehe element_custom_themes unten)
element_default_country_code: GB

### Element UI-Anpassung
element_customatize_ui: false

element_welcome_page_template_src: var/www/element/custom-welcome.html.j2   # Leer lassen, wenn Sie die Standard-Element-Begrüßungsseite nicht überschreiben möchten
element_welcome_logo_url: welcome/images/logo.svg
element_welcome_title: 'Willkommen bei Element!'
element_welcome_description: 'Dezentraler, verschlüsselter Chat &amp; Zusammenarbeit powered by [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"

Abhängigkeiten

Diese Rolle hängt von geerlingguy.certbot ab, um gültige Let's Encrypt-Zertifikate zu generieren und zu erneuern, die eine ordnungsgemäße Kommunikation mit Clients und anderen föderierten Servern ermöglichen.

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

Lizenz

(c) Universidad de la República (UdelaR), Red de Unidades Informáticas de la UdelaR en el Interior. Lizenziert unter GPL-v3.

Autoreninformationen

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

Über das Projekt

Role to install and configure Matrix Synapse server from source

Installieren
ansible-galaxy install udelarinterior.matrix_synapse
Lizenz
gpl-3.0
Downloads
266
Besitzer
Red Unidades Informáticas de la UdelaR en el Interior