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 Edition | Open Source (MIT) | Безлимит | Нет | Только пароль | Сообщество |
| Entry (Free Commercial) | Бесплатный коммерческий | 10 000 сообщений на канал | Нет | Только пароль | Сообщество |
| Professional | Платная подписка | Безлимит | Нет | Стандартный SSO и синхронизация пользователей LDAP | 12/5 по будням в рабочее время |
| Enterprise | Платная подписка | Безлимит | Да (кластер) | LDAP (с синхронизацией групп) / SAML | 24/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Если версия подходит, идём дальше. Для 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-reloadMattermost установлен и готов к настройке через конфигурационный файл. Сохраним конфигурацию по умолчанию в отдельный файл, чтобы была возможность откатить изменения:
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 для нашего 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, мониторинг и др.), а также расширить функциональность сервиса с помощью плагинов.