Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Установка Mattermost на Ubuntu

Сергей Тимошенков
Сергей Тимошенков
Технический писатель
03 ноября 2023 г.
1276
7 минут чтения
Средний рейтинг статьи: 5

Mattermost — это платформа для обмена сообщениями и совместной работы, которую можно установить на собственных серверах или в облаке. Mattermost является альтернативой таким мессенджерам как Slack и RocketChat.

Image6

Источник изображения: mattermost.com

В данной статье мы рассмотрим тарифный план Free, который включает в себя безлимитную историю сообщений и групповые звонки (подробнее о тарифах). Клиенты Mattemost доступны на мобильных платформах (IOS, Android), в десктоп-версиях (Windows, Linux, Mac), также поддерживается браузерная версия. 

Для тарифа Free доступна только Self Hosted версия; далее будет разбираться установка на Ubuntu. Ознакомиться с другими способами установки (в том числе и Docker-образ) можно на официальном сайте.

Технические требования

На 1000 пользователей минимально потребуется 1 CPU, 2GB RAM и  PostgreSQL v11+ (необязательно использовать именно Postgres).

Я буду использовать следующие ресурсы:

  • Postgres 14. Закажем DBaaS с конфигом: 1 CPU 2 GB RAM + 20 GB диска 
  • Mattermost. Закажем сервер с Ubuntu и конфигурацией 2 CPU, 2 GB RAM + 50 GB диска 
  • Необходимо ограничить доступ до БД, один из способов — локальная сеть в Timeweb Cloud

Подготовка окружения

Создание локальной сети

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

710b5066 580b 476f A7a0 D253d7a853ba

Сервис БД

Базу данных закажем как сервис. Сейчас достаточно 1 CPU, 2GB RAM и 20 GB диска, сервис будет размещен в Польше.

8c7fb008 094c 4b9e B12f 23682ed37288

В пункте «4. Приватная сеть» выбрать сеть, созданную выше.

D865a736 21ed 4442 85f5 0d9153887726

После создания сервиса сразу отключаем ползунок «Разрешить доступ по публичному IP» в настройках. База данных по умолчанию — defult_db, пользователь gen_user.

E8a0f5a4 1c61 4ca5 979c C4a03d5ad94b

Сервер для Mattermost

Теперь необходимо создать сервер, на котором будут установлены Mattermost и Nginx. Сервер будет на Ubuntu 22.04 и развернут в Польше:

A284d0b5 046c 4c52 Bacb B4c4141756e8

Конфигурация — 2 CPU, 2 GB RAM и 50 GB диска.

B6b3da0c F814 4e6d A177 A2218549dcd4

Как и с Postgres, в пункте «6. Приватная сеть» нужно выбрать созданную выше сеть.

89a248f3 Edcd 4477 926d 1485df9f74b1

Создаем сервер.

На Дашборде сервера будет предложено предлагается выполнить команду для установки Zabbix, чтобы получать метрики по RAM и диску. Подключимся по SSH и выполним ее:

wget -O - http://zabbix.repo.timeweb.ru/zabbix-install.sh | bash

Домен

Дополнительно нам понадобится домен для получения сертификата TLS. Можно воспользоваться бесплатным техническом доменом в панели Timeweb Cloud в разделе Домены. Я добавлю поддомен на домене twc1.net.

Image16

Cтоит проверить, что домен привязался к серверу, это можно сделать в разделе «Сеть». Если домен не прописан рядом с IP-адресом, можно добавить его через «Настроить обратную зону».

Group 1321314111 (1)

Установка Mattermost

Теперь можно переходить к самой установке. Для установки подключим репозиторий 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
  • SiteUrl сюда необходимо прописать созданный домен с протоколом https (в блоке ServiceSettings). Позже мы подключим SSL-сертификат.

F1cf2147 B268 4beb 929a 62b5c422f28c

  • DriverName — по умолчанию стоит postgres (в блоке SqlSettings).
  • DataSource — указать пользователя, пароль, хост и имя БД в ссылке подключения (в блоке SqlSettings).

2a30f2a4 730e 4675 8889 Fd0a46a9369b

Остальные конфиги не важны для первого запуска, и их можно будет изменить позднее в административной консоли Mattermost.

Запускаем сервис Mattermost:

sudo systemctl start mattermost

Проверим, что ничего не упало и Mattermost поднялся:

sudo systemctl status mattermost.service

F39ae547 C16e 46e9 9758 A57012e2daf2

А также, что он доступен на порту 8065.

Image2

Если сайт не открывается, проверьте настройки фаервола. Также можно обратиться к порту локально с сервера:

curl -v localhost:8065

Дополнительно добавим автозапуск сервиса:

sudo systemctl enable mattermost.service

Nginx

Мы не будем напрямую использовать порт 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.

Firewall

После создания сервера в настройках сети добавим правила для фаервола.

D8f3b694 E8a5 45d1 Be73 A6c7114a96f3

Я ограничил входящие TCP запросы портами 22 для работы с SSH, 80 и 443 для TCP. Для сбора метрик на дашборд сервера необходимо открыть также порт 10050; список IP-адресов, для которых необходимо открывать порт, будет в /etc/zabbix/zabbix_agentd.conf.

Image15

Первый запуск

Теперь Mattermost будет доступен по адресу https://mattermost.twc1.net/.

Image11

Можно создать аккаунт и рабочее пространство сразу из браузерной версии.

Image8

После установки и при первом входе можно наблюдать проблему с коннектом Web-сокетов. 

Image7

Рекомендую проверить конфиги, теперь сделать это можно из System Console.

Image10

 Например, моя ошибка заключалась в URL сервера.

Image9

Из коробки будут доступны звонки, playbooks, магазин с плагинами, аутентификация Gitlab. Также сам продукт имеет отличную документацию.

Заключение

В статье мы развернули бесплатную self-hosted версию Mattermost на серверах Timeweb Cloud с вынесенной базой данных, доступной только из внутренней сети. Обратите внимание, что ресурсы для серверов были взяты под абстрактную задачу и их может потребоваться больше, не стоит пропускать нагрузочное тестирование :) В качестве следующего шаг рекомендую подключить хранилище S3, которое также доступно на timeweb.cloud.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
03 ноября 2023 г.
1276
7 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев