Synapse

Обновлено 4 июня 2020

Matrix

Введение

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

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

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

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

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

Установите и настройте PostgreSQL согласно руководству с авторизацией методом peer. Создайте пользователя synapse и базу данных synapse следующим образом:

psql -U postgres

Пароль пользователя postgres: 
psql (11.2)
Введите "help", чтобы получить справку.

postgres=# create role synapse with login;
CREATE ROLE
postgres=# \password synapse
Введите новый пароль: 
Повторите его: 
postgres=# CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse;
CREATE DATABASE

Установка и настройка 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: synapse
    host: localhost
    user: synapse
    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.

Запуск 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

Запустите демон Synapse:

/etc/init.d/synapse start

Добавьте Synapse в автозагрузку:

rc-update add synapse

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

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

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

su - synapse

register_new_matrix_user -c homeserver.yaml http://localhost:8008

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.