matrix_synapse

Ansible Роль Matrix Synapse

Статус сборки Galaxy Последняя версия на GitHub Звезды на GitHub Форки на GitHub

Автоматическая установка из источника с обратным прокси Nginx и базой данных PostgreSQL

Роль, которая автоматизирует установку, обновление и конфигурацию домашнего сервера Matrix Synapse методом из источника, что является рекомендованным вариантом для получения самой актуальной версии без известных уязвимостей.

Также, в соответствии с рекомендацией, настраивается обратный прокси Nginx и действующие сертификаты Let's Encrypt для упрощения связи с клиентами и федеративными серверами.

В качестве сервера базы данных можно использовать PostgreSQL (рекомендуется для производственных сред) и SQLite (рекомендуется для небольших или тестовых сред). По умолчанию используется PostgreSQL, включая его установку и настройку.

Простая локальная установка Postfix или внешний SMTP сервер позволяет отправлять уведомления, восстановление аккаунта и т.д. по электронной почте, с легкостью настраиваемыми шаблонами через переменные.

По желанию эта роль позволяет развернуть установку CoTURN для включения VoIP ретрансляции на вашем домашнем сервере Matrix с TURN.

С помощью провайдеров аутентификации можно интегрировать децентрализованные логины. Эта роль реализует интеграцию с LDAP по желанию.

Наконец, данная роль также позволяет обслуживать веб-приложение Element (бывший Riot) вместе с Synapse. Эта функция выключена по умолчанию (synapse_installation_with_element: false) из-за рекомендации по безопасности проекта. Однако обслуживание Element очень полезно. Полностью рекомендуется, если у вас есть возможность назначить разные доменные имена для Synapse и Element (synapse_server_name != element_server_name). В противном случае вы можете установить оба на одно доменное имя на свой страх и риск (synapse_server_name == element_server_name).

С версии 3.0.0 эта роль совместима с версией веб-приложения Element 1.7.15 и выше, но не совместима с версиями Riot/Element 1.7.14 и старше.

Схема развертывания

Основная установка

Ключевая установка для подготовки вашего домашнего сервера Matrix к производству (обратите внимание, что это поведение по умолчанию для роли):

                        80,443,8448/tcp           25/tcp
                              |                     |
+-----------------------------|------------+   +----+----+
|                             |            |   | Postfix |
|  Nginx сервер               |            |   +----^----+
|                   +---------v----------+ |        |
|                   | Обратный прокси     | |        |
|                   +----------------^---+ |        |
+------------------------------------|-----+        |
                                     | 8008/tcp     |
                                  +--v--------------+-----+
   +-------------------+ 5432/tcp |                       |
   | PostgreSQL Server |<---------+ Matrix Synapse Server |
   +-------------------+          |                       |
                                  +-----------------------+

Полная установка

Типичный и рекомендуемый случай использования включает развертывание следующей архитектуры (обратите внимание, что это поведение по умолчанию для роли, с добавлением установки synapse_installation_with_element и synapse_with_turn на true):

         +~~~~~~~~~~~~~~~~~~~~~~~~~+
         |    Веб-приложение Element|
         | (Запускается в браузере клиента) |<----<---+
         +~~~~~~~~~~~~~~~~~~~~~~~~~+         |
                                 ^           v
                                 ^           |                         3478,5349/tcp&upd
   GET на 80,443/tcp вернет ^       443,8448/tcp         25/tcp    49152:65535/udp
                  |                          |                   |         |
+-----------------|--------------------------|-------------------|---------|------+
|                 |                          |                   |         |      |
|  +--------------|--------------------------|----------+   +----+----+    |      |
|  | Nginx сервер |                          |          |   | Postfix |    |      |
|  |   +----------v--------+                 |          |   +----^----+    |      |
|  |   |   Стандартный сайт  |     +-----------v--------+ |        |         |      |
|  |   |  (Обслуживает riot.js)  |     | Обратный прокси  | |        |         |      |
|  |   +-------------------+     +----------------^---+ |        |         |      |
|  +---------------------------------------------|-----+        |         |      |
|                                                  | 8008/tcp     |         |      |
|                                              +---v--------------+----+    |      |
|              +-------------------+ 5432/tcp |                       |    |      |
|              | PostgreSQL Server |<---------+ Matrix Synapse Server |    |      |
|              +-------------------+          |                       |    |      |
|                                             +--------------------^--+    |      |
|                                                                  |       |      |
|                                                3478,5349/tcp&upd |       |      |
|                                                      +-----------v-------v-+    |
|                                                      |    CoTURN сервер    |    |
|   Ваш Debian                                        +---------------------+    |
|   сервер                                                                      |
+---------------------------------------------------------------------------------+

Требования

Версия Ansible >= 2.7

Переменные роли

# Наш дружелюбный и публичный домен для сервера Synapse
# (тот, который соответствует ID пользователя и псевдониму комнаты)
# например: my-organization.org (вы получите @users:my-organization.org и #rooms:my-organization.org)
synapse_server_name: "{{ inventory_hostname }}"

# FQDN сервера, который фактически хостит synapse (конечная точка matrix)
# например: matrix.my-organization.org
synapse_server_fqdn: "{{ inventory_hostname }}"

