Synapse
Обновлено 4 июня 2020
Введение
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 к базе данных:
... # 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" ...
Добавьте поддержку поиска всех пользователей сервера:
... # 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-интерфейс:
...
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:
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-сервера к федерации добавьте следующую настройку:
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:
#!/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.