Тариф успешно добавлен в корзину
В корзину
url image

Как установить и настроить корпоративный мессенджер Mattermost на Ubuntu 24

Mattermost — это корпоративная платформа для обмена сообщениями и совместной работы, ориентированная на безопасность и конфиденциальность. Платформа служит «open-source» (с открытым исходным кодом) аналогом Slack, который можно развернуть на собственных серверах компании (on-premise) для полного контроля над данными в своём инфраструктурном контуре.

Далее разберёмся с редакциями, подготовим сервер, по очереди настроим PostgreSQL, сам Mattermost и Nginx с бесплатным Let's Encrypt HTTPS-сертификатом, а затем запустим платформу и зайдём в неё через браузер.

Требования и подготовка

Для начала стоит определиться с редакцией mattermost. Основных редакций две: Team Edition и Enterprise Edition. Редакция Enterprise Edition включает в себя 4 основных плана: Entry, Professional, Enterprise и Enterprise Advanced. Конкретный план выбирается при покупке лицензии.

Отметим, что исполняемые файлы у четырёх планов Enterprise Edition одни и те же, но по умолчанию mattermost запускается в Entry Edition. Для активации необходимо загрузить файл лицензии через настройки в графическом интерфейсе запущенного сервиса. У Team Edition план один, лицензия для него не нужна.

Ниже приведём основные различия между планами, за подробным списком вы можете обратиться к официальной документации (сайт может быть недоступен из РФ).

Сравнение редакций Mattermost 

РедакцияЛицензияИстория сообщенийВысокая доступностьРасширенная аутентификацияПоддержка
Team EditionOpen Source (MIT)БезлимитНетТолько парольСообщество
Entry (Free Commercial)Бесплатный коммерческий10 000 сообщений на каналНетТолько парольСообщество
ProfessionalПлатная подпискаБезлимитНетСтандартный SSO и синхронизация пользователей LDAP12/5 по будням в рабочее время
EnterpriseПлатная подпискаБезлимитДа (кластер)LDAP (с синхронизацией групп) / SAML24/7 коммерческая

Существуют различные способы установки mattermost (развёртывание в контейнерном окружении с помощью Docker, установка Debian пакета из репозиториев), но мы выберем способ ручной установки готовой бинарной сборки для большей гибкости и полного контроля над процессом.

Установку и настройку будем производить на сервере с Ubuntu 24.04.

В официальной документации приведены следующие требования к серверу, на котором будет работать mattermost:

  • 1 vCPU/cores, 2 GB RAM для инсталляций до 1000 пользователей;

  • 2 vCPUs/cores, 4 GB RAM, если пользователей будет от 1000 до 2000.

На сервере нам понадобится установить и настроить следующие компоненты:

  • Mattermost — сам мессенджер;

  • PostgreSQL — база данных;

  • Nginx в качестве reverse proxy с поддержкой HTTPS.

Установка и настройка

Подключимся к серверу по ssh пользователем root:

ssh root@{IP_адрес_сервера}

Обновим пакеты:

apt update && apt upgrade -y

И приступим к установке компонентов, начнём с базы данных.

PostgreSQL

Начиная с версии 11, Mattermost официально объявил поддержку MySQL устаревшей (статус deprecated). Разработчики больше не рекомендуют использовать эту СУБД и планируют полностью отказаться от неё в будущих релизах. Подробнее об этом можно почитать в официальной документации Поэтому в статье мы остановимся на надёжном и рекомендуемом варианте — PostgreSQL.

Для последней на текущий момент версии mattermost будет достаточно любой версии PostgreSQL выше 14.0 (проверить актуальные требования можно в официальной документации). Установим базу данных из репозиториев Ubuntu: 

apt install postgresql -y

Затем удостоверимся, что версия удовлетворяет требованиям с помощью команды:

psql -V
Проверка версии PostgreSQL

Если версия подходит, идём дальше. Для Ubuntu 24.04 проблем не будет — из репозиториев установится актуальная версия 16. Если что-то пошло не так, всегда есть вариант установить PostgreSQL из официальных репозиториев разработчиков или собрать из исходников.

Сгенерируем уникальный сложный пароль для пользователя в СУБД:

tr -dc 'A-Za-z0-9._-' < /dev/urandom | head -c 30; echo

В качестве альтернативы можно воспользоваться специальными утилитами — pwgen, gpg или diceware. Но они требуют отдельной установки. 

Теперь подключаемся к PostgreSQL:

sudo -u postgres psql

Создаём базу данных для mattermost:

CREATE DATABASE mattermost;

А также — пользователя, под которым mattermost будет подключаться к базе. Это стандартная практика безопасности, необходимая для того, чтобы точечно настроить лишь те права, которые требуются для полноценного функционирования сервиса, не более того:

CREATE USER mmuser WITH PASSWORD 'mattermost-password';

Вместо 'mattermost-password' используем пароль, сгенерированный выше.

И даём пользователю mmuser все необходимые права на базу mattermost:

GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
GRANT ALL ON DATABASE mattermost TO mmuser;
ALTER DATABASE mattermost OWNER TO mmuser;
GRANT USAGE, CREATE ON SCHEMA PUBLIC TO mmuser;

Выходим из psql:

\q

Далее проверяем, что можем подключиться пользователем mmuser к БД mattermost:

psql -h 127.0.0.1 -U mmuser -d mattermost

Вводим указанный при создании пользователя пароль и проверяем, что у нас действительно есть доступ в консоль управления PostgreSQL:

Подключение к БД

Mattermost

Загружаем на сервер последнюю доступную версию mattermost выбранной редакции с официального сайта с релизами, в нашем случае Team Edition v 11.6.1:

wget https://releases.mattermost.com/11.6.1/mattermost-team-11.6.1-linux-amd64.tar.gz

Для Enterprise Edition все дальнейшие шаги будут идентичны, изменится лишь ссылка загрузки:

wget https://releases.mattermost.com/11.6.1/mattermost-enterprise-11.6.1-linux-amd64.tar.gz

Важно: загрузка с официального сайта может быть ограничена в РФ.

Извлекаем данные из архива:

tar -xvzf mattermost*.gz

И переносим распакованные файлы в `/opt`:

mv mattermost /opt

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

mkdir /opt/mattermost/data

Создадим пользователя ОС с одноименной группой. Mattermost будет запускаться и работать только под этим пользователем с ограниченным набором прав в операционной системе. Таким образом, у него будет доступ только к файлам сервиса, без возможности осуществить какие-либо деструктивные действия с самим сервером:

useradd --system --user-group mattermost

Дадим ему права на работу с файлами внутри директории нашей инсталляции mattermost:

chown -R mattermost:mattermost /opt/mattermost && chmod -R g+w /opt/mattermost

Управлять сервером Mattermost будем через systemd (подробнее об управлении службами читайте в нашей статье).

Создадим unit-файл:

tee /lib/systemd/system/mattermost.service <<EOF
[Unit]
Description=Mattermost
After=network.target

[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=multi-user.target
EOF

И подгрузим его в systemd:

systemctl daemon-reload

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

cp /opt/mattermost/config/config.json /opt/mattermost/config/config.defaults.json

Открываем файл `/opt/mattermost/config/config.json` в текстовом редакторе и ищем там следующие значения в двух разделах — ServiceSettings и SqlSettings.

Раздел "ServiceSettings":

  • в значение "SiteURL" необходимо вписать доменное имя для вашей инсталляции mattermost с указанием протокола (например: "https://mattermost.mydomain.com");
  • значение "ListenAddress" заменить на "127.0.0.1:8065", чтобы mattermost был доступен только изнутри сервера. Доступ снаружи мы настроим далее с помощью nginx.

Раздел "SqlSettings":

  • "DriverName" должен иметь значение "postgres";
  • в значение "DataSource" прописываем: `"postgres://mmuser:{пароль}@localhost/mattermost?sslmode=disable\u0026connect_timeout=10\u0026binary_parameters=yes"`. 

Вместо "{пароль}" вписываем наш пароль к пользователю СУБД mmuser, заданный в разделе настройки PostgreSQL.

Запускаем сервис с помощью systemd:

systemctl start mattermost

Проверяем прямо в консоли сервера, что mattermost запущен и работает:

curl -I http://127.0.0.1:8065

Если в ответе видим код ответа 200 OK — mattermost активен и отвечает на заданном порту:

Код ответа сервера

Настройка nginx в качестве https reverse proxy

Устанавливаем nginx с помощью пакетного менеджера:

apt install nginx

Вводим в адресной строке браузера IP нашего сервера. Там мы должны увидеть приветственную страницу nginx:

Приветственная страница nginx

Открываем в любом текстовом редакторе конфигурационный файл nginx для нашего mattermost:

nano /etc/nginx/sites-available/mattermost.conf

И вставляем туда следующий набор параметров (рекомендуемых официальной документацией):

upstream backend {
    server 127.0.0.1:8065;
    keepalive 32;
}

server {
    listen 80 default_server;
    server_name MATTERMOST_DOMAIN;

    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 60s;
        send_timeout 300s;
        lingering_timeout 5s;
        proxy_connect_timeout 90s;
        proxy_send_timeout 300s;
        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_http_version 1.1;
        proxy_pass http://backend;
    }
}

Заменяем MATTERMOST_DOMAIN на свой домен (указывающий на адрес сервера) и сохраняем файл. 

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

ln -s /etc/nginx/sites-available/mattermost.conf /etc/nginx/sites-enabled/mattermost.conf

