Опыт построения системы коммуникации на базе Mattermost Server
Всем привет! Меня зовут Григорий Ильдюков, я занимаюсь проектированием, развёртыванием и трансформацией инфраструктуры и информационных систем.
В этой статье я бы хотел поделиться опытом по проектированию и развёртыванию системы коммуникации на базе Mattermost Server.
Немного о том, для чего это было сделано, и почему был выбран именно Mattermost. Предпосылкой к внедрению именно self-hosted системы стала необходимость предоставления пользователям инструмента коммуникации, в полной мере контролируемого Компанией.
Mattermost уже был опробован для части пользователей и подходил по функциональности, но его конфигурация не отвечала нефункциональным требованиям, предъявляемым к продуктивным средам. Решено было произвести развёртывание заново, с учётом соответствующих требований.
Также требовалось обеспечить интеграцию со службой каталогов для входа с учётными записями Active Directory и возможность использования мобильного приложения Mattermost.
Кроме того, одним из ключевых требований было использование бесплатных редакций программного обеспечения. Рассмотрение возможности перехода на платные редакции решено было провести в будущем, по мере возникновения необходимости и роста востребованности решения среди пользователей.
Пара слов о Mattermost Server
Как сказано на официальном сайте проекта — это open source, self-hosted альтернатива Slack и прочим системам коммуникации. На момент проектирования был представлен в платных редакциях E10 и E20, а также в бесплатной редакции Team Edition.
Стоимость лицензий платных редакций рассчитывается по количеству пользователей. Отличие бесплатной редакции от платной заключается, в частности, в отсутствии кластеризации и механизма интеграции со службой каталогов MS Active Directory. Об использовании бесплатного ПО и пойдёт речь далее.
В общем случае архитектура Mattermost Server состоит из самого сервера Mattermost, реверсивного прокси Nginx и базы данных для хранения сообщений и настроек. Поддерживаются MySQL и PostgreSQL. По умолчанию Mattermost хранит файлы пользователей (вложения, пересылаемые скриншоты, изображения профилей) локально, в качестве альтернативы можно указать S3-совместимое хранилище. Есть веб, мобильные и десктопные клиенты.
Для отправки push-уведомлений на мобильные клиенты необходим Push Proxy Service, подробнее о нём ниже. Для расширения функциональности Mattermost Server возможна установка различных плагинов.
В нашем случае была разработана следующая архитектура решения: в OpenShift развёртывается сам Mattermost Server, реверсивный прокси Nginx и Keycloak, Push Proxy Service развёртывается на отдельной ВМ в виде MPNS (Mattermost Push Notification Service), БД PostgreSQL и S3-совместимое файловое хранилище предоставляется как сервис внутри сети Компании.
Логи компонент передаются в ELK с помощью Filebeat. Решение о развёртывании MPNS на отдельной ВМ было принято по специфическим для Компании требованиям, в общем случае его вполне возможно было разместить в OpenShift.
Архитектурная схема:
Теперь подробнее о компонентах решения и причинах того, почему они представлены в такой конфигурации.
OpenShift. Использовать его было решено для обеспечения высокой доступности компонент решения. Причина выбора именно такого пути — OpenShift представлен в технологическом стеке Компании и предоставляется как сервис внутренним подразделением.
Mattermost Server. Как было сказано ранее, бесплатная редакция Team Edition не поддерживает кластеризацию: нельзя построить конфигурацию, при которой два и более серверов были бы одновременно задействованы в обслуживании пользователей. Причина этого ограничения в том, что серверы при параллельной работе не синхронизируют состояние чатов между собой и не могут оповестить пользователей о новых сообщениях с «параллельного» сервера.
Таким образом может сложиться ситуация, когда пользователи А и Б находятся в одном чате, но подключены к разным серверам, а значит не увидят новых сообщений друг друга, пока самостоятельно не обновят страницу чата.
Для обхода этого ограничения мы развернули два пода с Mattermost Server — основной и резервный, переключение между ними обеспечивается на уровне реверсивного прокси Nginx. Следовательно, пользователи всегда будут подключаться к основному экземпляру сервера и не будут испытывать описанной выше проблемы, а при его отказе будут перенаправлены на резервный.
При подключении хранилища S3, если там используется самоподписанный сертификат, нужно разместить его в /etc/pki/ca-trust/source/anchors и выполнить:
update-ca-trust enable update-ca-trust extract
Или разрешить небезопасные исходящие соединения в конфигурационном файле Mattermost Server:
"EnableInsecureOutgoingConnections": true
Делать это допустимо только в тестовом окружении.
Ещё одна особенность – устанавливаемые плагины размещаются только на локальной файловой системе. Поэтому необходимо добавлять плагины на этапе сборки образа. Здесь нужно оговориться, что одним из требований Компании был запрет на использование Persistent Volumes или NFS.
Mattermost предусматривает возможность кастомизации веб-клиента, для этого необходимо заменить все файлы в /opt/mattermost/client на полученные в результате сборки нового веб-приложения. Например, для того, чтобы изменить текст на кнопке входа, нужно указать целевой текст в значении ключа login.gitlab в файле /mattermost-webapp/i18n/en.json и запустить сборку. Подробнее об этом можно почитать здесь.
Keycloak. Это open source решение для обеспечения идентификации и управления доступом. Как было сказано выше, редакция Team Edition не может напрямую интегрироваться с MS Active Directory. Для обхода этого ограничения можно использовать Keycloak, который будет выступать связующим звеном между Active Directory и Mattermost Server.
Keycloak при взаимодействии с Mattermost эмулирует аутентификацию средствами GitLab (поддерживаемую редакцией Team Edition), осуществляя при этом аутентификацию пользователей на основании данных об учетных записях из Active Directory.
Для реализации такой схемы на стороне Keycloak настраивается маппинг какого-либо атрибута учётных записей из Active Directory, имеющего уникальные численные значения, с атрибутом ID, передаваемым Keycloak в Mattermost при аутентификации пользователей. Описанная схема позволяет осуществлять вход в Mattermost с использованием учетных данных из Active Directory.
Концептуальная схема интеграции с AD:
Нужно отметить, что при использовании описанной выше схемы, идентификация и аутентификация пользователей осуществляется средствами Keycloak и Active Directory, а авторизация — средствами Mattermost. Это означает, что осуществлять назначение ролей пользователям на основании их членства в группах Active Directory нельзя, для этого нужно использовать платную редакцию Mattermost.
В нашем случае это не было препятствием, т.к. абсолютное большинство были рядовыми пользователями системы, а назначение нескольких администраторов можно было осуществить вручную через GUI Mattermost Server.
Подробно на настройке я останавливаться не буду, отмечу лишь, что Keycloak требуется отдельная БД, в которой хранится настроенная конфигурация и пользователи. Подробнее о настройке можно почитать по ссылке.
Также следует обратить внимание вот на что – если разрешить пользователям использование токенов для доступа к Mattermost, то нужно предусмотреть механизм блокировки токенов, принадлежащих заблокированным на уровне Active Directory учётным записям. Иначе заблокированные пользователи смогут получить доступ к Mattermost с помощью ранее созданного токена.
Реверсивный прокси Nginx. Конфигурация Nginx создавалась на основе рекомендованной, но в нашем случае приобрела некоторые особенности.
Во-первых, для обеспечения переключения между основным и резервным подами Mattermost используется директива backup:
upstream backend
Во-вторых для обеспечения входа через Keycloak был добавлен следующий location:
location ~ /auth/.* < proxy_pass https://secure-keycloak-mattermost.apps.duke253.ru;
Для отправки логов в ELK в поды добавлялся контейнер с Filebeat.
Push Proxy Service. Этот компонент служит для отправки push-уведомлений на мобильные клиенты Mattermost т.е. выступает в качестве прокси между Mattermost Server с одной стороны и Apple Push Notification Services и Firebase Cloud Messaging Service с другой.
Есть несколько вариантов реализации этой функции — MPNS, HPNS и TPNS. HPNS — Hosted Push Notification Service, предоставляется как высокодоступный сервис обладателям платных редакций. TPNS — Test Push Notification Service, тоже, что и HPNS, но без гарантий работоспособности, можно использовать с Team Edition.
И, наконец, MPNS — реализация Push Proxy для размещения on-premise. Если планируется использовать кастомизированное мобильное приложение Mattermost, как было в нашем случае, то MPNS — это единственный возможный вариант.
Все варианты реализации позволяют регулировать содержимое push-уведомлений: можно посылать полный текст сообщения или лишь уведомлять о новом сообщении с указанием отправителя или без такового.
В платной редакции E20 предусмотрен механизм более безопасной отправки содержимого сообщений — с фактической отправкой через push только id сообщения, получив который мобильный клиент запрашивает содержимое напрямую с сервера Mattermost. Подробнее об этом здесь.
Ещё одной особенностью MPNS является отсутствие поддержки SSL для соединений между Mattermost и MPNS. Если требуется устанавливать защищённое соединение между ними, то можно установить Nginx перед MPNS. Также MPNS не проверяет отправителя сообщения, т.е. отправлять push-уведомления можно, например, с помощью curl. Следует помнить об этом и ограничить возможность подключения к MPNS только со стороны Mattermost Server на уровне Nginx и / или файервола.
Подробнее о Push Proxy можно почитать в документации.
Несколько слов об интеграции Mattermost с различными системами
Поддерживаются различные механизмы интеграции, самым простым из которых являются входящие веб-хуки. С помощью этого механизма можно настроить автоматическую отправку уведомлений из внешних систем в определённый канал Mattermost.
Для создания входящего веб-хука они должны быть разрешены на уровне сервера, и пользователь должен обладать полномочиями роли Team Admin или System Admin. Также возможно разрешить создание интеграций для рядовых пользователей, для это необходимо указать в конфигурационном файле в "ServiceSettings":
"EnableOnlyAdminIntegrations": false
Все пользователи с указанными полномочиями видят все настроенные веб-хуки в рамках одной Team. Сообщение, сгенерированное внешней системой, будет отображено в чате от имени того пользователя, который создал веб-хук, но с пометкой «BOT». В качестве примера можно привести интеграции с Bitbucket и TeamCity.
Таким образом, нам удалось успешно реализовать поставленную задачу, построив систему коммуникации, отвечающую всем поставленным требованиям с использованием только бесплатных редакций ПО.
P.S. В статье описан опыт построения системы в первом полугодии 2021 года. За это время ситуация в части потенциально применимых решений могла существенно измениться. Тем не менее, в статье приведён достаточно актуальный пример решения подобных задач.
- Блог компании Axenix (ex-Accenture)
- Системное администрирование
# Mattermost. Часть 1. Установка и запуск
Создание удобной и функциональной среды для общения участников внутри команды — важная задача в ходе разработки. Для этого компании используют корпоративный мессенджер.
Mattermost — быстрый и удобный корпоративный мессенджер. Он устанавливается напрямую на ваш сервер и хранит все данные — от истории переписки до пересылаемых файлов — в созданной для него базе данных. Администратор Mattermost может полноценно управлять всеми учётными записями: создавать и удалять, открывать доступ к определённым диалогам, ограничивать доступ и т.д.
В первой части нашей инструкции мы расскажем об установке Mattermost на сервер: установим само приложение, создадим для него базу данных и пользователя, под которым приложение будет подключаться к базе, развернём сервер Mattermost и зарегистрируемся в программе. В качестве СУБД будем использовать MySQL, но Mattermost поддерживает работу и с PostgreSQL.
Для начала работы нам понадобится только подготовленный к работе сервер под управлением Ubuntu.
# Подготовка к установке
Начнём установку мессенджера с подготовки базы данных для него. Обновим пакеты apt и установим MySQL:
sudo apt update sudo apt upgrade sudo apt install mysql-server
После завершения установки MySQL запустим встроенный скрипт-настройщик безопасности:
sudo mysql_secure_installation
В ходе работы он предложит задать новый пароль root-пользователя, запретить удалённое подключение root-пользователя к базе, удалить анонимных пользователей и тестовые базы данных, которые могли быть созданы ранее или остаться от предыдущих установок. Рекомендуем согласиться со всеми предложенными действиями.
При первом запуске скрипт также предложит выбрать уровень безопасности задаваемых паролей — рекомендуем внимательно ознакомиться с предложенными уровнями и выбрать тот, с которым вам будет удобнее всего работать.
После завершения работы скрипта зайдём в MySQL, чтобы создать нового пользователя для Mattermost:
sudo mysql
По умолчанию в MySQL выключен режим авторизации, подразумевающий введение пароля, однако при указании sudo в начале командной строки вход root-пользователя будет произведён без пароля.
После входа в консоль MySQL создадим нового пользователя для Mattermost:
create user 'mmuser'@'%' identified by 'mmuser-password';
Запись «@ % » означает localhost — Mattermost и MySQL установлены на одной машине. Если они будут установлены на разных серверах, то вместо % нужно указать IP-адрес, с которого будет производиться подключение.
При задании пароля будьте внимательны — его надёжность будет проверяться в зависимости от выбранного при настройке системы уровня. Проверить заданный уровень надёжности пароля и требования к нему можно командой:
show variables like 'validate_password%'; # Output +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+
В данном случае установлен средний уровень безопасности, требующий длины пароля в 8 символов, с одной цифрой, одной заглавной буквой и одним спецсимволом.
После создания нового пользователя создадим базу данных для него:
create database mattermost
Теперь передадим новому пользователю все права на эту базу:
grant all privileges on mattermost.* to 'mmuser'@'%';
После этого обновим доступные привилегии, и можно будет выходить из MySQL:
flush privileges exit
Подготовительные работы по предварительной настройке сервера окончены, можно переходить к установке Mattermost.
# Установка Mattermost
Устанавливать будем с официального сайта Mattermost. Для этого выберем необходимую версию из списка доступных и скачаем архив с нужной версией на сервер:
wget https://releases.mattermost.com/X.X.X/mattermost-X.X.X-linux-amd64.tar.gz
Здесь нужно заменить x.x.x на номер версии, который хотите установить.
После скачивания архива распакуем его и переместим полученную папку в новую директорию:
sudo tar -xvzf mattermost-X.X.X-linux-amd64.tar.gz sudo mv mattermos /opt
# Подготовка к запуску
Сначала создадим директорию, в которой будут размещаться все данные Mattermost — диалоги, пересылаемые файлы и т.д. Позаботьтесь заранее, чтобы эта директория имела доступ к достаточному объёму дискового пространства:
sudo mkdir /opt/mattermost/data
После этого создадим нового пользователя для работы с Mattermost и передадим ему все права на управление папками:
sudo useradd --system --user-group mattermost sudo chown -R mattermost:mattermost /opt/mattermost sudo chmod -R g+w /opt/mattermost
Когда новый пользователь создан, можно переходить к настройке конфигурационного файла Mattermost. Откроем его в любом текстовом редакторе:
sudo vim /opt/mattermost/config/config.json
Это очень большой текстовый файл, отвечающий за работу сервера Mattermost. Здесь нам нужно изменить всего две строки.
Найдём раздел переменных SqlSettings . В строке DriverName нужно указать используемую СУБД, в нашем случае это будет mysql , а в строке DataSource , отвечающей за подключение к базе данных, укажем следующие параметры:
username:password>@host-name-or-IP>:3306/mattermost?charset=utf8mb4,utf8&writeTimeout=30s"
- username: — имя и пароль mysql-пользователя, созданного для работы с Mattermost.
- :3306 — адрес и порт, по которому доступна база данных. Если вы устанавливаете Mattermost на тот же сервер, на котором создана база данных для него, то адресом будет localhost . Проверить номер порта, который слушает MySQL, можно командой sudo netstat -tulpn .
- mattermost — имя базы данных, созданной для Mattermost.
Сохраняем сделанные изменения и проверяем работу Mattermost. Для этого перейдём в папку, содержащую распакованный архив Mattermost:
cd /opt/mattermost
Запустим исполняемый файл от имени специально созданного для этого пользователя:
sudo -u mattermost ./bin/mattermost
Если всё было сделано правильно, то после старта сервера на экране должно появиться сообщение:
Server is listening on :8065
Сервер запущен и работает! Остановим его ctrl+C и закончим настройку.
# Запуск веб-интерфейса
Создадим системный файл, который позволит нам запускать Mattermost в качестве сервиса:
sudo vim /lib/systemd/system/mattermost.service
В общем случае содержимое файла будет следующим:
[Unit] Description=Mattermost After=network.target After=mysql.service BindsTo=mysql.service [Service] Type=notify ExecStart=/opt/mattermost/bin/mattermost TimeoutStartSec=3600 KillMode=mixed Restart=always RestartSec=10 WorkingDirectory=/opt/mattermost User=mattermost Group=mattermost LimitNOFILE=49152 [Install] WantedBy=mysql.service
Если в качестве СУБД вы используете PostgreSQL, то необходимо во всех соответствующих строчках указать его вместо mysql.service .
Если MySQL и Mattermost установлены на одном сервере, то нужно удалить строки After=mysql.service и BindsTo=mysql.service , а в строке WantedBy указать значение multi-user.target .
После завершения редактирования сохраняем новый файл и добавляем новый сервис в систему:
sudo systemctl daemon-reload
Теперь можно запускать Mattermost:
sudo systemctl start mattermost.service
Ваша версия Mattermost активна и доступна для начала работы. Проверить её работоспособность можно, зайдя в браузере по адресу your_server_ip:8065 . Вы должны увидеть стартовую страницу Mattermost:
Здесь 8065 — стандартный порт для работы Mattermost.
Если вы используете VPS на Джино и не подключаете для него выделенный IP, то создайте перенаправление для порта 8065. В разделе Управление
Перенаправление портов укажите номер порта 8065 и после создания перенаправления в адресной строке браузера указывайте новый номер порта.
О первичной настройке Mattermost — создании новых пользователей, управлении правами доступа и подключении Nginx в качестве обратного прокси — читайте во второй части нашей инструкции.
© Джино, 2003–2022. «Джино» является зарегистрированным товарным знаком.
Лицензия на телематические услуги связи №150549 от 09.03.2017.
Установка и преимущества платформы для обмена сообщениями Mattermost
Mattermost – это мессенджер, предназначенный для совместной работы над проектами. Он был создан как альтернатива другим популярным мессенджерам, например, Slack.
Несмотря на свой обширный функционал, Mattermost обладает не всеми возможностями полноценной системы корпоративного общения. Например, не поддерживает видеосвязь.
В данной статье мы расскажем об особенностях Mattermost и покажем как развернуть его на машине, управляемой ОС Debian 11.
Краткое описание Mattermost
Ключевой особенностью Mattermost является возможность развернуть его в своей локальной сети (on-prem установка). Данный способ установки обеспечивает безопасную работу системы и позволяет администраторам иметь полный контроль над данными пользователей. Также доступна и облачная версия мессенджера.
Кроме возможности on-prem установки, преимуществом Mattermost также является обширный функционал для взаимодействия в команде:
- Личные и групповые чаты.
- Таск-менеджер (в контексте Mattermost он называется Доски).
- Автоматизация рутинных действий с помощью сценариев (например циклическая отправка сообщения группе пользователей через определённый интервал времени).
Благодаря перечисленным выше преимуществам, Mattermost часто используют в качестве сервиса корпоративного общения.
Альтернатива Mattermost
Помимо известных преимуществ, Mattermost обладает и рядом недостатков. Например, по умолчанию он не поддерживает видео и аудиозвонки – функционал, который в ряде случаев упрощает коммуникацию в разы. Чтобы добавить такие возможности, администратор сервера Mattermost должен установить и настроить дополнительный плагин.
Обычно для этого выбирают плагин от Jitsi – сервиса ВКС, работающего на базе технологии WebRTC. В простых случаях это решение работает, однако оно не обеспечит вас полноценной корпоративной видеосвязью. В Jitsi нет многих необходимых возможностей, например:
- Проводить конференции можно только в одном режиме: когда все участники видят и слышат друг друга. Альтернативные режимы, например селекторный, отсутствуют.
- Нет возможности запланировать мероприятие на определённые дату и время.
- Ограниченный функционал управления раскладкой видеоокон.
- Нет поддержки звонков по протоколам SIP/H.323 по умолчанию (требуется установка дополнительного ПО).
- Отсутствует возможность тонкой настройки прав пользователей.
В качестве полноценной системы корпоративной видеосвязи можно рассмотреть TrueConf Server. Он поддерживает обширные возможности:
- Проведение конференций в разных режимах: все на экране, автоселектор, управляемый селектор, видеоурок.
- Настройка регистрации для гостей публичных конференций, защита конференций PIN-кодом.
- Личные и групповые чаты с возможностью отправки файлов, пересылки и форматирования сообщений.
- Звонки по протоколам SIP/H.323, а также подключение к RTSP-трансляциям (других конференций или потоков с IP-камер).
- Интеграция со службами каталогов по протоколу LDAP (Microsoft Active Directory, OpenLDAP и пр.).
- Расширенные возможности для крупных компаний с множеством серверов видеосвязи: единое адресное пространство, резервирование, балансировка нагрузки и т.п.
TrueConf Server предназначен для локальной установки, благодаря чему ваши данные и мероприятия будут защищены от доступа снаружи корпоративной сети. Подробнее об обеспечении безопасности читайте в нашей статье.
Таким образом, выбрав TrueConf Server вы получите надёжную и функциональную систему корпоративных коммуникаций, которая не потребует трудоёмкой установки множества дополнительных модулей.
Установка Mattermost на Debian
Требования к системе
Сервер Mattermost может быть установлен в следующие ОС:
- Ubuntu 18.04+
- Debian 10+
- CentOS 6+
- RedHat Enterprise Linux 7+
- Oracle Linux 6+
Поддерживаются следующие СУБД:
- MySQL 5.7.12, 8.0.12+
- PostgreSQL 11.0+
Требования к вычислительным мощностям сильно зависят от предполагаемой нагрузки. К примеру, серверу, на котором работает до 1 000 активных пользователей, будет достаточно 1 ядра vCPU и 2 гигабайт ОЗУ. В случае если на сервере от 1 до 2 тысяч активных пользователей, то потребуется хотя бы 2 ядра vCPU с 4 гигабайтами ОЗУ.
Процесс установки
Существует несколько способов развернуть сервер Mattermost на своей машине. Мы воспользуемся одним из самых простых и надёжных: с помощью ПО для контейнеризации Docker. Помимо него, нам понадобится инструмент Docker Compose.
Как уже было сказано выше, установку будем производить в ОС Debian 11.
Для того чтобы проверить, установлен ли Docker, в терминале выполните команду:
При необходимости, установите Docker и Docker Compose, как показано в шагах 1 и 2 из другой нашей статьи.
Все команды, приведённые ниже, должны выполняться с помощью программы sudo , либо в режиме суперпользователя (для перехода в этот режим выполните команду su- и введите root-пароль).
- Клонируйте репозиторий Mattermost себе на компьютер и перейдите в директорию с ним:
git clone https : //github.com/mattermost/docker
cp env . example . env
В данном шаблоне уже прописаны все необходимые значения. Однако если вам понадобится изменить какие-либо настройки, то откройте файл .env и поменяйте значение нужной переменной окружения.
Описания переменных окружения можно посмотреть на сайте Mattermost. Эти описания разбиты по разделам, в зависимости от настраиваемых параметров. Также в самом .env файле к каждому блоку с переменными есть комментарий, описывающий назначение блока.
Например, чтобы изменить порт, который прослушивает сервер Mattermost, укажите его в переменной APP_PORT :
Также стоит отметить, что если для обращения к серверу Mattermost вы будете использовать доменное имя – то его обязательно надо записать в переменную DOMAIN .
mkdir - p . / volumes / app / mattermost / < config , data , logs , plugins , client / plugins , bleve - indexes >
Каталог mattermost будет содержать настройки вашего сервера и все его данные.
chown - R 2000 : 2000 . / volumes / app / mattermost
docker compose - f docker - compose . yml - f docker - compose . without - nginx . yml up - d
Запуск с NGINX в качестве прокси:
docker compose - f docker - compose . yml - f docker - compose . nginx . yml up - d
В случае, если вы хотите чтобы ваш сервер Mattermost работал по HTTPS, у вас есть 2 варианта: 1. Настроить HTTPS на стороне сервера Mattermost
2. Настроить HTTPS на стороне прокси-сервера NGINX (при его использовании) У обоих вариантов есть свои плюсы и минусы, подробнее читайте на сайте Mattermost.
В случае, если вы используете прокси NGINX, ваши пользователи должны указывать адрес и порт прокси-сервера соответственно.
Mattermost (Русский)
Состояние перевода: На этой странице представлен перевод статьи Mattermost. Дата последней синхронизации: 6 ноября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Mattermost — это self-hosted альтернатива Slack с открытым исходным кодом. Являясь альтернативой проприетарным SaaS-системам обмена сообщениями, Mattermost собирает все сообщения вашей команды в одном месте, делая их доступными для просмотра и поиска в любом месте.
В этой статье описано, как установить и настроить сервер Mattermost.
Установка
Сервер Mattermost может быть установлен двумя способами:
- С помощью Docker по шагам, описанным в разделе #С помощью Docker;
- С помощью пакета по шагам, описанным в разделе #С помощью пакета.
Клиент для рабочего стола на базе Electron предоставляется пакетом mattermost-desktop .
С помощью Docker
При использовании Docker вам не нужно вручную устанавливать сервер базы данных и настраивать зависимости Mattermost. Так как образ docker поставляется со всеми зависимостями, вам потребуется меньше работы.
Однако недостаток такого подхода в том, что вы не можете выбрать нужный вам бэкенд базы данных или веб-сервер. Можно использовать только то, что предоставляется образами Docker, или же сделать свой собственный образ.
- Установите Docker (в том числе docker-compose ).
- Скачайте исходники:
$ git clone https://github.com/mattermost/mattermost-docker.git
- Отредактируйте файл docker-compose.yml :
- Раскомментируйте строку args: .
- Для редакции Team удалите комментарии в строке: - edition=team .
- Приведите UID/GID в разделе в соответствие с владельцем ваших папок ./volumes/app/mattermost/* .
- Пропишите проброс портов в разделе app (например, между build и restart )
ports: - "127.0.0.1:8065:8000"
- Соберите и запустите контейнер docker:
$ cd mattermost-docker $ docker-compose build $ docker-compose up -d
- Откройте http://localhost:8000/ в вашем браузере.
Обратитесь к официальному руководству, чтобы узнать, как настроить TLS, электронную почту, включить функции Enterprise и использовать несколько серверных узлов с помощью Docker Compose.
На официальной странице Mattermost Docker Hub также представлены некоторые образы Docker. Пожалуйста, обратитесь также к репозиторию Docker-образов Mattermost.
С помощью пакета
Установите пакет mattermost . Разрабатываемая версия доступна в пакете mattermost-git AUR .
- При установке будут созданы пользователь и группа mattermost .
- Настройка выполняется в файле /etc/webapps/mattermost/config.json , где владельцем и группой /etc/webapps/mattermost/ и /etc/webapps/mattermost/config.json является mattermost:mattermost .
- В /var/lib/mattermost/ , которым тоже владеет mattermost:mattermost , можно найти:
- files — папку, где хранятся все пользовательские файлы, размещённые в сообщениях, изображения профилей и команд;
- client — папку, связанную с клиентом webapp, которая содержит файлы, переписываемые webapp во время выполнения, а в подпапке plugins — веб-плагины, установленные через веб-интерфейс;
- plugins — папку, связанную с плагинами (серверная часть).
Настройка базы данных
Для работы Mattermost требуется база данных. Если вы планируете запускать его на той же машине, сначала установите MySQL или PostgreSQL в качестве базы данных.
Следуйте одному из следующих разделов, а затем переходите к разделу #Настройка Mattermost.
MySQL/MariaDB
$ mysql -u root -p
CREATE DATABASE mattermostdb; CREATE USER mmuser IDENTIFIED BY 'mmuser_password'; GRANT ALL ON mattermostdb.* TO mmuser;
PostgreSQL
2. Выберите TCP или UNIX-сокет и перейдите к соответствующему разделу.
Примечание: Когда Mattermost и PostgreSQL находятся на одной машине, предпочтительнее использовать Unix-сокет, так как он быстрее и безопаснее.
TCP-сокет
3. Создайте нового пользователя, подключившись к серверу как пользователь postgres (вам будет предложено ввести пароль для нового пользователя):
$ sudo -u postgres createuser -P mmuser
4. Создайте базу данных Mattermost, принадлежащую пользователю mmuser :
$ sudo -u postgres createdb -O mmuser mattermostdb
6. Проверьте, что всё работает:
$ psql --host=ip_адрес --dbname=mattermostdb --username=mmuser --password
Unix-сокет
3. Создайте нового пользователя, подключившись к серверу как пользователь postgres :
$ sudo -u postgres createuser mattermost
4. Создайте базу данных Mattermost, принадлежащую пользователю mattermost :
$ sudo -u postgres createdb -O mattermost mattermostdb
5. Настройте Unix-сокет, добавив следующую строку в /var/lib/postgres/data/pg_hba.conf :
local mattermostdb mattermost peer
6. Перезапустите службу postgresql.service .
7. Проверьте, что всё работает:
$ sudo -u mattermost psql --dbname=mattermostdb --username=mattermost
Настройка Mattermost
Настройка Mattermost выполняется в файле /etc/webapps/mattermost/config.json . Строки должны быть заключены в кавычки.
Есть две настройки, которые необходимо изменить под вашу базу данных.
Настройка DriverName : mysql для MySQL и postgres для PostgreSQL.
- Для MySQL установите значение mmuser:mmuser_password@unix(/run/mysqld/mysqld.sock)/mattermostdb?charset=utf8mb4,utf8 .
- Для PostgreSQL
- TCP-сокет: postgres://mmuser:mmuser_password@127.0.0.1:5432/mattermostdb?sslmode=disable&connect_timeout=10
- Unix-сокет: postgres:///mattermostdb?host=/run/postgresql ; после postgres: должны стоять 3 слэша; mattermostdb — имя базы данных, а /run/postgresql - каталог, содержащий Unix-сокет.
Примечание: Не забудьте поменять mmuser_password на реальный пароль пользователя.
Начальная настройка Mattermost
- Перейдите к вашей установке Mattermost и создайте команду и пользователя.
- Первый пользователь в системе автоматически получает роль system_admin , которая даёт вам доступ к системной консоли.
- Нажмите на кнопку меню в верхнем левом углу и выберите пункт Системная консоль (System Console).
- Обновите настройки Окружение > SMTP (Environment > SMTP) для настройки отправки почты через SMTP. В приведённом ниже примере предполагается использование AmazonSES.
- Установите SMTP сервер (SMTP Server) на email-smtp.us-east-1.amazonaws.com
- Установите Порт SMTP сервера (SMTP Server Port) на 465
- Установите Включить SMTP аутентификацию (Enable SMTP Authentication) на да (true)
- Установите Имя пользователя SMTP (SMTP Server Username) на имя_пользователя_smtp
- Установите Пароль SMTP Сервера (SMTP Server Password) на пароль_smtp
- Установите Безопасность соединения (Connection Security) на TLS
- Сохраните настройки
- Обновите Настройки сайта > Уведомления (Site configuration > Notifications):
- Установите Включить уведомления по электронной почте (Send Email Notifications) на да (true)
- Установите Отображаемое в уведомлении имя (Notification Display Name) на No-Reply
- Установите Уведомления приходят с адреса (Notification From Address) на mattermost@example.com
- Установите Эл.почта поддержки (Support Email Address) на какой-нибудь реальный адрес, который может принимать входящие письма
- Сохраните настройки
- Обновите настройки Аутентификация > Электронная почта (Authentication > Email), изменив Требовать подтверждение адреса электронной почты (Require Email Verification) на да (true).
- Обновите настройки Окружение > Ведение журнала (Environment > Logging), установив Исходящие журналы в консоль (Log to The Console) на нет (false).
- По желанию измените другие настройки.
- Перезапустите службу mattermost.service .
Плагины
Плагины включены по умолчанию, но требуют доступа к каталогу plugins, который должен быть создан с правильными правами доступа:
$ mkdir /usr/share/webapps/mattermost/client/plugins $ chown mattermost:mattermost /usr/share/webapps/mattermost/client/plugins
Советы и рекомендации
Доверенный HTTPS через обратный веб-прокси
Для безопасного доступа к вашему серверу Mattermost из приложений для Android и iOS, которые не поддерживают самоподписанные TLS-сертификаты, вы можете настроить обратный веб-прокси.
Основными преимуществами прокси являются:
- SSL-терминирование
- Перенаправление с HTTP на HTTPS
- Перенаправление порта 80 на 8065
- Стандартные журналы запросов
Проксирование может быть реализовано на большинстве веб-серверов.
nginx
- Установите и запустите nginx, предпочтительно nginx-mainline .
- Настройте ваше доменное имя (например, mattermost.example.com ) так, чтобы оно указывало на ваш сервер.
- Настройте nginx для проксирования соединений из интернета на сервер Mattermost. Создайте и отредактируйте файл настроек nginx /etc/nginx/sites-available/mattermost .
upstream backend < server 127.0.0.1:8065; keepalive 32; >proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off; server < listen 80; server_name mattermost.example.com; location ~ /api/v[0-9]+/(users/)?websocket$ < proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 50M; 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_buffers 256 16k; proxy_buffer_size 16k; client_body_timeout 60; send_timeout 300; lingering_timeout 5; proxy_connect_timeout 90; proxy_send_timeout 300; proxy_read_timeout 90s; proxy_pass http://backend; >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_buffers 256 16k; proxy_buffer_size 16k; proxy_read_timeout 600s; proxy_cache mattermost_cache; proxy_cache_revalidate on; proxy_cache_min_uses 2; proxy_cache_use_stale timeout; proxy_cache_lock on; proxy_pass http://backend; >>
# mkdir /etc/nginx/sites-enabled # ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
Lighttpd2
Пример конфигурации для lighttpd2-git AUR , чтобы действовать как прокси для Mattermost, предполагая, что у вас есть сертификат в /etc/lighttpd2/certs/lighttpd2.pem .
Смотрите mod_vhost, если вы хотите перенести прокси на виртуальный хост.
/etc/lighttpd2/lighttpd.conf
setup < module_load [ "mod_accesslog", "mod_proxy", "mod_openssl" ]; openssl [ "listen" =>"0.0.0.0:443", "listen" => "[::]:443", "pemfile" => "/etc/lighttpd2/certs/lighttpd2.pem", "options" => ["ALL", "NO_TICKET"], "verify" => true, "verify-any" => true, "verify-depth" => 9 ]; listen "0.0.0.0:80"; listen "[::]:80"; log ["debug" => "", default => "/var/log/lighttpd2/error.log"]; accesslog "/var/log/lighttpd2/access.log"; accesslog.format "%h %V %u %t \"%r\" %>s %b \"%i\" \"%\""; static.exlude_extensions [ ".php", ".pl", ".fcgi", "~", ".inc" ]; > openssl.setenv "client-cert"; keepalive.timeout 360; docroot "/srv/http"; index [ "index.php", "index.html", "index.htm" ]; include "/etc/lighttpd2/mimetypes.conf"; proxy "127.0.0.1:8065";
Тестирование переводов и запросов на слияние
Можно использовать неофициальный скрипт mattermost-prepare-pkgbuild для тестирования переводов и запросов на слияние.
Retrieved from "https://wiki.archlinux.org/index.php?title=Mattermost_(Русский)&oldid=755990"