MAATRIX / Блог / Как установить и настроить Matrix (Synapse) на VPS

Как установить и настроить Matrix (Synapse) на VPS

MAATRIX

Telegram, WhatsApp и Slack удобны, пока вас устраивает, что переписка хранится на чужих серверах и подчиняется чужим правилам. Matrix — открытый протокол децентрализованного обмена сообщениями со сквозным шифрованием, а Synapse — его эталонная серверная реализация, которую можно поднять на своём VPS и стать полноправным узлом сети. Ниже — рабочий путь от чистого сервера до защищённого домашнего сервера Matrix с базой на PostgreSQL, HTTPS через Nginx и голосовыми звонками через TURN.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Matrix и зачем свой сервер

Matrix — это протокол, а не приложение: клиенты (Element, FluffyChat, Cinny и десятки других) подключаются к любому homeserver, и все они говорят на одном языке. Ваш Synapse становится таким homeserver — точкой, через которую заходят ваши пользователи, где хранится история переписки и медиафайлы.

Ключевое отличие от Telegram или Slack — федерация. Сервера Matrix умеют обмениваться сообщениями между собой так же, как почтовые серверы обмениваются письмами: пользователь @ivan:ваш-домен.ru может переписываться с @anna:matrix.org без единого центрального оператора. При этом федерацию можно и полностью отключить, если нужен закрытый корпоративный контур без связи с внешним миром — это одна строка в конфиге.

Свой Synapse даёт три вещи, которых нет у SaaS-мессенджеров: полный контроль над данными и логами, возможность выключить публичную регистрацию и пускать только своих, и независимость от чужой политики модерации и блокировок. Цена — это администрирование: обновления, бэкапы, наблюдение за нагрузкой ложатся на вас.

Требования к VPS и подготовка сервера

Synapse написан на Python и под нагрузкой не бесплатен по ресурсам — для нескольких десятков активных пользователей закладывайте от 2 ядер и 4 ГБ RAM, для небольшой команды из 5-10 человек за глаза хватит 2 ГБ. Диск лучше брать с запасом: медиафайлы (аватары, картинки, вложения) растут быстро, от 40 ГБ SSD на старт.

Обновите систему и поставьте базовые пакеты:

apt update && apt upgrade -y
apt install curl gnupg lsb-release apt-transport-https -y

Сразу решите главный вопрос — доменное имя. server_name, который вы зададите при установке, станет частью каждого Matrix ID (@user:example.com) и не меняется без пересоздания сервера с нуля. Заранее продумайте, будет ли это корневой домен (example.com) или поддомен (matrix.example.com) — от этого решения зависит вся дальнейшая настройка делегирования.

Заведите DNS-запись, направленную на IP вашего VPS, и настройте фаервол на первом же шаге, разрешив пока только SSH, 80 и 443 порт — остальные откроете по мере настройки TURN. Если фаервол ещё не настроен, отдельно есть разбор настройки ufw на VPS.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Synapse из официального репозитория

Пакеты из репозиториев Ubuntu/Debian обычно отстают от актуальной версии Synapse на месяцы, поэтому команда Matrix.org поддерживает собственный apt-репозиторий — им и стоит пользоваться на Ubuntu 24.04 или Debian 12:

sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg \
  https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] \
  https://packages.matrix.org/debian/ $(lsb_release -cs) main" | \
  sudo tee /etc/apt/sources.list.d/matrix-org.list

sudo apt update
sudo apt install matrix-synapse-py3 -y

В процессе установки debconf спросит server_name — впишите домен, который вы выбрали на предыдущем шаге, и почту администратора для уведомлений об истечении сертификатов. После установки конфигурация лежит в /etc/matrix-synapse/homeserver.yaml, а сервис уже зарегистрирован в systemd:

systemctl status matrix-synapse

Если сервис не стартовал сразу — это нормально, база данных по умолчанию ставится на SQLite, и первым делом её нужно заменить на PostgreSQL, иначе сервер довольно быстро упрётся в производительность при росте истории сообщений.

PostgreSQL вместо SQLite

SQLite годится только для тестового запуска. Боевой Synapse должен работать с PostgreSQL — команда Matrix.org прямо предупреждает, что миграция с SQLite на PostgreSQL позже возможна, но проще сделать правильно с первого раза. Если PostgreSQL ещё не установлен, разверните его по инструкции по установке PostgreSQL на VPS — здесь только специфичная для Synapse часть.

Создайте роль и базу с обязательной для Synapse кодировкой и коллацией C:

sudo -u postgres psql -c "CREATE USER synapse_user WITH PASSWORD 'замените-меня';"
sudo -u postgres psql -c "CREATE DATABASE synapse \
  ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' \
  TEMPLATE template0 OWNER synapse_user;"

Коллация C — не формальность: если создать базу с локалью системы, Synapse откажется стартовать с явной ошибкой при первом запуске. Пропишите подключение в homeserver.yaml:

database:
  name: psycopg2
  args:
    user: synapse_user
    password: замените-меня
    dbname: synapse
    host: localhost
    cp_min: 5
    cp_max: 10
  txn_limit: 10000

Остановите Synapse, если он уже был запущен на SQLite с пустой базой, удалите старый homeserver.db (только если там нет данных, которые жалко) и стартуйте заново:

systemctl restart matrix-synapse
journalctl -u matrix-synapse -f

В логе должны пойти строки об успешной миграции схемы БД без ошибок подключения к Postgres.

Nginx, HTTPS и делегирование домена

