Synapse

Updated 27 May 2019

Matrix

Introduction

Matrix - это открытый и свободный протокол для децентрализованного общения в реальном времени. Он может быть использован для мгновенных сообщений, аудио- и видеосвязи с помощью WebRTC, Интернета вещей и чего угодно, где вам может понадобиться стандартный HTTP API для публикации и подписки на информацию одновременно с отслеживанием истории общения. В Matrix полноценно реализована федерация (federation), которая позволяет бесшовно общаться, организовывать общие комнаты для общения пользователям разных серверов, совершать видео- и аудиозвонки.

В настоящее время существует несколько поддерживаемых серверов для данного протокола, наиболее популярный из которых - Synapse.

Подготовка LXC контейнера

Мы рекомендуем выполнить установку Synapse в отдельном контейнере, настроив его согласно инструкции.

Installing and configuring PostgreSQL

Установите и настройте PostgreSQL согласно руководству с авторизацией методом peer. Вместо пользователя test создайте пользователя synapse и и вместо базы данных testdb - synapse.

Установка и настройка Synapse

Создайте системного пользователя synapse:

useradd -d /var/calculate/synapse synapse

Создайте и активируйте и виртуальное окружение для Python:

su - synapse

python3 -m venv env

echo 'source ~/env/bin/activate' >> ~/.bashrc

source env/bin/activate

Установите в виртуальное окружение Synapse и модуль для работы с PostgreSQL:

pip install --upgrade pip

pip install --upgrade setuptools

pip install matrix-synapse[all]

pip install psycopg2-binary

Сгенерируйте настройки Synapse:

python -m synapse.app.homeserver --server-name matrix.example.org --config-path homeserver.yaml --generate-config --report-stats=yes

Завершите сеанс пользователя:

exit

Настройте подключение Synapse к базе данных:

/var/calculate/synapse/homeserver.yaml
...
# Database configuration
database:
  # The database engine name
  name: "psycopg2"
  # Arguments to pass to the engine
  args:
    # Path to the database
    database: matrix
    host: localhost
    user: matrixuser
    password: "secret"
...

Добавьте поддержку поиска всех пользователей сервера:

/var/calculate/synapse/homeserver.yaml
...
# User Directory configuration
#
# 'search_all_users' defines whether to search all users visible to your HS
# when searching the user directory, rather than limiting to users visible
# in public rooms.  Defaults to false.  If you set it True, you'll have to run
# UPDATE user_directory_stream_pos SET stream_id = NULL;
# on your database to tell it to rebuild the user_directory search indexes.
#
user_directory:
   search_all_users: true
...

Если в дальнейшем Nginx будет настраиватся на отдельном сервере, то добавьте возможность взаимодействовать с Synapse не только через loopback интерфейс:

/var/calculate/synapse/homeserver.yaml
...
listeners:
  - port: 8008
    tls: false
    bind_addresses: ['0.0.0.0']
    type: http
    x_forwarded: true
...

Получение сертификата Let's Encrypt

Получите сертификат домена matrix.example.org для Nginx согласно руководству.

Установка и настройка Nginx

Установите и настройте веб-сервер Nginx в качестве обратного прокси согласно руководству. Добавьте следующую настройку для matrix.example.org:

/etc/nginx/sites-enabled/matrix.conf
server {
    listen 443 ssl;
    server_name matrix.example.org;

    include ssl.conf;
    ssl_certificate /etc/nginx/ssl/matrix.example.org/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/matrix.example.org/privkey.pem;
    client_max_body_size 1000M;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;

    }
}

Для подключения Matrix-сервера к федерации добавьте следующую настройку:

/etc/nginx/sites-enabled/matrix.conf
server {
    listen 8448 ssl;
    server_name matrix.example.org;

    include ssl.conf;
    ssl_certificate /etc/nginx/ssl/matrix.example.org/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/matrix.example.org/privkey.pem;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Чтобы ваш сервер без проблем видели клиенты, а также другие серверы по федеративному протоколу, добавьте SRV-запись в DNS matrix.example.org:

_matrix._tcp.matrix.example.org. 3600 IN SRV 10 0 8448 matrix.example.org.

Starting Synapse

Создайте сценарий OpenRC для управления демоном Synapse:

/etc/init.d/synapse
#!/sbin/openrc-run
# Copyright 2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="Synapse daemon"
description="Synapse daemon"
command=/var/calculate/synapse/env/bin/synctl
command_user=synapse
command_args="${synapse_args}"
directory=/var/calculate/synapse
pidfile="/var/calculate/synapse/homeserver.pid"

depend() {
        use net
        need postgresql nginx
}

start() {
        ebegin "Starting Synapse"
        start-stop-daemon -u "${command_user}" -S "${command}" \
        -d "${directory}" -p "$pidfile" \
                -- start &>/dev/null
        eend $?
}

stop() {
        ebegin "Stopping Synapse"
        start-stop-daemon -u "${command_user}" -K "${command}" \
                -d "${directory}" -p "$pidfile" -- stop

        eend $?
}

Установите права на запуск:

chmod 0755 /etc/init.d/synapse

Start the Synapse daemon:

/etc/init.d/synapse start

Add Synapse to autostart:

rc-update add synapse

Matrix-сервер настроен и готов к работе! Но это только начало пути. Впереди вас ждет открытие удивительных возможностей вашего персонального сервера Matrix.

Добавление пользователей

Для добавления нового пользователя myuser выполните команду:

su - synapse

register_new_matrix_user -c homeserver.yaml

New user localpart [root]: myuser
Password: 
Confirm password: 
Make admin [no]: no
Sending registration request...
Success!

Обновление Synapse

Обновите библиотеки Python для пользоватля:

su - synapse

pip install --upgrade matrix-synapse[all]

exit

Перезапустите сервер Synapse:

/etc/init.d/synapse restart

Мосты

Для настройки интеграции Matrix с другими серверами сообщений воспользуйтесь статьёй Matrix bridges.