Свой мессенджер Matrix-synapse в связке с Jitsi-meet. Часть 3

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Всем Приветь. Как вы уже обратили внимание, порядок публикации нарушен. Изначально планировалось выпустить эту статью в качестве третьей части цикла, однако она стала второй. Это объясняется тем, что поднять один новый сервер для Matrix дешевле, чем несколько для высоконагруженного сервиса Jitsi-meet. Без паники, все будет. А пока займемся Matrix.

Сразу хочу отметить тот факт, что данный мануал не является полностью моим. Это перевод оригинального мануала разработчиков с моими дополнениями и адаптацией. И вошел он в данную серию статей, ибо связан с jitsi-meet (ну или их можно связать вместе).

Прежде чем мы погрузимся в команды, конфигурацию и "танцы" поговорим немного на тему "а зачем и кому это надо"....

А зачем и кому это надо...

Причин может быть много: от личной паранойи до требований безопасности в компании. Matrix-synapse - это мессенджер, который вы можете не только скачать или открыть в браузере, пройти регистрацию и общаться, но и поднять собственный сервер, установить на него серверную часть matrix, а потом общаться в нем с полной уверенностью, что ваша переписка не только шифруется, но и хранится не у кого-то, а у вас на сервере. Если уж совсем паранойить, то все это можно запихуть в VPN и доступ к серверу будет только у тех, у кого есть подключение к VPN (тут мы такое рассматривать не будем, а настроим только matrix в связке с jitsi).

В прошлой статье мы уже настроили два сервера: jitsi-meet - для видеоконференций и jibri - для записи и/или трансляции этих видеоконференций. Сейчас мы будем расширять наши возможности. Мы поднимем сервер со своим мессенджером и привяжем его к нашему jitsi, дабы совершать видеовызовы через него.

Сервера поднимал тут.

Команды, конфигурация и "танцы".

Я все делаю на debian 9, если это противоречит вашим религиозным взглядам, то использованные тут команды подстраивайте под свою ОС. Если вы хотите, то можете поднимать Matrix на том же сервере, где у вас поднят Jitsi-meet или на отдельном: этот мануал подойдет для обоих вариантов.

Начнем мы с того, что создадим DNS записи. Нам понадобится их три: dnsname.com, matrix.dnsname.com и riot.dnsname.com - на IP нашего сервера.

Веб-сервер и SSL

Я использовал nginx для jitsi и не буду отходить от своей традиции и буду настраивать его и для matrix.

Если nginx еще не установлен, то:

# apt update
# apt install nginx -y

Если nginx установлен, то создаем конфигурацию (скопируем default и перенастроим):

# cd /etc/nginx/sites-avaliable

Теперь редактируем конфигурацию:

# vim dnsname.com

И меняем следующие директивы:

server_name dnsname.com;
...
root /var/www/dnsname.com;

Сохраняем и закрываем.

Тоже самое делаем для riot.dnsname.com:

# vim riot.dnsname.com
	server_name riot.dnsname.com;
  ...
  root /var/www/riot.dnsname.com/riot;

Конфигурацию matrix.dnsname.com приводим к следующему виду:

# vim matrix.dnsname.com
	server {
    # редактируем этот блок
       server_name matrix.dnsname.eu;

       root /var/www/dnsname.eu;
       index index.html;

       location / {
               proxy_pass http://localhost:8008;
       }
....

Теперь пора заняться SSL сертификатами. Мы создадим и подпишем бесплатные трехмесячные сертификаты Let's Encrypt. Для этого делаем следующее:

# apt install -y python3-certbot-nginx
# certbot --nginx -d dnsname.com -d riot.dnsname.com -d matrix.dnsname.com

Этой же командой спустя три месяца можно продлить сертификаты.

Теперь нужно включить виртуальные хосты и перезагрузить nginx:

# ln -s dnsname.com /etc/nginx/sites-enable/
# ln -s matrix.dnsname.com /etc/nginx/sites-enable/
# ln -s riot.dnsname.com /etc/nginx/sites-enable/
# systemctl restart nginx

Matrix-synapse и Postgresql

Из коробки Matrix использует SQLite - при малом количестве пользователей этого достаточно, однако рекомендуется использовать Postgresql (я настоятельно рекомендую сразу начать использовать Postgresql). Для тех, кто просто хочет "пощупать" Matrix, этот шаг можно пропустить, ну а мы, все же, сразу поставим Postgresql, ибо миграция c SQLite на Postgresql - в некоторых случаях может стать теми еще "танцами". Поехали...

Переходим к установке matrix.

# apt install -y lsb-release wget apt-transport-https
# wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
# echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" |
    tee /etc/apt/sources.list.d/matrix-org.list
# apt update
# apt install matrix-synapse-py3 -y

В процессе установки будет запрошено DNS имя - указываем dnsname.com.

Устанавливаем Postgresql, создаем пользователя и БД для matrix-synapse:

# apt install postgresql postgresql-contrib -y
# su - postgres
# psql
postgres=# \password postgres
postgres=# \q
# createuser --pwprompt synapse_user
# psql
postgres=#CREATE DATABASE synapse
postgres-# ENCODING 'UTF8'
postgres-# LC_COLLATE='C'
postgres-# LC_CTYPE='C'
postgres-# template=template0
postgres-# OWNER synapse_user;
postgres=# \q
# exit
# cp /etc/matrix-synapse/homeserver.yaml /etc/matrix-synapse/homeserver.yaml.back
# cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1

Открываем конфигурационный файл Matrix:

# vim /etc/matrix-synapse/homeserver.yaml

Находим строку #servername: "servername" и меняем значение на "dnsname.com", убираем "#", тоже самое делаем со строкой #registration_shared_secret: "UIBfgsjkdfhj3568JHGIUIEBfy3764JH" и вставляем в кавычках ключ, который мы получили ранее. Дальше ищем опцию #enable_registration: false, убираем "#" и меняем false на true

Так же находим блок database снимаем "#" и подставляем свои значения:

database:
  name: psycopg2
  args:
    user: synapse-user
    password: password
    database: synapse
    host: localhost
    cp_min: 5
    cp_max: 10

А блок database, где прописана SQLite (она ниже) - комментируем (ставим "#").

Далее идем и вставляем строку host synapse synapse_user ::1/128 md5    как у меня:

# vim /etc/postgresql/9.6/main/pg_hba.conf
...
   # "local" is for Unix domain socket connections only
   local   all             all                                     peer
   # IPv4 local connections:
   host    all             all             127.0.0.1/32            md5
   host    synapse         synapse_user    ::1/128                 md5
   # IPv6 local connections:
   host    all             all             ::1/128                 md5
...

Перезапускаем Matrix и Postgresql:

# systemctl restart postgresql
# systemctl enable postgresql
# systemctl restart matrix-synapse
# systemctl enable matrix-synapse

Зарегистрируем пользователя с правами администратора:

# register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008

Будут запрошены данные: логин, пароль и права администратора.

Если у вас уже работает Matrix с SQLite, то можно мигрировать на Postgresql. Для этого нам надо сделать копию homeserver.yaml, сделать две копии homeserver.db (одну мы сохраним для "потомков", ну или если что-то пойдет не туда, а со второй будем работать). Подправить конфиг, мигрировать и перезагрузиться сервисы.

# cp /etc/matrix-synapse/homeserver.yaml /etc/matrix-synapse/homeserver-postgresql.yaml
# chown matrix-synapse:nogroup /etc/matrix-synapse/homeserver-postgresql.yaml

Теперь с файлом homeserver-postgresql.yaml надо сделать это.

Останавливаем Matrix:

# systemctl stop matrix-synapse

Далее копируем базы и мигрируем.

# cp /var/lib/matrix-synapse/homeserver.db /etc/matrix-synapse/homeserver.db.snapshot
# chown matrix-synapse:nogroup /etc/matrix-synapse/homeserver.db.snapshot
# cp /var/lib/matrix-synapse/homeserver.db /tmp/
# cd /etc/matrix-synapse/
# synapse_port_db --curses --sqlite-database homeserver.db.snapshot --postgres-config /etc/matrix-synapse/homeserver-postgresql.yaml
# mv homeserver.yaml homeserver-old-sqlite.yaml
# mv homeserver-postgresql.yaml homeserver.yaml
# systemctl restart postgresql
# systemctl start matrix-synapse

Если остались какие-то вопросы, то можно посмотреть сюда.

Так же можно рассказать всем пользователям Matrix о своем сервере, но я не буду тут это расписывать, а дам ссылку, где можно это посмотреть.

Теперь мы можем перейти в браузере по адресу https://matrix.dnsname.com и увидеть, что это работает.

Осталось совсем немного и мы сможем погрузиться в мир "черт, как же это все работает....".

Мы уже сделали виртуальный хост riot.dnsname.com и указали директорию /var/www/riot.dnsname.com/riot;, однако такой директории еще нет. Давайте ее создадим и загрузим туда веб-приложение Riot (Element) из git:

# mkdir /var/www/riot.dnsname.com
# cd /var/www/riot.dnsname.com
# wget https://github.com/vector-im/element-web/releases/download/v1.7.23/element-v1.7.23.tar.gz
# apt install -y gnupg
# wget https://github.com/vector-im/element-web/releases/download/v1.7.23/element-v1.7.23.tar.gz.asc
# gpg --keyserver keyserver.ubuntu.com --search-keys releases@riot.im
# wget https://packages.riot.im/riot-release-key.asc
# gpg --import riot-release-key.asc
# gpg --verify element-v1.7.23.tar.gz.asc
# gpg --edit-key 74692659bda3d940
# tar -xzvf element-v1.7.23.tar.gz
# ln -s element-v1.7.23 riot
# chown www-data:www-data -R riot
# cd riot
# cp config.sample.json config.json

Далее нам надо привести содержимое конфигурационного файла config.json к следующему виду (меняем "base_url": "https://matrix.dnsname.com", "server_name": "dnsname.com", "jitsi": { "preferredDomain": "jitsi.dnsname.com" - последняя настройка свяжет наш matrix и jitsi):

# vim /var/www/riot.dnsname.com/riot/config.json
		{
    "default_server_config": {
        "m.homeserver": {
            "base_url": "https://matrix.dnsname.com",
            "server_name": "dnsname.com"
        },
        "m.identity_server": {
            "base_url": "https://vector.im"
        }
    },
    "disable_custom_urls": false,
    "disable_guests": false,
    "disable_login_language_selector": false,
    "disable_3pid_login": false,
    "brand": "Element",
    "integrations_ui_url": "https://scalar.vector.im/",
    "integrations_rest_url": "https://scalar.vector.im/api",
    "integrations_widgets_urls": [
        "https://scalar.vector.im/_matrix/integrations/v1",
        "https://scalar.vector.im/api",
        "https://scalar-staging.vector.im/_matrix/integrations/v1",
        "https://scalar-staging.vector.im/api",
        "https://scalar-staging.riot.im/scalar/api"
    ],
    "bug_report_endpoint_url": "https://element.io/bugreports/submit",
    "defaultCountryCode": "GB",
    "showLabsSettings": false,
    "features": {
        "feature_new_spinner": false
    },
    "default_federate": true,
    "default_theme": "light",
    "roomDirectory": {
        "servers": [
            "matrix.org"
        ]
    },
    "piwik": {
        "url": "https://piwik.riot.im/",
        "whitelistedHSUrls": ["https://matrix.org"],
        "whitelistedISUrls": ["https://vector.im", "https://matrix.org"],
        "siteId": 1
    },
    "enable_presence_by_hs_url": {
        "https://matrix.org": false,
        "https://matrix-client.matrix.org": false
    },
    "settingDefaults": {
        "breadcrumbs": true
    },
    "jitsi": {
        "preferredDomain": "jitsi.dnsname.com"
    }
}

Осталось только перезагрузить службы (или сервер целиком):

# systemctl restart nginx
# systemctl restart matrix-synapse

Регистрация и чаты

Осталось понять, как этим пользоваться. Я не буду детально обрисовывать использование, а расскажу, как зарегистрироваться, установить приложение, добавить "друга по переписке". Поехали:

Переходим в браузере на https://riot.dnsname.com


Создаем аккаунт.
Создаем аккаунт.

Меняем домашний сервер. Придумываем логин и пароль. Дальше надо будет создать ключи шифрования, просто следуйте инструкциям riot.
Меняем домашний сервер. Придумываем логин и пароль. Дальше надо будет создать ключи шифрования, просто следуйте инструкциям riot.

Искать пользователя надо в данном формате.
Искать пользователя надо в данном формате.

Обновление Riot

Периодически тут выкатывают обновления серверной части Riot. Обновиться очень просто. Идем на Гит (ссылка выше) и берем там ссылки необходимой версии релиза, а именно нам нужны element-vx.x.xx.tar.gz и element-vx.x.xx.tar.gz.asc. Далее идем:

# cd /var/www/riot.dnsname.com/
# wget https://github.com/vector-im/element-web/releases/download/vx.x.xx/element-vx.x.xx.tar.gz
# wget https://github.com/vector-im/element-web/releases/download/vx.x.xx/element-vx.x.xx.tar.gz.asc
# gpg --keyserver keyserver.ubuntu.com --search-keys releases@riot.im
# wget https://packages.riot.im/riot-release-key.asc
# gpg --import riot-release-key.asc
# gpg --verify element-vx.x.xx.tar.gz.asc
# tar -xzvf element-vx.x.xx.tar.gz
# rm riot
# ln -s element-vx.x.xx riot
# chown www-data:www-data -R riot
# cd riot
# cp config.sample.json config.json

Теперь надо обновить файл конфигурации как мы делали ранее тут.

Репозиторий с релизами Riot.

Клиентское приложение element.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Полезен ли данный цикл статей (мануалов)?

  • 0,0%Было бы да, если не было бы нет.0
  • 100,0%Было бы нет, если не было бы да.1
  • 0,0%Девушка, я не танцую…0
Источник: https://habr.com/ru/post/540894/


Интересные статьи

Интересные статьи

Эта статья является заключительным конспектом книги «От монолита к микросервисам». Материал статьи посвящен декомпозиции БД во время процесса разложения монолита на микросервисы.Извлечени...
Вопрос хорошо ли следить за другими людьми каждый человек решает для себя по-разному. Причин может быть много. Обсудим обсудим реализацию на языке программирования C#.Опи...
Если вы работаете с crucial data, то рано или поздно задумаетесь о том, что неплохо бы поднять кластер отказоустойчивости. Даже если основной сервер с базой улетит в глух...
Привет, дорогие подписчики! Наверное вы уже знаете о том, что мы запустили новый курс «Компьютерное зрение», занятия по которому стартуют уже в ближайшие дни. В преддверии старта занятий подготов...
В первой части перевода материала, посвящённого каскадной инвалидации кэша, мы обсудили сущность проблемы и рассмотрели один из вариантов её решения, который заключается в использовании карт импо...