Настройка чат сервера Matrix Synapse и клиента Riot

Для меня остается открытым вопрос использования бесплатного корпоративного чата, не определился с ним. В данной статье хочу рассмотреть установку и настройку бесплатного чат сервера Matrix Synapse и web клиента для него Riot. В целом, проект мне показался интересным и вполне рабочим, но со своими нюансами. Далее постараюсь подробно раскрыть эту тему.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Введение

Ранее я рассказывал об установке и настройке корпоративного мессенджера mattermost, раннего форка популярного сейчас slack. В той статье я перечислил актуальные для меня плюсы и минусы этого мессенджера. Мне его довелось увидеть в деле в работе небольшого коллектива. В целом, решение не плохое, но лично мне хотелось больше, чем там есть. В комментариях мне посоветовали обратить внимание на matrix, что я и делаю. Данная статья будет моим знакомством и руководством по установке и начальной настройке. Практического опыта использования matrix у меня нет, так как реальных внедрений еще не делал, но планы есть.

Если вы подбираете себе чат сервер и проверяете различные варианты, рекомендую так же посмотреть на сервер MyChat. Я его тестировал и достаточно подробно описал. Возможно, вам он подойдет больше, чем все остальное.

Информация по Matrix Synapse без проблем гуглится, поэтому не буду подробно рассказывать, что это такое. Кратко пройдемся по основному:

  1. Matrix - это открытый протокол для децентрализованной коммуникации. Он может быть реализован в различных серверах и мессенджерах.
  2. Synapse - локальный сервер, который работает на протоколе matrix, обеспечивает возможность подключения и общения клиентов.
  3. Riot - клиент, который может подключаться к любому серверу, работающему по протоколу matrix, в том числе к synapse. Представлен в виде десктропной или web версии, которую можно установить на свой сервер.

Далее мы займемся установкой локальной версии Matrix Synapse для подключения своих клиентов. На этом же сервере разместим веб клиента Riot. Все это дело снабдим ssl сертификатом. В общем, на выходе должны получить готовое бесплатное локальное решение для корпоративного чата.

Сразу хочу предупредить, что мое описание не подходит под готовое руководство, которое позволит простым копипастом все настроить. Это руководство именно по matrix и riot, вы должны как минимум уметь настраивать web сервер с nginx, устанавливать сертификаты, проксировать запросы, если вам это понадобится.

Установка Matrix Synapse home server

Я буду устанавливать чат сервер на CentOS 7. Если у вас еще нет сервера, то смотрите мои статьи по установке и базовой настройке centos.

Сразу обращаю внимание, что у меня на сервере будет отключен selinux. Как это сделать, смотрите в статье по настройке сервера, ссылка на которую выше.

Для работы synapse server необходим Python 2.7, который в CentOS 7 установлен по-умолчанию. Убедиться в этом можно введя в консоли:

# python -V
Python 2.7.5

Сервер чата synapse может использовать различные базы данных. По-умолчанию, он работает с SQLite, что подходит только для теста. В продакшене использовать эту базы плохое решение. Но даже для теста у меня не получилось настроить работу с SQLite. По-умолчанию, в CentOS устанавливается очень старая версия базы. При ее использовании возникает ошибка и сервер не работает. Я обновил базу до последней версии, но как оказалось, с ней тоже возникают проблемы. Я почитал на эту тему обсуждения и понял, что проблема распространенная, а не уникальная, поэтому решил в ней не разбираться. Вместо этого сразу буду использовать postgresql, что является самым надежным и разумным выбором.

С этого и начнем. Установим postgresql на Centos 7. У меня установлена следующая версия системы:

# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core)

Устанавливаю соответствующий моей версии репозиторий:

# rpm -Uvh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7.4-x86_64/pgdg-centos10-10-2.noarch.rpm

Ставим самую свежую на момент написания статьи версию postgresql:

# yum install postgresql10-server postgresql10-contrib

Инициализируем базу данных:

# /usr/pgsql-10/bin/postgresql-10-setup initdb

Редактируем конфигурационный файл для включения MD5 аутентификации.

# mcedit /var/lib/pgsql/10/data/pg_hba.conf

Меняем строки в самом конце:

host all all 127.0.0.1/32 ident
host all all ::1/128 ident

на

host all all 127.0.0.1/32 md5
host all all ::1/128 md5

Запускаем PostgreSQL и добавляем в автозагрузку:

# systemctl start postgresql-10
# systemctl enable postgresql-10

Заходим в систему под пользователем postgres:

# su - postgres

Создаем пользователя базы данных:

$ createuser synapse

Запускаем консольный клиент для работы с базой данных:

$ psql

Задаем пароль userpass для только что созданного пользователя:

# ALTER USER synapse WITH ENCRYPTED password 'userpass';

Создаем базу данных для чат сервера matrix synapse:

# CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse;

Выходим из консоли управления и учетной записи postgres.

# \q
# exit

Установим еще несколько пакетов, необходимых для взаимодействия synapse с postgresql.

# yum install postgresql-devel libpqxx-devel.x86_64

Подготовительные действия выполнили, теперь можно устанавливать сам сервер. Для этого установим необходимые зависимости.

# yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel redhat-rpm-config python-virtualenv libffi-devel openssl-devel
# yum groupinstall "Development tools"

Устанавливаем менеджер пакетов Python - pip.

# wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py

Создаем виртуальную среду для приложения synapse. Она используется для изоляции отдельного python проекта. Проект будет использовать свои собственные директории и библиотеки, без взаимодействия с глобальным окружением.

# virtualenv -p python2.7 ~/.synapse
# source ~/.synapse/bin/activate

Устанавливаем необходимые пакеты питона.

# pip install --upgrade pip virtualenv six packaging appdirs psycopg2

Обновляем setuptools:

# pip install --upgrade setuptools

Устанавливаем сам сервер matrix synapse.

# pip install https://github.com/matrix-org/synapse/tarball/master

Перед запуском сервера, необходимо создать файл конфигурации. Делаем это.

# cd ~/.synapse
# python -m synapse.app.homeserver --server-name chat.serveradmin.ru --config-path homeserver.yaml --generate-config --report-stats=yes

Я использую доменное имя для своего чат сервера chat.serveradmin.ru. Обращаю внимание на этот параметр. Он важен, если вы захотите использовать полноценный ssl сертификат и https подключения. Используйте реальное доменное имя, на которое потом будете получать сертификат. После выполнения команды вы получите примерно такой вывод:

Создание конфигурации для synapse сервера

A config file has been generated in 'homeserver.yaml' for server name 'chat.serveradmin.ru' with corresponding SSL keys and self-signed certificates. Please review this file and customise it to your needs.
If this server name is incorrect, you will need to regenerate the SSL certificates

По умолчанию, в файле конфигурации homeserver.yaml будет указано использовать базу данных SQLite. Комментируем строки, отвечающие за эту настройку и добавляем параметры для подключения созданной ранее postgresql базы.

#database:
 # The database engine name
 #name: "sqlite3"
 # Arguments to pass to the engine
 #args:
 # Path to the database
 #database: "/root/.synapse/homeserver.db" 
database:
 name: psycopg2
 args:
   user: synapse
   password: userpass
   database: synapse
   host: localhost
   cp_min: 5
   cp_max: 10
Обращаю внимание на отступы в файле конфигурации. Они принципиально важны. Должно быть именно так, как показано - database без отступа, name, args один пробел с начала строки. Все остальное - два пробела.

На этом установка сервера закончена, двигаемся дальше.

Использование ssl сертификата Let's Encrypt

Прежде чем начать настройку сервера, установим на него полноценный ssl сертификат. Если вам это не нужно, можно пропустить данный пункт. Просто посмотреть на чат можно и с самописным сертификатом, который мы получили ранее. Но есть один нюанс. Клиент Riot, который я буду использовать для подключения к серверу, не будет работать с самописным сертификатом. Он будет ругаться на него во время подключения. Так что если вы хотите полноценно протестировать работу мессенджера Riot в связке с matrix synapse, придется установить нормальный сертификат.

Мой сервер с чатом напрямую не смотрит в интернет. Я буду проксировать все подключения к нему через web сервер, на котором установлен nginx. Поэтому получение сертификата нужно выполнять именно на нем. Если у вас matrix сервер будет смотреть напрямую в интернет, то настраивать получение ssl сертификата надо именно на нем.

Прежде чем получить сертификат, нарисовал примерно такой конфиг виртуального домена для nginx.

server {
 listen 80;
 server_name chat.serveradmin.ru;

location /.well-known {
 root /web/sites/chat.serveradmin.ru/www/;
 }
}

Подробно про получение сертификатов Let's Encrypt я рассказывал в статье по настройке веб сервера. За всеми подробностями можете заглянуть туда. Здесь же без подробных пояснений выполняем необходимые действия.

Устанавливаем certbot.

# yum install certbot

Запускаем запрос сертификата.

# certbot certonly

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

2: Place files in webroot directory (webroot)

Далее указываю имя домена:

Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): chat.serveradmin.ru

Указываю директорию веб сервера:

Input the webroot for chat.serveradmin.ru: (Enter 'c' to cancel): /web/sites/chat.serveradmin.ru/www

Сертификат получил. Дальше рисую следующий конфиг для виртуального хоста nginx уже для работы по https.

upstream matrix {
 server 77.37.225.129:22991;
}

server {
 listen 80;
 server_name chat.serveradmin.ru;
 return 301 https://$server_name$request_uri;
}

server {
 listen 443 ssl http2;
 server_name chat.serveradmin.ru;
 ssl on;
 ssl_certificate /etc/letsencrypt/live/chat.serveradmin.ru/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/chat.serveradmin.ru/privkey.pem;
 ssl_session_timeout 5m;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;
 ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
 ssl_prefer_server_ciphers on;
 ssl_session_cache shared:SSL:10m;

location /.well-known {
 root /web/sites/chat.serveradmin.ru/www/;
}

 location / {
 client_max_body_size 50M;
 proxy_set_header Connection "";
 proxy_set_header Host $http_host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_set_header X-Frame-Options SAMEORIGIN;
 proxy_pass http://matrix;
 }
}