И попутно удалим настройки по умолчанию, чтобы Nginx точно знал, какой конфиг использовать для вашего сайта:

rm /etc/nginx/sites-enabled/default

Проверяем конфигурационные файлы на корректность:

nginx -t && service nginx reload

Если всё в порядке и в консоли нет ошибок, веб-сервис успешно загрузит новые параметры. Проверим, что nginx отдаёт нам код главной страницы mattermost, а не стандартное приветствие "Welcome to nginx!":

curl http://localhost

И здесь же настроим Lets Encrypt сертификат для нашего домена, чтобы всё взаимодействие с mattermost по сети происходило по защищенному шифрованием каналу. Установим необходимый инструментарий с помощью пакетного менеджера:

apt install -y certbot python3-certbot-nginx

Выпустим сертификат командой:

certbot --nginx -d {домен} --non-interactive --agree-tos -m {email_администратора}

Не забудьте подставить свои значения домена и email вместо {домен} и {email_администратора} соответственно.

Если всё сделано верно, в результате мы увидим в консоли:

Successfully deployed certificate for mattermost.example.com to /etc/nginx/sites-enabled/mattermost.conf

Можно ещё раз проверить, что mattermost доступен, но теперь по https:

curl https://{домен}

Наконец мы можем добавить опции, рекомендованные официальной документацией для https-конфигураций. Приведём mattermost.conf целиком:

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 {
    server_name MATTERMOST_DOMAIN;

    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 60s;
        send_timeout 300s;
        lingering_timeout 5s;
        proxy_connect_timeout 90s;
        proxy_send_timeout 300s;
        proxy_read_timeout 90s;
        proxy_http_version 1.1;
        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_http_version 1.1;
        proxy_pass http://backend;
    }

    listen 443 ssl http2; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/MATTERMOST_DOMAIN/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/MATTERMOST_DOMAIN/privkey.pem; # managed by Certbot
    # include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    ssl_session_timeout 1d;

    # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
    ssl_protocols TLSv1.2 TLSv1.3;

    # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
    # prevent replay attacks.
    #
    # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
    ssl_early_data on;

    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
    # HSTS (ngx_http_headers_module is required) (15768000 seconds = six months)
    add_header Strict-Transport-Security max-age=15768000;
    # OCSP Stapling ---
    # fetch OCSP records from URL in ssl_certificate and cache them
    ssl_stapling on;
    ssl_stapling_verify on;
}

server {
    if ($host = MATTERMOST_DOMAIN) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80 default_server;
    server_name MATTERMOST_DOMAIN;
    return 404; # managed by Certbot

}

Также заменяем MATTERMOST_DOMAIN на свой домен, сохраняем файл и перечитаем конфигурационные файлы веб-сервера:

nginx -t && service nginx reload

Если на этом этапе не возникло ошибок — настройка успешно завершена.

Дополнительно проверим, что автообновление сертификата настроено.

Команда для тестового запуска обновления:

certbot renew --dry-run

Запуск должен пройти без ошибок и показать следующее:

Congratulations, all simulated renewals succeeded

Первый запуск и вход в систему

Теперь мы можем проверить работу mattermost из браузера. Переходим по настроенному адресу (в нашем случае `https://mattermost.fvds.ru`)

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

При первом входе mattermost предложит создать учётную запись (она автоматически получит статус администратора), задать имя организации и скопировать ссылку-приглашение для других пользователей:

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

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

Подсказки Маттермост

Больше инструкций по использованию — в официальной документации: https://docs.mattermost.com/

Помимо веб-версии (доступной через браузер), существуют клиенты под различные операционные системы: 

  • десктопные клиенты доступны в официальном репозитории на гитхабе, в разделе релизов: https://github.com/mattermost/desktop/releases
  • мобильные клиенты можно найти в AppStore / Google Play, либо загрузить из репозитория: https://github.com/mattermost/mattermost-mobile/releases

Для повышения безопасности рекомендуется настроить двухфакторную аутентификацию. Это можно сделать в разделе Безопасность настроек профиля — нажмите на свой аватар в правом верхнем углу.

 

В статье мы рассказали, как запустить и настроить mattermost на собственном сервере, что даёт полный контроль над коммуникациями и гарантию конфиденциальности данных.
Далее  вы можете изучить возможности интеграций в официальной документации, создать веб-хуки и ботов для связи mattermost с внешними сервисами (Jira, Gitlab, мониторинг и др.), а также расширить функциональность сервиса с помощью плагинов.

Этот материал был полезен?

Скидка новым клиентам
Закажите сервер сегодня и получите скидку на первый месяц аренды!
Наш сайт использует cookies Вы можете отключить их в настройках браузера, но это может ограничить функционал. Оставаясь на сайте, вы соглашаетесь с использованием cookies.