Synapse по умолчанию слушает только 127.0.0.1:8008 по HTTP — наружу его отдаёт Nginx. Убедитесь, что в homeserver.yaml включён x_forwarded:

listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    resources:
      - names: [client, federation]
        compress: false

Если ваш server_name — корневой домен, а Synapse физически висит на поддомене matrix.example.com, нужна делегация через .well-known — иначе и клиенты, и другие серверы федерации не найдут ваш homeserver. На основном домене example.com заведите два JSON-файла и отдавайте их через Nginx:

location /.well-known/matrix/server {
    add_header Content-Type application/json;
    return 200 '{"m.server": "matrix.example.com:443"}';
}
location /.well-known/matrix/client {
    add_header Content-Type application/json;
    add_header Access-Control-Allow-Origin *;
    return 200 '{"m.homeserver": {"base_url": "https://matrix.example.com"}}';
}

А на matrix.example.com — сам реверс-прокси к Synapse:

server {
    listen 443 ssl http2;
    server_name matrix.example.com;

    client_max_body_size 50m;

    location ~ ^(/_matrix|/_synapse/client) {
        proxy_pass http://127.0.0.1:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
    }
}

Общий разбор настройки Nginx как прокси и подводных камней с заголовками и таймаутами — в статье про Nginx как реверс-прокси на VPS. Сертификаты для обоих доменов проще всего выпустить certbot'ом — шаги описаны в материале про Let's Encrypt на VPS. После выпуска сертификатов проверьте делегирование федерации официальным инструментом https://federationtester.matrix.org/ — он подсвечивает практически все типичные ошибки конфигурации с первого раза.

TURN-сервер для голосовых и видеозвонков

Без TURN-сервера звонки в Element будут работать только между устройствами в одной локальной сети — как только один из абонентов сидит за NAT провайдера (а это почти всегда), медиапоток просто не пройдёт. Поднимите coturn:

apt install coturn -y

В /etc/turnserver.conf укажите ключевые параметры:

listening-port=3478
tls-listening-port=5349
min-port=49152
max-port=49172
external-ip=ваш-публичный-ip
realm=matrix.example.com
use-auth-secret
static-auth-secret=длинный-случайный-секрет
cert=/etc/letsencrypt/live/matrix.example.com/fullchain.pem
pkey=/etc/letsencrypt/live/matrix.example.com/privkey.pem
no-tcp-relay

Секрет генерируется, например, командой openssl rand -hex 32, и его же нужно прописать в homeserver.yaml:

turn_uris:
  - "turn:matrix.example.com:3478?transport=udp"
  - "turn:matrix.example.com:3478?transport=tcp"
turn_shared_secret: длинный-случайный-секрет
turn_user_lifetime: 86400000

Откройте в фаерволе UDP/TCP порты 3478 и 5349, а также весь диапазон relay-портов из min-port/max-port:

ufw allow 3478
ufw allow 5349
ufw allow 49152:49172/udp

Диапазон релея специально сделан узким (около 20 портов) — для небольшого сервера этого достаточно, а расширять его стоит только если звонков много и одновременных сессий тоже. После правки конфига перезапустите оба сервиса: systemctl restart coturn matrix-synapse.

Регистрация пользователей и базовая безопасность

Сразу после установки решите, останется ли регистрация открытой. Публичный Synapse без ограничений быстро находят спам-боты — по умолчанию свежий пакет ставит enable_registration: false, и в большинстве случаев стоит оставить как есть, создавая пользователей вручную:

register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml \
  http://localhost:8008

Если регистрация всё же нужна публично, обязательно включите капчу (recaptcha_public_key/recaptcha_private_key) или подтверждение по почте (registrations_require_3pid), иначе через пару дней в базе окажутся тысячи ботов. Полезно также ограничить федерацию списком доверенных серверов через federation_domain_whitelist, если открытая федерация вам не нужна — это резко снижает поверхность атаки.

Из рутинного: настройте logrotate для /var/log/matrix-synapse/ (пакет обычно делает это сам), заведите регулярный pg_dump базы и бэкап директории media_store — там лежат все загруженные файлы, и без них дамп базы бесполезен для восстановления. Обновляйте Synapse вместе с системой: apt update && apt upgrade matrix-synapse-py3 — команда Matrix.org выпускает патчи безопасности регулярно, и задержка с обновлением на активном сервере федерации — не лучшая идея.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли сменить домен после установки?

Нет, server_name вшивается во все Matrix ID и невозможно поменять без полного пересоздания сервера и потери федеративных связей — выбирайте домен заранее и осознанно.

Обязательно ли открывать федерацию?

Нет. Если нужен закрытый контур для команды, выставьте federation_domain_whitelist: [] или вовсе отключите ресурс federation в листенере — сервер продолжит работать как обычный чат без связи с внешними homeserver.

Почему звонки не проходят без TURN?

Медиапоток WebRTC не может пробить NAT напрямую в большинстве сетей — coturn ретранслирует его, выступая посредником между двумя абонентами.

Сколько ресурсов реально нужно на 5-10 активных пользователей?

Для небольшой команды хватает 2 ГБ RAM и 2 ядер с запасом по диску под медиафайлы — заметная нагрузка на CPU у Synapse появляется в основном на федерации с крупными серверами и на массовой отправке сообщений.

Как оплатить VPS под Synapse из России?

У MAATRIX доступна оплата картой российского банка, по СБП, криптовалютой или токеном MAAT — иностранная карта не понадобится.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →