В связи с медленно наступающими изменениями государственной политики по отношению к, в частности, мессенджеру Telegram, вопрос о «построении» своей платформы для коммуникации может скоро встать «ребром» для значительной части российского общества.
Стоит отметить, что сейчас сделать свой мессенджер относительно просто; За последний десяток лет появилось множество протоколов для децентрализованной коммуникации, в числе которых — Matrix, SMP, и прочие. Данное руководство рассматривает именно настройку сервера Matrix, конкретнее — Matrix-Synapse.
Что потребуется?
- VPS с 1GB RAM и 1 CPU (если планируете иметь больше 10-ти активных пользователей — 2 GB RAM и 2 CPU);
- Доменное имя;
- Базовое знание терминала Unix.
Важно: крайне нежелательно пользоваться услугами российских как и хостинг-провайдеров, так и регистраторов. Из зарубежных интернет-ресурс «Может, вам повезет» может уверенно порекомендовать хостинг-провайдера 1984, который, в том числе предоставляет услуги регистрации доменов.
I. Подготовительные работы
В качестве ОС для сервера мы будем использовать Debian 13 (Trixie), но можно и Debian 12 (Bookworm). Существенной разницы между ними нет.
Откройте панель управления вашего регистрара и зайдите в параметры зон DNS вашего домена. Тут вам необходимо создать запись типа A, которая указывает на IP вашего сервера. «Выглядеть» она должна следующим образом:
- Хост: @
- IP-адрес: IP вашего сервера
- TTL (если доступно): 86400
Обновление записей DNS может занять несколько часов, ввиду чего желательно не «тянуть» с этим пунктом.
II. Настройка сервера
Подключитесь к своему серверу по протоколу Secure Shell:
ssh root@{IP сервера}
Можно заменить непосредственный IP сервера на ваш домен, если вы «подождали» от его настройки достаточное количество времени.
Далее вам покажут отпечаток ключа вашего сервера и попросят ввести пароль. Желательно провести «сверку показаний» с отпечатком, который виден у вашего хостинг-провайдера. Его можно вставить как и напрямую в ssh, так и сверить вручную.
После успешного подключения обновите кэш пакетного менеджера APT и системные пакеты:
apt update && apt upgrade
Скорее всего, вам будет необходимо установить несколько гигабайт обновлений, в числе которых будет, например, новый образ ядра Linux. Чтобы загрузить «обновки» в память, перезагрузите систему:
reboot
Подождите несколько минут и подключитесь по Secure Shell вновь. Далее, создайте отдельного пользователя для сервера Synapse:
useradd -m synapse
Задайте ему пароль (желательно 64-128 символа)
passwd synapse
Установите необходимые для сервера пакеты:
apt install python3-full nginx certbot postgresql coturn pwgen
Создайте случайный пароль на 64 символа:
pwgen -s 64 1
В дальнейшем этот пароль будет использоваться для доступа к базе данных сервера Synapse. Сохраните его в безопасном месте (например, в базе данных менеджера паролей KeepassXC)
Откройте пользователя Postgres:
su - postgres
Создайте базу данных для Synapse:
createuser --pwprompt synapse_user # задайте созданный ранее пароль
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse
logout
Закройте пользователя Postgres:
logout
На этом заканчивается базовая настройка сервера. Перейдем к более «детальной» части.
III. Конфигурация
Откройте дополнительное окно Secure Shell и подключитесь к вашему пользователю Synapse:
ssh synapse@{ваш сервер}
Создайте виртуальную среду:
python3 -m venv venv
Переключитесь в свежесозданную среду:
source venv/bin/activate
Обновите пакеты pip и setuptools:
pip install --upgrade pip
pip install --upgrade setuptools
Установите сервер Matrix-Synapse:
pip install matrix-synapse psycopg2-binary
Создайте конфигурационный файл сервера Synapse:
python -m synapse.app.homeserver \
--server-name kremlinkernel.com \
--config-path homeserver.yaml \
--generate-config \
--report-stats=no
В параметре –server-name замените kremlinkernel.com на ваше доменное имя.
Откройте конфигурационный файл homeserver.yaml:
nano homeserver.yaml
Вам необходимо полностью заменить параметер database на следующий:
database:
name: psycopg2
args:
user: synapse_user
password: # пароль от базы данных synapse
dbname: synapse
host: 127.0.0.1
cp_min: 5
cp_max: 10
Вернитесь обратно в пользователя root. Теперь нам необходимо настроить сервер Coturn, который необходим для стабильной интернет-телефонии (VoIP). Создайте для него секретный ключ:
pwgen -s 64 1 # его также необходимо сохранить
Откройте конфигурационный файл сервера:
nano /etc/turnserver.conf
Задайте в нем следующие параметры:
use-auth-secret
static-auth-secret= # ваш секретный ключ
realm=kremlinkernel.com # замените kremlinkernel.com на ваш домен
no-tcp-relay
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
allowed-peer-ip=10.0.0.1
total-quota=1200
Сохраните этот файл и перезапустите сервер coturn:
systemctl restart coturn
Переключитесь на пользователя Synapse. Нам необходимо добавить конфигурацию сервера TURN в homeserver.yaml:
nano homeserver.yaml
Добавьте данные параметры в конец файла:
turn_uris: [ "turn:kremlinkernel.com?transport=udp", "turn:kremlinkernel.com?transport=tcp" ]
turn_shared_secret: # ваш секретный ключ
turn_user_lifetime: 86400000
turn_allow_guests: true
Замените kremlinkernel.com на ваш домен.
Сохраните этот файл и закройте пользователя Synapse. Все необходимые на этом этапе конфигурационные шаги в нем выполнены.
Переключитесь на пользователя root. Для последующего использования шифрования TLS web-сервером nginx необходимо получить сертификаты на ваш домен. Остановите его:
systemctl stop nginx
Запросите сертификаты для вашего домена:
certbot certonly
Если вас попросят выбрать способ подтверждения, выбирайте первый. Далее проблем возникнуть не должно.
Теперь нам необходимо настроить сам web-сервер Nginx. Создайте конфигурационный файл для вашего домена:
cd /etc/nginx/conf.d
nano {доменное имя вашего сайта}.conf
Скопируйте данную конфигурацию в этот файл:
server {
listen 443 ssl;
listen [::]:443 ssl;
# For the federation port
listen 8448 ssl default_server;
listen [::]:8448 ssl default_server;
server_name kremlinkernel.com;
ssl_certificate /etc/letsencrypt/live/kremlinkernel.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kremlinkernel.com/privkey.pem;
ssl_protocols TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location ~ ^(/_matrix|/_synapse/client) {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host:$server_port;
client_max_body_size 50M;
proxy_http_version 1.1;
}
}
Замените kremlinkernel.com на своё доменное имя в параметре server_name и в путях до сертификатов Let’s encrypt.
Перезапустите Nginx:
systemctl restart nginx
IV. Управление
Запустить сервер Synapse из одноименного пользователя можно следующим образом:
source venv/bin/activate
synctl start
Зарегистрировать аккаунт можно так:
source venv/bin/activate
register_new_matrix_user -c homeserver.yaml
Далее вас интерактивно проведут по созданию нового аккаунта.
Стоит отметить, что данное руководство не подразумевает возможности регистрировать аккаунты без непосредственного участия администратора. Открытая регистрация — верный способ превратить ваш сервер в «помойку».
V. Приложения
Для iOS/Android существует клиент Element, которым я и рекомендую пользоваться. Его страницы в магазинах приложений:
Вместо регистрации на matrix.org используйте кнопку «sign in manually», потом «change account provider».
Для настольных компьютеров существует как и клиент Element, так и Nheko.