На сервере 77.37.225.129 сделан проброс внешнего порта 22991 на локальный 8008. На этом порту работает synapse по незащищенному соединению. Редиректить надо именно на этот порт, так как если сделать переадресацию на защищенный порт, который работает со своим сертификатом, будут проблемы при совместной работе этого локального сертификата и внешнего от Let's Encrypt.

С сертификатом и самим сервером synapse разобрались. Дальше я предлагаю сначала установить и настроить бесплатный web клиент для чата - Riot. Если он вам не нужен, можно сразу переходить к настройке самого сервера.

Установка клиента Riot

Вам не обязательно устанавливать собственную версию веб клиента riot. Вы можете использовать публичный web клиент https://riot.im/app/, и с его помощью подключаться к своему серверу. Для этого надо указать адрес своего сервера во время подключения.

Установка web клиента Riot

Чтобы подключиться через riot, у вас обязательно должно быть настроено подключение по https. По обычному протоколу подключиться не получится, будет ошибка.

Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.

или вот такая:

Can't connect; check your SSL settings and trust the server

Я и так и сяк пробовал, но оказалось проще и быстрее сделать ssl сертификат от Let's Encrypt, чем разбираться с ошибками. В общем, получайте сертификат любым удобным для вас способом.

Для того, чтобы установить собственный web клиент riot достаточно скачать его исходники и разместить их на веб сервере. Последнюю версию можно скачать отсюда - https://github.com/vector-im/riot-web/releases. Далее я использую свежую версию на момент написания статьи.

# wget https://github.com/vector-im/riot-web/releases/download/v0.13.3/riot-v0.13.3.tar.gz
# tar -xzvf riot-v0.13.3.tar.gz

Дальше копируем содержимое распакованной директории в корневую папку веб сервера для домена, который вы назначили. В моем примере это /web/sites/riot.serveradmin.ru/www/.

Рисуем примерно такой конфиг для публикации riot в web.

# cat /etc/nginx/conf.d/riot.conf
server {
 listen 80;
 server_name riot.serveradmin.ru;
 return 301 https://$server_name$request_uri;
}

server {
 listen 443 ssl http2;
 server_name riot.serveradmin.ru;
 root /web/sites/riot.serveradmin.ru/www/;
 index index.php index.html index.htm;
 access_log /web/sites/riot.serveradmin.ru/log/access.log main;
 error_log /web/sites/riot.serveradmin.ru/log/error.log;

 ssl on;
 ssl_certificate /etc/letsencrypt/live/riot.serveradmin.ru/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/riot.serveradmin.ru/privkey.pem;
 ssl_session_timeout 5m;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;
 ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
 ssl_prefer_server_ciphers on;
 ssl_session_cache shared:SSL:10m;

location /.well-known {
 root /web/sites/riot.serveradmin.ru/www/;
 }

}

Перечитываем конфиг nginx и можно заходить по указанному веб адресу для использования своего клиента riot. В директории с клиентом есть конфигурационный файл config.sample.json. Переименуйте его в config.json и измените параметр сервера подключения по-умолчанию. Укажите свой.

"default_hs_url": "https://chat.serveradmin.ru",

Этого достаточно для использования своего собственного веб клиента riot по настроенному адресу.

Настройка matrix synapse сервера

Запускаем установленный сервер.

# source ~/.synapse/bin/activate
# synctl start

Если увидели такой же вывод, значит все в порядке.

Запуск matrix synapse сервера

Проверим, на каких портах запустилась служба чата.

# netstat -tulnp | grep python
tcp        0      0 0.0.0.0:8448            0.0.0.0:*               LISTEN      26827/python2.7     
tcp        0      0 0.0.0.0:8008            0.0.0.0:*               LISTEN      26827/python2.7     

Порт 8448 для шифрованных соединений, 8008 для обычных.

Создание учетной записи администратора

Создадим первую учетную запись администратора.

# register_new_matrix_user -c homeserver.yaml http://localhost:8008
New user localpart [root]: admin
Password: 
Confirm password: 
Make admin [no]: yes
Sending registration request...
Success.

Теперь можно пройти по адресу https://chat.serveradmin.ru и залогиниться в систему под созданным пользователем администратора.

Вход в чат matrix

Если вы не настраивали проксирование через nginx, то можно зайти напрямую на сервер с чатом по его ip адресу - http://192.168.13.31:8008 В моем случае я вижу ту же самую страницу.

В веб интерфейсе нет практически никаких настроек. Вы можете только создать нужные комнаты и изменить некоторые настройки пользователя. Так же вы можете заходить и общаться в чатах, но стандартный серверный интерфейс для этого беден и неинтересен. Позже мы подключимся к серверу более удобным клиентом Riot, а пока изменим некоторые настройки сервера.

Включение свободной регистрации

Первым делом вам надо решить, будет ли у вас открыта свободная регистрация пользователей, или вы будете каждого создавать вручную. За это отвечает параметр в файле конфигураций homeserver.yaml

enable_registration: True

