Добавить в корзинуПозвонить
Найти в Дзене

Установка и настройка мессенджера Matrix

В последнее время я задумался о персональном чат-сервере для дома - для семьи. Нужна была запасная связь на случай недоступности Telegram — чтобы свой канал оставался всегда под рукой. Выбирал по нескольким критериям: открытая экосистема, возможность подключить моих ИИ-агентов (в первую очередь Гермеса) и потенциал для адаптации Telegram-ботов, которых я написал за последнее время. Прошерстил варианты, сравнил — остановился на экосистеме Matrix. Открытый протокол, децентрализация, зрелая экосистема клиентов. Из серверных реализаций выбрал Tuwunel — современный homeserver на Rust, лёгкий и производительный. Арендовал VPS с 1 CPU, 1 ГБ RAM, 10 ГБ SSD и Ubuntu 24.04. Организовал доступ через SSH-ключ (чтобы ИИ-agent мог заходить и управлять сервером), вооружился OpenCode с DeepSeek Pro в качестве ассистента и начал разворачивать стек. Потребовалось настроить: С делегацией пришлось разбираться отдельно — Matrix требует, чтобы сайт через .well-known/matrix/server и .well-known/matrix/client
Оглавление

Зачем мне понадобился личный мессенджер

В последнее время я задумался о персональном чат-сервере для дома - для семьи. Нужна была запасная связь на случай недоступности Telegram — чтобы свой канал оставался всегда под рукой. Выбирал по нескольким критериям: открытая экосистема, возможность подключить моих ИИ-агентов (в первую очередь Гермеса) и потенциал для адаптации Telegram-ботов, которых я написал за последнее время.

Прошерстил варианты, сравнил — остановился на экосистеме Matrix. Открытый протокол, децентрализация, зрелая экосистема клиентов. Из серверных реализаций выбрал Tuwunel — современный homeserver на Rust, лёгкий и производительный.

Как ставил

Арендовал VPS с 1 CPU, 1 ГБ RAM, 10 ГБ SSD и Ubuntu 24.04. Организовал доступ через SSH-ключ (чтобы ИИ-agent мог заходить и управлять сервером), вооружился OpenCode с DeepSeek Pro в качестве ассистента и начал разворачивать стек.

Потребовалось настроить:

  • Docker + Docker Compose — контейнеризация сервисов
  • Tuwunel — сам Matrix-сервер (в контейнере, RocksDB для хранения)
  • Caddy — reverse proxy с авто-TLS (Let's Encrypt), он же отдаёт .well-known для делегации
  • DNS через Beget — A-записи на matrix, chat, call, matrix-rtc
  • UFW — файрвол с открытыми портами для Matrix federation, TURN, LiveKit

С делегацией пришлось разбираться отдельно — Matrix требует, чтобы сайт через .well-known/matrix/server и .well-known/matrix/client указывал на реальный сервер. Caddy справился с этим на ура.

Самая сложная часть — видеозвонки

Развернул LiveKit (SFU для медиа), Element Call (виджет звонков), Coturn (TURN/STUN). В браузере звонки между Element Web работали. Но Element X на Android выдавал: «Вызов не поддерживается. The server is not configured to work with Element Call».

Перепробовал шесть подходов:

  1. Правил конфиг Tuwunel — транспорт появился, но Element X не реагировал
  2. Добавлял CORS — помогло браузеру, не помогло приложению
  3. Развернул свой Element Call на call.мойсайт — виджет грузится, но звонки не стартуют
  4. Transport без авторизации через Caddy — Element X туда не ходит
  5. Coturn — legacy-звонки заработали, Element X их игнорирует
  6. Power levels в комнате — события принимаются, звонков нет

В итоге докопался до корня: протокольная несовместимость. Element Web использует org.matrix.msc3401.call.member, а Element X (native) — m.rtc.member. Tuwunel хранит оба типа, но не транслирует один в другой. Два клиента в одной комнате говорят на разных языках.

Клиенты: что выбрал и почему

Перепробовал несколько десктопных и мобильных клиентов. В итоге:

  • Десктоп: Element
  • Android: SchildiChat Legacy

Оба клиента поддерживают шифрование, реакции, голосовые сообщения, файлы — всё, что нужно для повседневного общения.

Аудио- и видеозвонки между всеми клиентами также работают нормально.

Подключил Гермеса

Следующим шагом прикрутил Гермес-агента — моего семейного ИИ-помощника. Теперь он висит в Matrix, распознаёт голосовые сообщения в текст и реагирует на них прямо в чатах. Удобно: семья общается голосом, а Гермес читает, отвечает и выполняет команды.

Что в итоге получилось

Полноценный личный мессенджер, который:

  • Работает в РФ без замедлений — сервер на хостинге в надёжном дата-центре, клиенты тоже в рунете
  • Доступен семье — несколько пользователей, регистрация по токену приглашения
  • Не жрёт ресурсы — среднее потребление около 0% CPU и ~600 MB RAM, 4 GB на диске после установки. Спокойно живёт на VPS с 1 CPU и 1 GB RAM
  • Всё что нужно из коробки — текст, голосовые сообщения, аудио- и видеозвонки, реакции, файлы, локации. Отдельно радует фича, которой в Telegram нет: из любого сообщения можно начать дискуссию — что-то вроде динамических тредов

Что осталось сделать

Адаптировать двух моих Telegram-ботов для работы через Matrix:

  1. Inbox для Obsidian — чтобы на ходу пересылать заметки в Obsidian через Matrix
  2. Знайка — карманный ИИ-исследователь, который проводит поиск по методике FPF и возвращает отчёты на заданную тему

На всю установку и настройку ушло порядка 5–7 часов в несколько приёмов. Если бы не история со звонками — можно было уложиться часа за три.

Element на десктопе
Element на десктопе
Потребление CPU
Потребление CPU
Потребление памяти
Потребление памяти