Изменения
13 авг. 2025
- Добавлено: Установка TURN сервера (Coturn)
Введение
Это именно то о чем вы думаете. Вам не придется покупать дорогой VPS для хостинга Matrix. Достаточно простого VPS и средне-мощного ПК прямо у вас дома.
О Matrix
Matrix – это открытый протокол для обмена сообщениями в реальном времени. Проект был запущен в 2014 году командой из компании Amdocs 1 . Протокол определяет модель событий, формат данных и API для обмена сообщениями между клиентами и серверами, а также для их федерации, то есть взаимодействия между собой.
Для передачи данных Matrix использует стандартные транспорты, такие как HTTP/HTTPS, WebSockets и WebRTC. События и сообщения представлены в формате JSON и передаются через REST-подобные интерфейсы.
Главная особенность Matrix – это его федеративная и децентрализованная архитектура 1 . Множество серверов могут объединяться в единую открытую федерацию, что устраняет зависимость от одного центрального узла и обеспечивает гибкость развертывания.
Matrix поддерживает передачу текста, файлов и медиа, а также интеграции с другими системами 2 . Это позволяет пользователям общаться, независимо от используемого клиента или провайдера.
Для защиты данных Matrix использует сквозное шифрование (E2E). При включенном шифровании содержимое сообщений хранится на серверах в зашифрованном виде, и только участники чата с соответствующими ключами могут его расшифровать. При этом серверы видят служебную информацию, такую как метаданные и состав комнат.
Matrix используется как частными лицами, так и организациями, включая корпоративный и государственный сектор. Например, решения на базе Matrix применяются в вооруженных силах 3 и системе здравоохранения Германии 4 .
Matrix это Synapse?
Matrix это не программа, это протокол, набор правил, экосистема. Фактически чат работает на Synapse, но есть и другие, например Dendrite.
Подобно тому как электронная почта работает на основе протоколов IMAP/SMTP, Matrix определяет, как клиенты и сервера должны обмениваться данными. Это позволяет разным серверам и клиентам работать вместе.
Что будем делать?
Захостим Matrix мессенджер на домашнем ПК с динамическим IP, который будет доступен в интернете через VPS.
Synapse довольно требователен к железу (зависит от кол-ва юзеров), особенно в контексте дискового пространства (медиа файлы), и подходящий VPS/VDS будет не дешевым. Поэтому я покажу как поднять Matrix именно на домашнем ПК/сервере с конфигурацией заточенной под Pangolin.
Что понадобится:
- Домашний сервер, >2 CPU & RAM, и побольше дискового пространства
- Дешевый VPS, >=1 CPU & RAM, желательно с каналом пошире (>=1 Gbit)
- Доменное имя
Ну и в идеале базовые знания Linux, Docker, настройки DNS и знание Pangolin.
Подразумевается что вы уже установили, настроили Pangolin и проверили что все работает, но если нет:
В данной статье я покажу как поднять и Synapse и Element. Element нужен чтобы была некая страница (frontend, клиент) где юзеры прямо в браузере могли бы зарегистрировать аккаунт и/или войти в аккаунт, а так же чтобы была совместимость с клиентами Element и в целом Matrix можно было бы пользоваться прямо в браузере без программ.
Два отдельных сервиса, Synapse и Element. Их можно повесить на два разных домена/поддомена, но могут возникнуть проблемы, Element в некоторых сценариях будет обращаться к домену на котором он работает, но на нем НЕ работает Synapse, поэтому будет куча ошибок.
Чтобы элегантно это решить, мы будем использовать сеть внутри Docker, и использовать Nginx чтобы сделать reverse proxy на localhost, который уже будет пробрасываться через Pangolin.
Типо такого:
services:
synapse and etc:
networks:
m_network:
ipv4_address: 10.10.10.X
reverse-proxy:
ports:
- "4100:80"
networks:
m_network:
ipv4_address: 10.10.10.X
networks:
m_network:
ipam:
driver: default
config:
- subnet: "10.10.10.0/24"
# Synapse API
location ~ ^(/_matrix|/_synapse/client) {
...
}
# Element
location / {
...
}
Контейнеры общаются между собой в своей Docker сети, весь внешний трафик входит через nginx, который работает на 4100 порту и хост которого пробрасывается через Pangolin.
Установка Matrix
Установка Docker:
|
|
Клонирование репозитория с приготовленными конфигами:
|
|
Создание конфигурации Synapse (homeserver.yaml):
|
|
Где domain.org
ваш домен или поддомен, на него должно/будет указывать DNS запись на ваш VPS сервер на котором установлен Pangolin.
Редактирование конфига, например через nano 5 :
|
|
В самый конец нужно добавить:
|
|
enable_registration
- включает регистрацию.enable_registration_without_verification
- отключает предупреждения если нету никакой защиты типа капчи.
Установить пароль для базы данных:
|
|
Если строка содержит спец. символы убедитесь что все нормально:
|
|
Переменная POSTGRES_PASSWORD
должна содержать ту же строку что вы туда и положили (в “.env”).
Дальше нужно поменять базу данных на PostgreSQL. Из “homeserver.yaml.example” скопируйте конфигурацию database
и замените в вашем “homeserver.yaml”:
|
|
Не забудьте установить “password” такой же, какой вы установили в “.env”.
Редактирование конфига Element:
|
|
В base_url
ваш домен с протоколом и без “/” в конце. Используйте “https”, Pangolin сам работает с SSL сертификатами.
"disable_custom_urls": true
- запрещает использовать НЕ ваш Matrix сервер, иначе можно будет использовать другой Matrix сервер через ваш Element instance.
Аналогично:
|
|
И так же:
|
|
Поменяйте server_name domain.org
на ваш домен.
Далее нужно раскомментировать две строки в “docker-compose.yaml”:
|
|
|
|
Запуск:
|
|
Element должен открываться по ip:port (в конфиге 4100) и домену если вы уже настроили Pangolin.
Дополнительно
Отключение федерации
homeserver.yaml:
|
|
Подключение Google reCaptcha
Создать ключи тут (v2, “I’m not a robot”).
homeserver.yaml:
|
|
Разделение хранилища
Есть SSD и HDD, оба LVM, нужно сделать так, чтобы был отдельный логический том SSD диска для БД Synapse и отдельный логический том HDD для медиа файлов, а сам Docker контейнер работал в home/root.
Это рабочий пример, где “vg0” ваш Volume Group, где sda1 и nvme0n1 ваши диски:
|
|
|
|
|
|
Права:
|
|
Потому что docker-compose.yaml:
|
|
На “synapse-1-db” тоже нужно будет установить владельца и группу, если:
|
|
покажет не:
|
|
docker-compose.yaml:
|
|
homeserver.yaml:
|
|
Путь получится “/data/data/”, в корень файлы лучше не записывать, потому что корень зачастую не пустой из-за “lost+found” (зависит от файловой системы). А программа может требовать чтобы директория была пуста, так например требует PostgreSQL, к тому же зачем смешивать файлы.
Не красиво, но точно будет работать.
Максимальный размер загружаемых файлов (Max Upload Size)
homeserver.yaml:
|
|
nginx:
|
|
Другие размеры миниатюр
Может работать некорректно, или не работать вовсе. Лично у меня не работало и сломало аватарки.
homeserver.yaml:
|
|
В любом случае миниатюры обычно создаются сами.
Удаление “старых” медиа файлов
Это может не работать:
homeserver.yaml:
|
|
100% рабочий вариант через API:
Создать админ аккаунт – см. Synapse Admin.
Получить токен:
|
|
Удалить все что старше 1 минуты (60000 в мс):
|
|
Или в одну команду, получить токен, выполнить удаление, отозвать токен:
|
|
Или скриптом. И сделать cron задачу, типо такого:
|
|
Будет запускать скрипт каждые 30 дней в 00:00.
Synapse Admin (админка)
Админку можно запускать где угодно, необязательно пробрасывать в Pangolin, более того, лично я не рекомендую этого делать для безопасности (и это невозможно с конфигурацией из этой статьи (из-за конфигурации nginx)).
Админка от Awesome-Technologies:
|
|
Админка от etkecc:
|
|
Создать админ аккаунт:
|
|
SSH туннель:
|
|
“10.10.10.2” ip Synapse:
|
|
Порт 8008 - это порт Synapse по умолчанию.
Мосты
Telegram
В существующем docker-compose.yaml:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Установка TURN сервера (Coturn)
TURN сервер лучше установить на VPS с публичным IP, можно рядом с Pangolin, все будет работать. В Pangolin для TURN сервера ничего добавлять и настраивать не нужно.
|
|
Открыть порты UFW (на всякий случай):
|
|
|
|
Поменять external-ip
, realm
и server-name
. А также данные user=test:test
- логин:пароль.
Сертификаты можно получить через certbot, или в другом месте, например Cloudflare:
- “cert.pem” - публичный ключ
- “private.key” - приватный ключ
|
|
|
|
homeserver.yaml:
|
|
What’s the Matrix protocol? And how will it change modern messaging? ↩︎ ↩︎
Matrix: a decentralized open-source messaging platform for the future ↩︎
Текстовый редактор nano: CTRL + X,
y
,Enter
– сохранить и выйти. ↩︎