Я разрешил свободную регистрацию в своем примере. По-умолчанию она запрещена. Если у вас будет публичный чат-сервер, то обязательно надо настроить каптчу. В synapse уже интегрирована гугловская reCAPTCHA. Чтобы она заработала, вам надо зарегистрировать свой сайт в гугле - https://developers.google.com/recaptcha/, затем указать следующие параметры в конфиге:

recaptcha_public_key: PUBLIC_KEY
recaptcha_private_key: PRIVATE_KEY
enable_registration_captcha: true

Public и Private ключи вы получаете после регистрации каптчи для вашего доменного имени в гугле.

reCAPTCHA для регистрации в matrix

Настройка почтовых уведомлений

Сервер корпоративного чата synapse matrix умеет отправлять почтовые уведомления на различные события. Настройка этих событий выполняется в пользовательских настройках. Но чтобы сервер мог отправлять оповещения, их надо настроить в конфигурации самого сервера. Для этого в конфиге рисуем такие параметры для отправки почты через локальный сервер.

email:
 enable_notifs: true
 smtp_host: "localhost"
 smtp_port: 25
 notif_from: "Your Friendly %(app)s Home Server <chat@serveradmin.ru>"
 app_name: Matrix
 template_dir: res/templates
 notif_template_html: notif_mail.html
 notif_template_text: notif_mail.txt
 notif_for_new_users: True
 riot_base_url: "https://riot.serveradmin.ru"

Перезапускаем сервер и проверяем.

# source ~/.synapse/bin/activate
# synctl restart

Я сразу же получил ошибку на тему того, что файл notif_mail.html не найден. Долго разбирался, в чем может быть проблема. Потом все-таки понял, когда скачал вручную полные исходники сервера из github, что у меня не хватает директории res/templates. Похоже, их просто забыли положить в сборку, которая качается через pip. Так что вам нужно будет сделать то же самое, если этот баг не пофиксят к тому моменту, как вы будете пробовать настраивать свой сервер чата. Я поступил вот так:

# cd /usr/src
# git clone https://github.com/matrix-org/synapse
# mv /usr/src/synapse/res ~/.synapse

После этого еще раз перезапускайте сервер и проверяйте.

Я очень много времени потратил на отладку оповещений. Так и не понял, как их внятно настроить и когда они будут срабатывать. Вроде в профиле все включаю, ухожу юзером в офлайн, шлю ему в чат письмо. Иногда оповещение приходит через 10 минут, иногда нет. Где настраивается этот интервал в 10 минут - не понял. Вроде в основном конфиге есть некоторые намеки на этот интервал, но явно не указано, что он влияет на время, через которое будет отправлено оповещение на почту. По логике, его бы надо сразу отправлять, если пользователя нет, а не ждать 10 минут.

Наверно есть какой-то механизм аккумулирования оповещений, возможно у него какая то своя логика, которую я не понял, поэтому мне не до конца ясно, как работают оповещения. Шаблон самих сообщений по-умолчанию очень корявый, по нему толком не понятно, где и в каком чате произошло событие. Вот пример:

Почтовое уведомление от чата matrix syanpse

Я кое-как восстановил последовательность событий по сообщениям в чатах, но в целом все не очевидно. Этот момент можно самому доработать, шаблоны можно настраивать. Но это нужно разбираться и тратить время. В этом моменте продукт явно не готов в текущем виде к продуктовому использованию.

Так же у меня не получилось настроить оповещения через внешние почтовые сервисы. В частности, пробовал через ящик на Яндексе, но мне ничего не приходило. То ли проблема с почтовыми настройками, то ли с самими оповещениями, не разобрался. Дебажить эти моменты неудобно. Лог самого сервера завален спамовыми запросами от web клиентов. В общем, тема неоднозначная и неочевидная. Документации по ней нету. Разобраться, в принципе, можно, по идее то работает, но надо тратить время.

Автозагрузка чат сервера со стартом системы

Из коробки никакое решение для автостарта сервиса после загрузки системы не предлагается, если вы используете систему centos. Для debian есть готовый пакет, который можно просто установить в систему через apt. В комплекте будет конфиг для systemd. У нас же сервер запускается из домашней директории root в virtualenv, что не очень удобно для настройки автозагрузки. Но все решаемо. Рисуем такой конфиг для systemd по следующему пути - /etc/systemd/system/synapse.service.

[Unit]
Description=Synapse Matrix homeserver

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root/.synapse
ExecStart=/root/.synapse/bin/python -B -u -m synapse.app.homeserver -c /root/.synapse/homeserver.yaml
ExecStop=/root/.synapse/bin/synctl stop /root/.synapse/homeserver.yaml

[Install]
WantedBy=multi-user.target

Вообще, не очень правильно, что у нас сервер работает от root. Но так как у меня это тест, я не стал заморачиваться и создавать отдельного юзера и делать все под ним. Да и вспомнил об этом только в самом конце, когда этот конфиг рисовал. Добавляем сервер в автозагрузку и запускаем:

# systemctl enable synapse
# systemctl start synapse

Проверим, все ли в порядке.

# systemctl status synapse

Запуск сервера чата как службы через systemd

Не очень удобно, что сервер будет дублировать свои логи в системный лог /var/log/messages, но это уже мелочи. Если реально будет мешать, можно это дело поправить.

