udelarinterior.matrix_synapse

Ansible角色矩阵Synapse

构建状态 银河 GitHub最新标签 GitHub星标 GitHub分支

使用Nginx反向代理和PostgreSQL数据库从源代码自动安装

这个角色自动化安装、升级和配置Matrix Synapse主服务器,使用“从源代码”方法,是推荐的选项,可以获得最新版本,不会受到已知安全漏洞的影响。

根据建议,配置Nginx反向代理和有效的Let's Encrypt证书,以简化与客户端和联邦服务器的通信。

作为数据库服务器,可以使用PostgreSQL(推荐用于生产环境)和SQLite(推荐用于小型或测试环境)。该角色的默认选项是PostgreSQL,包括其安装和配置。

通过简单的Postfix本地安装或外部SMTP服务器,可以通过电子邮件发送通知、账户恢复等,并且可以通过变量轻松自定义模板。

可选地,此角色还允许配置CoTURN安装,以启用您Matrix主服务器上的VoIP中继

通过身份验证提供程序,可以集成去中心化登录。这个角色可选择实现LDAP集成。

最后,此角色还允许您与Synapse一起提供Element(以前称为Riot)网页应用程序。由于项目安全性建议,此功能默认禁用(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 服务器 |<---------+ Matrix Synapse 服务器 |
   +-------------------+          |                       |
                                  +-----------------------+

完整安装

典型的推荐用例是部署以下架构(请注意,这是角色的默认行为,增加了设置synapse_installation_with_elementsynapse_with_turntrue):

         +~~~~~~~~~~~~~~~~~~~~~~~~~+
         |    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 服务器 |<---------+ Matrix Synapse 服务器 |    |      |
|              +-------------------+          |                       |    |      |
|                                             +--------------------^--+    |      |
|                                                                  |       |      |
|                                                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 }}"

# 实际托管synapse的服务器的FQDN(matrix端点)
# 例如:matrix.my-organization.org
synapse_server_fqdn: "{{ inventory_hostname }}"

# 下载和安装synapse的PyPI位置
synapse_installation_path: /var/lib/matrix-synapse

# present : 安装后保持相同版本,或
# latest : 如果有新版本可用,则升级
# 如果您计划升级,请先检查: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

### 安装和配置带有PostgreSQL服务器的Synapse
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
# 如果为真,请记得使用自定义版本的模板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 # 更改并从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:
    # 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网页应用
# 还要与synapse一起安装Element网页应用
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: 'My Org Chat'
element_default_theme: light # 'light', 'dark'或您自己的'custom-${theme-name}'(请参见下面的element_custom_themes)
element_default_country_code: GB

### Element UI自定义
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: 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: "深紫色"
    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.matrix_synapse
许可证
gpl-3.0
下载
266
拥有者
Red Unidades Informáticas de la UdelaR en el Interior