Category: Создание собственных сервисов

  • Как сделать собственный мессенджер?

    В связи с медленно наступающими изменениями государственной политики по отношению, к, в частности, мессенджеру 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:

    cd ~/synapse
    python -m synapse.app.homeserver \
        --server-name my.domain.name \
        --config-path homeserver.yaml \
        --generate-config \
        --report-stats=[yes|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 doradura.com;
        ssl_certificate /etc/letsencrypt/live/doradura.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/doradura.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 restart 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».

    Для настольных компьютеров существует как и клиент Element, так и Nheko.