udelarinterior.matrix_synapse
Rola Ansible Matrix Synapse
Zautomatyzowana instalacja z kodu źródłowego z użyciem Nginx jako odwrotnego proxy oraz bazy danych PostgreSQL
Rola, która automatyzuje instalację, aktualizację i konfigurację serwera domowego Matrix Synapse za pomocą metody z kodu źródłowego
, która jest zalecaną opcją, aby mieć najbardziej aktualną wersję, która nie cierpi na znane luki w zabezpieczeniach.
Na podstawie rekomendacji, zainstalowane zostaną odwrotne proxy Nginx oraz ważne certyfikaty Let's Encrypt, aby uprościć komunikację z klientami i serwerami federacyjnymi.
Jako serwer bazy danych można użyć PostgreSQL (zalecane w środowiskach produkcyjnych) oraz SQLite (zalecane w małych lub testowych środowiskach). Domyślną opcją roli jest PostgreSQL, co uwzględnia jego instalację i konfigurację.
Prosta lokalna instalacja Postfix lub zewnętrzny serwer SMTP umożliwia wysyłanie powiadomień, odzyskiwanie konta itp. za pośrednictwem e-maila. Z łatwością dostosowywalne szablony przez zmienne.
Opcjonalnie, ta rola pozwala na skonfigurowanie instalacji CoTURN, aby włączyć przekazywanie VoIP na Twoim serwerze domowym Matrix z użyciem TURN.
Dzięki dostawcom uwierzytelniania możliwe jest integrowanie zdecentralizowanych logowania. Ta rola implementuje opcjonalną integrację z LDAP.
Na koniec, ta rola również pozwala na udostępnienie aplikacji internetowej Element (dawniej Riot) razem z Synapse. Ta funkcja jest domyślnie wyłączona (synapse_installation_with_element: false
) ze względu na rekomendacje dotyczące bezpieczeństwa projektu. Jednak serwowanie Elementu jest bardzo użyteczne. Zdecydowanie zalecane, jeśli masz możliwość przeznaczenia różnych nazw domen dla Synapse i Elementu (synapse_server_name
!= element_server_name
). W przeciwnym razie możesz zainstalować oba w tej samej nazwie domeny na własne ryzyko (synapse_server_name
== element_server_name
).
Od wersji 3.0.0, ta rola jest kompatybilna z wersją aplikacji internetowej Element 1.7.15 i nowszymi, ale nie jest kompatybilna z wersjami Riot/Element 1.7.14 i starszymi.
Diagram wdrożenia
Podstawowa instalacja
Podstawowa instalacja, aby mieć własny serwer domowy matrix gotowy do produkcji (zauważ, że to jest domyślne zachowanie roli):
80,443,8448/tcp 25/tcp
| |
+-----------------------------|------------+ +----+----+
| | | | Postfix |
| Serwer Nginx | | +----^----+
| +---------v----------+ | |
| | Strona odwrotnego | | |
| | proxy | | |
| +----------------^---+ | |
+------------------------------------|-----+ |
| 8008/tcp |
+--v--------------+-----+
+-------------------+ 5432/tcp | |
| Serwer PostgreSQL |<---------+ Serwer Matrix Synapse |
+-------------------+ | |
+-----------------------+
Pełna instalacja
Typowy i zalecany przypadek użycia polega na wdrożeniu następującej architektury (zauważ, że to jest domyślne zachowanie roli, z dodatkowymi ustawieniami synapse_installation_with_element
oraz synapse_with_turn
na true
):
+~~~~~~~~~~~~~~~~~~~~~~~~~+
| Aplikacja internetowa Element |
| (Uruchomiona w przeglądarkach klientów) |<----<---+
+~~~~~~~~~~~~~~~~~~~~~~~~~+ |
^ v
^ | 3478,5349/tcp&upd
GET na 80,443/tcp zwróci ^ 443,8448/tcp 25/tcp 49152:65535/udp
| | | |
+-----------------|--------------------------|-------------------|---------|------+
| | | | | |
| +--------------|--------------------------|----------+ +----+----+ | |
| | Serwer Nginx | | | | Postfix | | |
| | +----------v--------+ | | +----^----+ | |
| | | Standardowa Strona | +-----------v--------+ | | | |
| | | (Serwowanie riot.js) | | Strona odwrotnego proxy | | | | |
| | +-------------------+ +----------------^---+ | | | |
| +----------------------------------------------|-----+ | | |
| | 8008/tcp | | |
| +---v--------------+----+ | |
| +-------------------+ 5432/tcp | | | |
| | Serwer PostgreSQL |<---------+ Serwer Matrix Synapse | | |
| +-------------------+ | | | |
| +--------------------^--+ | |
| | | |
| 3478,5349/tcp&upd | | |
| +-----------v-------v-+ |
| | Serwer coTURN | |
| Twój serwer na bazie Debian +---------------------+ |
+---------------------------------------------------------------------------------+
Wymagania
Wersja Ansible >= 2.7
Zmienne roli
# Nasza przyjazna i publiczna nazwa domeny dla serwera Synapse
# (ta, która odpowiada identyfikatorowi użytkownika i aliasowi pokoju)
# np.: my-organization.org (otrzymasz @users:my-organization.org oraz #rooms:my-organization.org)
synapse_server_name: "{{ inventory_hostname }}"
# Pełna nazwa domeny serwera, który faktycznie hostuje synapse (punkt końcowy matrix)
# np.: matrix.my-organization.org
synapse_server_fqdn: "{{ inventory_hostname }}"
# Miejsce, z którego Synapse będzie pobierany i instalowany z PyPI
synapse_installation_path: /var/lib/matrix-synapse
# present : Utrzymaj tę samą wersję, gdy Synapse został zainstalowany lub
# latest : zaktualizuj, jeśli dostępna jest nowa aktualizacja z pip
# JEŚLI PLANUJESZ AŻURACJĘ, SPRAWDŹ NAJPIERW: https://github.com/matrix-org/synapse/blob/master/UPGRADE.rst
synapse_pip_state: present
# Jeśli chcesz zainstalować konkretną wersję matrix-synapse
# zmień na coś takiego: "matrix-synapse==1.12.4"
matrix_synapse_pip_pkg: "matrix-synapse"
# Włącz rejestrację nowych użytkowników
synapse_enable_registration: "false"
synapse_enable_registration_with_captcha: false
synapse_recaptcha_public_key: 2Q1toXytnLYl4WIrpWgvBJOaQS1Ym36tNAJnKcZY
synapse_recaptcha_private_key: QgsOB0r79J9fpn8fAAnEIiITv7IMnjnUftdJwThs
synapse_report_stats: 'no'
# Największy dozwolony rozmiar przesyłania w bajtach
synapse_max_upload_size: 10M
# Punkty końcowe do administracji Twoją instancją Synapse są umieszczone pod /_synapse/admin. Wymagają one
# uwierzytelnienia za pomocą tokena dostępu admina. Jednak jako że dostęp do tych punktów
# daje wiele możliwości, nie zalecamy ich ujawniania w publicznym internecie bez ważnego powodu.
# Zobacz https://matrix-org.github.io/synapse/latest/reverse_proxy.html
synapse_enable_admin_endpoints: false
# Lokalne źródła do szablonów i plików konfiguracyjnych, przydatne
# do zastępowania szablonami, jeśli chcesz użyć własnych szablonów w conf.d
synapse_confd_templates_src: var/lib/matrix-synapse/conf.d
### Instalacja i konfiguracja Synapse z serwerem PostgreSQL
synapse_with_postgresql: true
# Dane logowania do PostgreSQL
synapse_psql_db_name: matrix-synapse
synapse_psql_db_host: localhost
synapse_psql_user: matrix-synapse
synapse_psql_password: secret-password
### E-mail
# Jeśli e-mail nie jest skonfigurowany, reset hasła, rejestracja i powiadomienia za pośrednictwem e-maila będą wyłączone.
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
# Jeśli prawda, pamiętaj, aby użyć dostosowanej wersji szablonu 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 (Niezdefiniowane, aby rola nie wymusiła ustawienia TLS na TURN)
synapse_turn_communication_min_port: 49152
synapse_turn_communication_max_port: 65535
synapse_turn_shared_secret: 5Eydym68SovsZkYLT8G9TOSCFwc2E6ijVLwL4FQgbukKPUalQZOe5gj22E9EhYrm # zmień to i podaj z sejfu
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:
# Serwer turn sam w sobie (specjalny przypadek), aby klient->TURN->TURN->klient działał
- "{{ 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 # Wskaź BBC publiczne IP i ich odpowiadające prywatne IP, gdy serwer TURN jest za 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"
### Aplikacja internetowa Element
# Zainstaluj również aplikację internetową Element razem z synapse
synapse_installation_with_element: false
element_installation_path: /var/www/element
# Nasza publiczna nazwa domeny dla klienta Element Web
# np.: element.my-organization.org
element_server_name: "{{ synapse_server_name }}"
# Zobacz https://github.com/vector-im/element-web/releases, aby użyć najnowszej wersji
element_version: '1.7.15'
element_jitsi_preferred_domain: jitsi.riot.im
# Nazwa wyświetlana dla serwera
element_display_name: 'My Org Chat'
element_default_theme: light # 'light', 'dark' lub własny 'custom-${theme-name}' (zobacz element_custom_themes poniżej)
element_default_country_code: GB
### Dostosowanie UI Elementu
element_customatize_ui: false
element_welcome_page_template_src: var/www/element/custom-welcome.html.j2 # Pozostaw puste, jeśli nie chcesz nadpisywać domyślnej strony powitalnej Elementu
element_welcome_logo_url: welcome/images/logo.svg
element_welcome_title: 'Witamy w Element!'
element_welcome_description: 'Zdecentralizowany, szyfrowany czat & kolaboracja oparta na [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: "Głęboki Fiolet"
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"
Zależności
Ta rola zależy od geerlingguy.certbot, aby generować i odnawiać ważne certyfikaty Let's Encrypt, które pozwalają na prawidłową komunikację z klientami i innymi serwerami federacyjnymi.
Przykład Playbooka
- hosts: serwery
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'
Licencja
(c) Universidad de la República (UdelaR), Red de Unidades Informáticas de la UdelaR en el Interior. Licencjonowane na podstawie GPL-v3.
Informacje o autorze
@santiagomr @UdelaRInterior https://proyectos.interior.edu.uy/
Role to install and configure Matrix Synapse server from source
ansible-galaxy install udelarinterior.matrix_synapse