Заключение

Дальше можно создавать комнаты, регистрировать юзеров, менять настройки. Не буду это описывать, каждый сам может сделать, чтобы понять продукт и познакомиться с ним получше. В целом, впечатление у меня осталось неоднозначное. Продукт неплохой, особенно в части заявленного функционала. Я нигде не видел такого же функционала бесплатно. Если у вас много времени и желания, то можно допилить до подходящего уровня, когда будет нормально работать все, что вас интересует. Но мелкие баги и ошибки, с которыми я сталкивался в процессе настройки не вселяют в меня уверенности, что все это будет стабильно работать длительное время.

Я на первое место всегда ставлю стабильность и надежность работы, даже в ущерб функционалу. Я не люблю решения, которые требуют много сил на свою поддержку. В итоге они могут оказаться дороже коммерческих продуктов. Уже сейчас могу представить, сколько вылезет ошибок при очередном обновлении. Вот мое краткое резюме по плюсам и минусам synapse matrix на основе того, что я успел попробовать и проверить.

Плюсы:

  • Обширный бесплатный функционал.
  • Свой локальный сервер
  • Гибкие настройки email оповещений. Хоть и не очень понятные настройки, но думаю, если разобраться, будет в итоге работать.
  • Контроль набора текста и прочтения сообщения. Вы видите, когда пользователь прочтет отправленное ему сообщение. Это важный и удобный функционал. Тот же mattermost или rocket.chat не предлагают этого в бесплатной версии.
  • Хороший выбор клиентов. Тот же riot есть как приложение для десктопа, для смартфона и web версия через браузер.
  • Звонки между клиентами. Никаких настроек не надо, работают сразу.

Минусы:

  • Много багов, с которыми сталкиваешься сразу же во время установки. Забыть положить файлы с шаблонами в дистрибутив и не исправить это. Мне не понятен такой подход.
  • Нету документации, кроме небольшой справки на github.
  • Очень много вопросов на гитхабе, в основном с ошибками. Пропадают сообщения, комнаты, юзеры, кого-то куда-то не пускает и т.д. Думаю со всем этим придется столкнутся после масштабного внедрения.
  • Мало информации в интернете. В русскоязычном интернете вообще ничего, кроме нескольких упоминаний, все только в англоязычном сегменте, да и то в основном краткие руководства по установке. Даже по настройке ничего не нашел, разбирался во всем сам.

Для себя сделал такой вывод - буду наблюдать за развитием. Сам нигде внедрять и пробовать не буду. Подожду какое-то время. Если взлетит, хорошо, буду пользоваться. Если будет в таком же состоянии, как сейчас, то увы, не считаю его готовым для внедрения в реально рабочие коллективы. Пока еще сыро.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