# Место, откуда synapse будет загружен и установлен из PyPI
synapse_installation_path: /var/lib/matrix-synapse

# present : Сохранять ту же версию после установки synapse или
# latest : обновить, если есть новая версия доступна из pip
# ЕСЛИ ВЫ ПЛАНИРУЕТЕ ОБНОВЛЕНИЕ, СНАЧАЛА ПРОВЕРЬТЕ: https://github.com/matrix-org/synapse/blob/master/UPGRADE.rst
synapse_pip_state: present

# Если вы хотите установить конкретную версию matrix-synapse
# измените на что-то вроде: "matrix-synapse==1.12.4"
matrix_synapse_pip_pkg: "matrix-synapse"

# Включить регистрацию новых пользователей
synapse_enable_registration: "false"
synapse_enable_registration_with_captcha: false
synapse_recaptcha_public_key: 2Q1toXytnLYl4WIrpWgvBJOaQS1Ym36tNAJnKcZY
synapse_recaptcha_private_key: QgsOB0r79J9fpn8fAAnEIiITv7IMnjnUftdJwThs

synapse_report_stats: 'no'

# Максимальный разрешенный размер загружаемого файла в байтах
synapse_max_upload_size: 10M

# Конечные точки для администрирования вашей инстанции Synapse находятся под /_synapse/admin. Эти конечные точки требуют
# аутентификации через токен доступа администратора. Однако доступ к этим конечным точкам дает
# много полномочий, поэтому мы не рекомендуем открывать их для публичного Интернета без разумной причины.
# См. https://matrix-org.github.io/synapse/latest/reverse_proxy.html
synapse_enable_admin_endpoints: false

# Локальные источники шаблонов и конфигурационных файлов, полезные
# для замены, если вы хотите использовать свои собственные шаблоны в conf.d
synapse_confd_templates_src: var/lib/matrix-synapse/conf.d

### Установить и настроить Synapse с сервером PostgreSQL
synapse_with_postgresql: true
# Учетные данные PostgreSQL
synapse_psql_db_name: matrix-synapse
synapse_psql_db_host: localhost
synapse_psql_user: matrix-synapse
synapse_psql_password: secret-password

### Электронная почта
# Если электронная почта не настроена, сброс пароля, регистрация и уведомления по электронной почте будут отключены.
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
# Если true, помните, что используете специализированную версию шаблона conf.d/email.yaml.j2, чтобы сослаться на них
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  (Не определено, чтобы роль не заставляла настраивать TLS для TURN)
synapse_turn_communication_min_port: 49152
synapse_turn_communication_max_port: 65535
synapse_turn_shared_secret: 5Eydym68SovsZkYLT8G9TOSCFwc2E6ijVLwL4FQgbukKPUalQZOe5gj22E9EhYrm # измените и сохраните из хранилища
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:
    # Сам TURN сервер (особый случай), чтобы клиент->TURN->TURN->клиент работали
  - "{{ 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    # Укажите публичный IP(адреса) и их соответствующий частный IP, когда TURN сервер находится за 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"

### Веб-приложение Element
# Также установите веб-приложение Element вместе с synapse
synapse_installation_with_element: false
element_installation_path: /var/www/element
# Наш публичный домен для веб-клиента Element
# например: element.my-organization.org
element_server_name: "{{ synapse_server_name }}"
# Посмотрите https://github.com/vector-im/element-web/releases, чтобы использовать последнюю версию
element_version: '1.7.15'
element_jitsi_preferred_domain: jitsi.riot.im
# Имя для отображения сервера
element_display_name: 'Чат Моей Организации'
element_default_theme: light # 'light', 'dark' или ваш собственный 'custom-${theme-name}' (см. ниже element_custom_themes)
element_default_country_code: GB

### Настройка интерфейса Element
element_customatize_ui: false

element_welcome_page_template_src: var/www/element/custom-welcome.html.j2   # Оставьте пустым, если не хотите заменять стандартную приветственную страницу Element
element_welcome_logo_url: welcome/images/logo.svg
element_welcome_title: 'Добро пожаловать в Element!'
element_welcome_description: 'Децентрализованный, зашифрованный чат и сотрудничество на базе [matrix]'

element_custom_branding:
  welcomeBackgroundUrl: themes/element/img/backgrounds/lake.jpg
  authHeaderLogoUrl: themes/element/img/logos/element-logo.svg
  authFooterLinks:
    - text: блог
      url: https://element.io/blog
    - text: твиттер
      url: https://twitter.com/element_hq
    - text: гитхаб
      url: https://github.com/vector-im/riot-web

element_custom_themes:
  - name: "Глубокий Фиолетовый"
    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"

Зависимости

Эта роль зависит от geerlingguy.certbot для генерации и обновления действительных сертификатов Let's Encrypt, которые обеспечивают корректную связь с клиентами и другими федеративными серверами.

Пример плейбука

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

Лицензия

(c) Университет Республики (UdelaR), Сеть Информационных Подразделений UdelaR в Интерьере. Лицензия GPL-v3.

Информация об авторе

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

О проекте

Role to install and configure Matrix Synapse server from source

Установить
ansible-galaxy install UdelaRInterior/ansible-role-matrix-synapse
Лицензия
gpl-3.0
Загрузки
255
Владелец
Red Unidades Informáticas de la UdelaR en el Interior