Mattermost — это платформа для обмена сообщениями и совместной работы, которую можно установить на собственных серверах или в облаке. Mattermost является альтернативой таким мессенджерам как Slack и RocketChat.
Источник изображения: mattermost.com
В данной статье мы рассмотрим тарифный план Free, который включает в себя безлимитную историю сообщений и групповые звонки (подробнее о тарифах). Клиенты Mattemost доступны на мобильных платформах (IOS, Android), в десктоп-версиях (Windows, Linux, Mac), также поддерживается браузерная версия.
Для тарифа Free доступна только Self Hosted версия; далее будет разбираться установка на Ubuntu. Ознакомиться с другими способами установки (в том числе и Docker-образ) можно на официальном сайте.
На 1000 пользователей минимально потребуется 1 CPU, 2GB RAM и PostgreSQL v11+ (необязательно использовать именно Postgres).
Я буду использовать следующие ресурсы:
Ограничить доступ к базе данных можно через firewall, но по задумке все сервисы будут находиться в одной сети. Важно! Для работы в одной сети сервисы должны находиться в одном регионе.
Базу данных закажем как сервис. Сейчас достаточно 1 CPU, 2GB RAM и 20 GB диска, сервис будет размещен в Польше.
В пункте «4. Приватная сеть» выбрать сеть, созданную выше.
После создания сервиса сразу отключаем ползунок «Разрешить доступ по публичному IP» в настройках. База данных по умолчанию — defult_db
, пользователь gen_user
.
Теперь необходимо создать сервер, на котором будут установлены Mattermost и Nginx. Сервер будет на Ubuntu 22.04 и развернут в Польше:
Конфигурация — 2 CPU, 2 GB RAM и 50 GB диска.
Как и с Postgres, в пункте «6. Приватная сеть» нужно выбрать созданную выше сеть.
Создаем сервер.
На Дашборде сервера будет предложено предлагается выполнить команду для установки Zabbix, чтобы получать метрики по RAM и диску. Подключимся по SSH и выполним ее:
wget -O - http://zabbix.repo.timeweb.ru/zabbix-install.sh | bash
Дополнительно нам понадобится домен для получения сертификата TLS. Можно воспользоваться бесплатным техническом доменом в панели Timeweb Cloud в разделе Домены. Я добавлю поддомен на домене twc1.net.
Cтоит проверить, что домен привязался к серверу, это можно сделать в разделе «Сеть». Если домен не прописан рядом с IP-адресом, можно добавить его через «Настроить обратную зону».
Теперь можно переходить к самой установке. Для установки подключим репозиторий deb.packages.mattermost.com/repo-setup.sh
.
curl -o- https://deb.packages.mattermost.com/repo-setup.sh | sudo bash -s mattermost
Здесь в sudo bash -s mattermost
передается аргумент mattermost
для добавления репозитория только Mattermost. Аргументом по умолчанию в данном скрипте является all
, тогда будут также добавлены репозитории Ngnix, PostgreSQL и Certbot.
Установим сервис. Он будет установлен по пути /opt/mattermost
. Пользователь mattermost
и группа mattermost
будут созданы автоматически.
sudo apt update
sudo apt install mattermost -y
После установки понадобится создать config.json
с необходимыми правами (он создается на основе config.defaults.json
). Чтение и запись в файл будут доступны только для пользователя владельца (в нашем случае это mattermost
).
sudo install -C -m 600 -o mattermost -g mattermost /opt/mattermost/config/config.defaults.json /opt/mattermost/config/config.json
В конфиге необходимо заполнить параметры:
sudo nano /opt/mattermost/config/config.json
ServiceSettings
). Позже мы подключим SSL-сертификат.SqlSettings
).SqlSettings
).Остальные конфиги не важны для первого запуска, и их можно будет изменить позднее в административной консоли Mattermost.
Запускаем сервис Mattermost:
sudo systemctl start mattermost
Проверим, что ничего не упало и Mattermost поднялся:
sudo systemctl status mattermost.service
А также, что он доступен на порту 8065.
Если сайт не открывается, проверьте настройки фаервола. Также можно обратиться к порту локально с сервера:
curl -v localhost:8065
Дополнительно добавим автозапуск сервиса:
sudo systemctl enable mattermost.service
Мы не будем напрямую использовать порт 8065 — он будет позже закрыт фаерволом. Для проксирования запросов установим Nginx.
sudo apt install nginx
Теперь добавим конфигурацию:
sudo nano /etc/nginx/sites-available/mattermost
В строке server_name
необходимо указать свой домен, в нашем случае mattermost.twc1.net.
Обратите внимание, что проксируется как HTTP, так и websocket-протоколы.
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.twc1.net;
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_http_version 1.1;
proxy_pass http://backend;
}
}
Добавим линк конфигурационного файла в sites-enabled
:
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
Уберем дефолтный конфиг:
sudo rm -f /etc/nginx/sites-enabled/default
Делаем рестарт сервиса Nginx:
sudo service nginx restart
Теперь выпустим сертификат от Let’s Encrypt для домена через certbot
:
sudo apt install python3-certbot-nginx && certbot
Certbot попросит указать почту, домен и после добавит сертификат для домена.
После установки сертификата certbot
допишет конфигурацию nginx mattermost. Будет добавлена директива listen
для обработки запросов с 443 порта, директивы с ключами и конфигами для SSL, а также редирект с HTTP на HTTPS.
После создания сервера в настройках сети добавим правила для фаервола.
Я ограничил входящие TCP запросы портами 22 для работы с SSH, 80 и 443 для TCP. Для сбора метрик на дашборд сервера необходимо открыть также порт 10050; список IP-адресов, для которых необходимо открывать порт, будет в /etc/zabbix/zabbix_agentd.conf
.
Теперь Mattermost будет доступен по адресу https://mattermost.twc1.net/.
Можно создать аккаунт и рабочее пространство сразу из браузерной версии.
После установки и при первом входе можно наблюдать проблему с коннектом Web-сокетов.
Рекомендую проверить конфиги, теперь сделать это можно из System Console.
Например, моя ошибка заключалась в URL сервера.
Из коробки будут доступны звонки, playbooks, магазин с плагинами, аутентификация Gitlab. Также сам продукт имеет отличную документацию.
В статье мы развернули бесплатную self-hosted версию Mattermost на серверах Timeweb Cloud с вынесенной базой данных, доступной только из внутренней сети. Обратите внимание, что ресурсы для серверов были взяты под абстрактную задачу и их может потребоваться больше, не стоит пропускать нагрузочное тестирование :) В качестве следующего шаг рекомендую подключить хранилище S3, которое также доступно на timeweb.cloud.