69 комментариев

  1. Спасибо за материал , хотел бы поинтересоватся . Есть мониторинг данного сервиса под zabbix? Кроме простых проверок , достпность по порту и работающей службы.

  2. Написал инструкцию по установке Matrix Synapse с помощью Ansible и Docker, мне кажется мой способ намного проще и функциональнее https://kiberlis.ru/matrix-docker-ansible-deploy/

  3. Александр

    При выполнении:
    # cd ~/.synapse
    # python -m synapse.app.homeserver --server-name chat.serveradmin.ru --config-path homeserver.yaml --generate-config --report-stats=yes (ну тока имя сервера своё)
    получаю:
    /usr/bin/python: No module named synapse.app
    всё вроде пошагово делал, как полечить?

  4. Получаю следующию ощибку:

    (.synapse) [root@centos7-live synapse]# synctl start
    Starting ...
    Traceback (most recent call last):
    File "/usr/local/lib/python3.5/runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
    File "/usr/local/lib/python3.5/runpy.py", line 85, in _run_code
    exec(code, run_globals)
    File "/usr/local/lib/python3.5/site-packages/synapse/app/homeserver.py", line 40, in
    from synapse import events
    File "/usr/local/lib/python3.5/site-packages/synapse/events/__init__.py", line 20, in
    from typing import Optional, Type
    ImportError: cannot import name 'Type'
    error starting (exit code: 1); see above for logs

  5. Максим

    Добрый день!
    часто, при звонках один из собеседников не слышит или со второй стороны звук не передается.. один все слышый отлично, а второй нет. с чем это может быть связано? перебарл яблоки, андроиды,..

  6. Вячеслав

    Сервер установлен по этой статье. Работает. Но наблюдается стабильный эффект выедания памяти. Ровная горка. Например 2гига съедаются за неделю. После этого продолжает работать, но подтормаживает. Возможно это питон, но простая перезагрузка матрикс сервиса не помогает. Только полная перезагрузка сервера. Пока просто перезагружаю по расписанию. Но неужели другого способа нет? Как у других дело обстоит?

  7. Zerox, а каким чатом на работе пользуетесь вы?

    Смотрю в сторону ejabberd, matrix.

    Хотелось бы "современный" чат, с подконтрольным своим сервером, лёгковесными клиентами, и желательно бесплатный.
    Что бы вы порекомендовали?

    • Я не знаю. Мне не нравятся все современные, потому что написаны на electron и тормозят. Порекмоендовал бы mychat. Статья по нему у меня есть. Это самая свежая статья по чатам и там много моих мыслей по этой теме.

      • mychat дорого, если предположить ~500 человек в компании, то цена 2000$.
        ejabbered написан на Erlang.

        • Думаю, можно поторговаться с разработчиком. Это будет дешевле и проще, чем ejabbered. В mychat все уже готово - интеграция с AD, telegram, web чат и многое другое. Готовый продукт, ставь и пользуйся. Не надо ничего допиливать и доделывать.

  8. А что нужно изменить, чтобы пользователи брались из openLDAP?
    Возможно ли так сделать вообще

  9. Кто то сталкивался с таким выводом?
    Error: Default secret values in config.
    Please replace the CHANGEME values in /usr/local/etc/matrix-synapse/homeserver.yaml
    изменения в /usr/local/etc/matrix-synapse/homeserver.yaml как оно и просило ни к чему не привели,ставил без лдапа и постгреса,без АД,запустить не получилось.

  10. Вячеслав

    Не могу понять. Пытаюсь реализовать два варианта, отличающихся от вашего:
    1. Если matrix сервер сам и является сервером с белым адресом и именем chat.serveradmin.ru, то сам matrix на нем висит на портах 8008 и 8448. (Riot поставлю на другой комп или с андроида.) В этом случает на matrix сервер nginx ставить не нужно? Как тогда получать сертификат? Что указывать при запуске certbot вместо /web/sites/chat.serveradmin.ru/www? Как указывать что сертификат для портов 8008 и 8448?
    2. Второй вариант и matrix сервер и ВЕБ клиент Riot с nginx на него же поставить, чтобы все в одном флаконе было на белом адресе. То тогда надо два сертификата для одного домена получать? один для порта 443, а второй для 8448? У меня для nginx сертификат получился нормально. Все отработало. А для matrix на том же сервере не пойму как получить.

    • Вячеслав

      Вопрос решился. Может кому пригодится:
      Редактируем homeserver.yaml
      tls_certificate_path: "/etc/letsencrypt/live/chat.serveradmin.ru/fullchain.pem"
      tls_private_key_path: "/etc/letsencrypt/live/chat.serveradmin.ru/privkey.pem"
      tls_dh_params_path: "/etc/ssl/certs/dhparam.pem"
      Перезапускаем matrix и все заработает

      • Все верно. Так как без nginx сам matrix и есть веб сервер. Нужно сертификаты прописать в его конфиге напрямую.

  11. Zerox, а с тобой как то можно связаться? Ты дальше разбирался с matrix сервером, или все те косяки как были так и остались, ибо я вообще в тупике, при регистрации нвого пользователяс e-mail ом, потверждения все равно приходят от matrix.org, т.е. какая та интеграция все равно остается, вообще возможно полностью изолировать сервер??? И 2й вопрос mychat на линукс пробовали устанавливать,что-топока не нашел я ничего особого на эту тему, кроме того что должно под wine работать.

    • После написания статьи, matrix больше не использовал. Mychat по-моему, на линуксе нет. Я лично ставил на винду.

  12. Есть возможность развернуть этот сервис на raspbian?

    • Думаю да. Я даже где-то видел статью на хабре, где косвенно об этом упоминалось.

      • Аноним

        Пробовал всунуть на малину, а он имеет репы только для дебиана и подключать их не хочет. Даже не знаю как умудрились всунуть на малину. Может через докеры?

        • Всегда есть вариант собрать из исходников. Надо только все зависимости поставить.

          • Аноним

            Если есть возможность подсказать как собрать из исходников или установить матрикс в докере для рабсбиан?

            • Тут нечего подсказать. Этим надо заниматься и разбираться. Я точно не планирую статей на эту тему.

  13. Андрей

    Подскажите как разрешить самостоятельною регистрацию пользователей на сервере?

  14. Андрей

    Чат конечно интересный, всё отлично, но может кто-то сталкивался...
    В общем поставили задачу рассылать сообщения по выбранным пользователям, в матриксе это сдлеать можно, но только если пользователь одобрит приглашение в комнату. Такой вопрос, а можно эти разрешения как то отключить через конфиг, например создал комнату, пригласил пользователя и он уже там, без подтверждения.
    Или посоветуйте такой менеджер, где можно делать рассылку по нескольким пользователям
    И да, спасибо за статью, чат интересный.

    • Андрей

      *мессенджер

    • В mychat очень хорошо реализован функционал таких рассылок. Там можно выбрать пользователей, отправить им всем сообщения. Так же можно указать, что пользователь обязательно должен кликнуть кнопку, что он прочитал сообщение. Можно это сообщение ему выводить поверх экрана без возможности свернуть, пока он не подтвердит прочтение. Реально удобно и ни у кого такого не видел. Но чат платный. Есть бесплатная версия на ограниченное количество пользователей, не помню на сколько.

      • Андрей

        Спасибо. Тоже смотрел в его сторону.

        • Андрей

          Посмотрели этот чат, он реально крут, у него еще есть плагин управления удаленным компом, что нам крайне необходимо, привязка к ад и еще много всяких полезностей. В общем решели приобрести лицензию, ибо на сегодня это самое оптимальное решение.
          Спасибо за подсказку, mychat реально крутое решение.

  15. Подскажите, а где и как он хранит переписку?

  16. Косяк в Selinux Был

    • Дмитрий

      Вылезла такая же ошибка 1 в 1 , но selinux отключен =\
      Куда копать ?

      • Аноним

        Мне помогло именно это- отключение selinux. причем в самом начале. Если отключить после получения ощибки то не прокатит...

  17. Добрый день!
    Ставлю Riot По вашемуу мануалу на Ccentos 7/64
    Дошел до Synctl start И тут вылезло это:
    raceback (most recent call last):
    2018-05-07 17:38:30,451 - twisted - 131 - ERROR - - File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
    2018-05-07 17:38:30,451 - twisted - 131 - ERROR - - "__main__", fname, loader, pkg_name)
    2018-05-07 17:38:30,451 - twisted - 131 - ERROR - - File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
    2018-05-07 17:38:30,452 - twisted - 131 - ERROR - - exec code in run_globals
    2018-05-07 17:38:30,452 - twisted - 131 - ERROR - - File "/root/.synapse/lib/python2.7/site-packages/synapse/app/homeserver.py", line 511, in
    2018-05-07 17:38:30,452 - twisted - 131 - ERROR - - main()
    2018-05-07 17:38:30,452 - twisted - 131 - ERROR - - File "/root/.synapse/lib/python2.7/site-packages/synapse/app/homeserver.py", line 506, in main
    2018-05-07 17:38:30,452 - twisted - 131 - ERROR - - hs = setup(sys.argv[1:])
    2018-05-07 17:38:30,452 - twisted - 131 - ERROR - - File "/root/.synapse/lib/python2.7/site-packages/synapse/app/homeserver.py", line 327, in setup
    2018-05-07 17:38:30,453 - twisted - 131 - ERROR - - db_conn = hs.get_db_conn(run_new_connection=False)
    2018-05-07 17:38:30,453 - twisted - 131 - ERROR - - File "/root/.synapse/lib/python2.7/site-packages/synapse/server.py", line 341, in get_db_conn
    2018-05-07 17:38:30,453 - twisted - 131 - ERROR - - db_conn = self.database_engine.module.connect(**db_params)
    2018-05-07 17:38:30,453 - twisted - 131 - ERROR - - File "/root/.synapse/lib/python2.7/site-packages/psycopg2/__init__.py", line 130, in connect
    2018-05-07 17:38:30,453 - twisted - 131 - ERROR - - conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    2018-05-07 17:38:30,453 - twisted - 131 - ERROR - - psycopg2.OperationalError: FATAL: Ident authentication failed for user "synapse"
    2018-05-07 17:38:30,453 - twisted - 131 - ERROR - -

    Что с этим не так?? Следовал мануалу- Постфикс встал. пароль и юзер верные.

  18. Александр

    Интересно, а все сообщения пользователя как то сразу удалить возможно? Что то не нашёл такой опции в riot`е

    • Ага..., нашёл сам ответ: Слева на пользователе, где выпадающая менюшка, выбрать "покинуть"

  19. Михаил

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

    • Регистрация через СМС это полный провал для корпоративного чата :) Каким образом админ должен управлять учетками, если они привязаны к номерам телефонов?

      • Михаил

        Нужен был свой телеграм :), в случае если его закроют (как раз новость прошла недавно). Да и чат без работы на смартфоне сейчас не котируется.

        • Да никто телеграм не закроет, можно не переживать. Его же пиарят такими новостями и явно не для того, чтобы закрыть. Надо разбираться не только в информационных технологиях, но в современных технологиях оболванивания людей :)

          • Михаил

            Это понятно что пиар, но секретности то нет. Если не дадут смотреть переписку хомячков, закроют на территории РФ.

            • Да нет же, все там читают. Его для того и пиарят, чтобы заместить другие мессенджеры, которые читать не получается. Никто телеграм не закроет, либо закроет для вида, формально, чтобы еще больше его распиарить.

  20. Александр

    И ещё хотелось бы пояснений этого места: "Прежде чем получить сертификат, нарисовал примерно такой конфиг виртуального домена для nginx." Как его называть и где размещать в случае использования apache?, и работы без проксирования.

    • Так просто не ответишь. У меня нет примера конфига для apache. Я использую nginx.

    • Я же выше привёл привёл рабочий конфиг которым пользуюсь,единственное Riot таки нужно на другом домене держать.
      Вот мой рабочий конфиг для Apache

      VirtualHost *:443
      ServerName moimatrix.com
      ServerAlias http://www.moimatrix.com

      SSLEngine On
      SSLProxyEngine on
      SSLCertificateFile /etc/ssl/fullchain1.pem ###SSL сертификат
      SSLCertificateKeyFile /etс/ssl/privkey1.pem ### SSL приватный ключ

      Header always add Strict-Transport-Security "max-age=31536000"
      Header always set Public-Key-Pins "pin-sha256=\"f5uthPZ21VOlA6Bye2yvoe+6a/h9fKRK27SdFt43XHQ=\"; pin-sha256=\"ATwpV5xzLfkVs631iympx7q+JlvRePMgTcvFG7x3Eeo=\"; max-age=5184000; includeSubDomains"

      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
      DocumentRoot /var/www/
      ProxyPass /_matrix http://127.0.0.1:8008/_matrix
      ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix
      VirtualHost

  21. Александр

    Если я правильно понял: Без зарегистрированного доменного имени получить сертификат не получится?, и соответственно без него потестировать сервер через riot тоже не выйдет?

    • Как я понял - да.

      • Александр

        Интересно, а через сервис No-IP получить сертификат получится? И как быть, если при установке matrix уже было указано доменное имя, его как то изменить можно?

        • Александр

          В смысле через доменное имя, полученное при подмене IP

          • Let'sEncrypt через его клиент certbot позволяет получять SSL сетификат для любых DDNS провайдеров (кроме OpenNIC), в частности получал сертификаты через NoIP.Не забудьте только открыть 443 порт (ну и 80 естественно).

    • Николай

      Для тестирования можно попробовать ngrok.

  22. Может кому пригодится...
    Конфиг для прокси и поднятия вебки на апачи.

    ServerName moisuperchat.com

    SSLEngine On
    SSLCertificateFile /etc/apache2/wcert.crt # поменять на путь к файлу своего сертификата
    SSLCertificateKeyFile /etc/apache2/wkey.key # поменять на путь к файлу своего ключа

    Header always add Strict-Transport-Security "max-age=31536000"
    Header always set Public-Key-Pins "pin-sha256=\"f5uthPZ21VOlA6Bye2yvoe+6a/h9fKRK27SdFt43XHQ=\"; pin-sha256=\"ATwpV5xzLfkVs631iympx7q+JlvRePMgTcvFG7x3Eeo=\"; max-age=5184000; includeSubDomains"

    DocumentRoot /var/www/riot #путь к вебке

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPass /_matrix http://127.0.0.1:8008/_matrix
    ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix

    https://about.riot.im/downloads/ тут клиенты.

  23. "Сертификат получил. Дальше рисую следующий конфиг"

    Изучил конфиг. Первый блок не понял.

    "На сервере 77.37.225.129 сделан проброс внешнего порта 22991 на локальный 8008"

    И, здесь я сломался окончательно....

    Вообщем, не сработало.
    Бился субботу и воскресенье. Завтра вечером опять сначала...

    • У вас какая схема работы будет? Я описал ситуацию, когда запрос от клиента идет на внешний веб сервер, на этом веб сервере идет проксирование запроса на другой сервер, установленный в локальной сети за шлюзом. Соответственно, 77.37.225.129 это ip адрес шлюза, 22991 - порт на шлюзе, с которого идет перенаправление запроса на сервер в локальной сети, где работает сам matrix на 8008 порту. Если нет понимая, как все это настроить, то и не надо. Делайте все на одном сервере без всяких проксирований и nginx.

  24. Во время зашел )

    Летом возился с этим мессендежером. Возникла проблема с видео и звуком.
    После Вашей статьи решил все-таки победить те проблемы )

    Спасибо!

    PS: мой любимы и самый полезный портал! )

  25. Аноним

    А почему бы Вам не показать нам установку вот этого чуда? https://github.com/wireapp/wire-server Если найдётся свободное время.

    • а сами пробовали?
      что-т я сунулся и не осилил

    • https://github.com/wireapp/wire-server/issues/194

      "...at the moment it is necessary to have a AWS account and to configure all external components, such as SNS, SES, SQS, DynamoDB, cassandra, elasticsearch, redis, etc. "

      "Чистая" (на своём сервере) установка не предполагается ... судя по "замаху" на функционал - весьма скоро будет платной и вряд ли будет возможность поставить все сервисы у себя на сервере ... имхо

  26. Аноним

    Почему не Openfire сервер?(jabber) клиент Miranda-ng

    • Все мне про миранду говорят :) Популярное было в свое время решение. У меня оно то же работает. А как же современно, красиво, молодежно? Вам не становится грустно, когда вы открываете миранду? По мне так это прошлый век. Очень много всего не хватает в этом решении. Те же оповещения на почту, контроль прочтения, да много чего. Плюс внешних вид - привет из 2000-х.

      • Аноним

        Всё настраивается при помощи плагинов, как у Openfire плагин (Email on Away), так и у miranda-ng много плагинов также настраивается интерфейс по-своему вкусу (либо скачиваются сборки, но для меня там много лишнего функционала было в них)

  27. так что сейчас самое стабильное? rocketchat?

    • К mattermost в плане стабильности никаких претензий нет. Он работает неплохо. Если функционала достаточно, то можно смело пользоваться. Я его внедрял и опыт работы большой. Работает стабильно. Из разряда поставил и забыл.

  28. >>Этого достаточно для исп

    Добрый день!
    Спасибо за статью, исправьте опечатку.

    • Спасибо, исправил. Даже не помню, что там должно было быть :) Я эту статью по кусочкам недели 2 составлял, не было времени все разом настроить и проверить.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar