В связи с медленно наступающими изменениями государственной политики по отношению к, в частности, мессенджеру Telegram, вопрос о «построении» своей платформы для коммуникации может скоро встать «ребром» для «продвинутых» пользователей рунета.
Стоит отметить, что сейчас сделать свой мессенджер относительно просто; за последний десяток лет «расплодилось» множество протоколов для децентрализованной коммуникации, в числе которых — Matrix, SMP, и прочие. Ввиду простоты первого именно о нем далее пойдёт речь.
Что потребуется?
- VPS/VDS с 2GB ОЗУ и 2 vCPU;
- Доменное имя*;
- Базовое знание терминала *nix.
Примечание: лучше регистрировать домен у зарубежного регистрара ввиду отсутствия необходимости «показывать паспорт». В дальнейшем на работу сервера это не повлияет.
I. Подготовительные работы
В качестве ОС для сервера мы будем использовать Ubuntu 24.04. Можно и Debian 12, но работа конкретно этого руководства на нем не проверялась.
Откройте панель управления вашего регистрара и зайдите в параметры зон DNS вашего домена. Тут вам необходимо создать запись типа A, которая указывает на IP вашего сервера. «Выглядеть» она должна следующим образом:
- Хост: @
- IP-адрес: IP вашего сервера
Обновление записей DNS может занять несколько часов, ввиду чего желательно не «тянуть» с этим пунктом.
II. Настройка сервера
Подключитесь к своему серверу по протоколу Secure Shell:
ssh root@{IP сервера}
Можно заменить непосредственный IP сервера на ваш домен, если вы «подождали» от его настройки достаточное количество времени.
Далее вам покажут отпечаток ключа вашего сервера и попросят ввести пароль. Если ваш хостинг-провайдер не предоставляет возможность посмотреть отпечаток из веб-интерфейса, «сверку показаний» можно пропустить.
После успешного подключения обновите кэш пакетного менеджера APT и системные пакеты:
apt update && apt upgrade
Скорее всего, к вам «заедет» несколько гигабайт новых «пакетов», в числе которых будет, например, новый образ ядра. Чтобы загрузить это «счастье» в память, перезагрузите систему:
reboot
Подождите несколько минут и подключитесь по Secure Shell вновь. Далее, необходимо установить «базу», которая потребуется в дальнейшем:
apt install python3-full python3-virtualenv nginx certbot
После установки пакетов создайте «среду» для сервера:
mkdir -p ~/synapse
python3.12 -m venv ~/synapse/env
Переключитесь в свежесозданную «среду»:
source ~/synapse/env/bin/activate
Обновите пакеты PIP и setuptools:
pip install --upgrade pip
pip install --upgrade setuptools
Установите непосредственно сам сервер Synapse:
pip install matrix-synapse
На данный момент у вас уже есть сервер, но в состоянии «слепого котёнка». Для того, чтобы до него можно было «достучаться», необходимо провести некоторое количество дополнительных конфигурационных работ.
III. Конфигурация
Создайте конфигурационный файл сервера Synapse:
python -m synapse.app.homeserver \
--server-name kremlinkernel.com \
--config-path homeserver.yaml \
--generate-config \
--report-stats=no
В параметре –server-name замените kremlinkernel.com на ваше доменное имя.
Запросите сертификаты TLS для вашего домена:
certbot certonly
Если вас попросят выбрать способ подтверждения, выбирайте первый. Далее проблем возникнуть не должно.
Для того, чтобы до вашего сервера можно было «достучаться» извне, вам необходимо настроить reverse proxy с использованием 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.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location ~ ^(/_matrix|/_synapse/client) {
# note: do not add a path (even a single /) after the port in `proxy_pass`,
# otherwise nginx will canonicalise the URI and cause signature verification
# errors.
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;
# Nginx by default only allows file uploads up to 1M in size
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
client_max_body_size 50M;
# Synapse responses may be chunked, which is an HTTP/1.1 feature.
proxy_http_version 1.1;
}
}
Замените kremlinkernel.com на своё доменное имя в параметре server_name и в путях до сертификатов Let’s encrypt.
Перезапустите nginx:
systemctl reload nginx
Вернитесь в директорию сервера Synapse:
cd ~/synapse
Запустите сервер Synapse:
synctl start
Если вы сделали все правильно, сервер запустится успешно с сообщением started synapse.app.homeserver(homeserver.yaml)
Теперь у вас есть полнофункциональный сервер. Проверить его доступность можно, например, с помощью WEB-клиента Element.
IV. Управление
После перезагрузки сервера запустить его заново можно следующим образом:
cd ~/synapse
source ~/synapse/env/bin/activate
synctl start
Зарегистрировать пользователя можно так:
cd ~/synapse
source ~/synapse/env/bin/activate
register_new_matrix_user -c homeserver.yaml
Далее вас интерактивно проведут по созданию нового аккаунта.
Стоит отметить, что данное руководство не подразумевает возможности регистрировать аккаунты без непосредственного участия администратора. Открытая регистрация — верный способ превратить ваш сервер в «помойку».
V. Приложения
Для iOS/Android существует клиент Element, которым я и рекомендую пользоваться. Его страницы в магазинах приложений:
Вместо регистрации на matrix.org используйте кнопку «sign in manually», потом «change account provider».
Для настольных компьютеров существует как и WEB-клиент Element, так и Nheko.