Mattermost на Ubuntu 24.04: пошаговая установка
Slack и Microsoft Teams удобны, но платить за место в облаке чужого вендора и зависеть от его политики доступа для российской компании — сомнительное удовольствие. Mattermost решает ту же задачу — каналы, треды, звонки, интеграции — но крутится на вашем сервере, а данные не покидают периметр. Ниже — рабочая установка на чистой Ubuntu 24.04: PostgreSQL, сам сервер Mattermost под systemd, Nginx как reverse proxy и SSL-сертификат.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Требования и подготовка сервера
Mattermost Team Edition (бесплатная, open-source) не требует мощного железа для команды до 50-100 человек. Ориентир для старта:
| Ресурс | Минимум | Комфортно |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 2 ГБ | 4-8 ГБ |
| Диск | 20 ГБ SSD | 40+ ГБ SSD |
| ОС | Ubuntu 24.04 LTS | Ubuntu 24.04 LTS |
Точные цифры зависят от числа активных пользователей и включённых ли звонков/файлового хранилища — это ориентир, не гарантия.
Понадобится домен, указывающий на IP сервера (A-запись), и открытые порты 80/443. Обновите систему и поставьте базовые пакеты:
apt update && apt upgrade -y
apt install -y curl wget gnupg2 ca-certificates
Дальше всё выполняется от root или через sudo.
Установка и настройка PostgreSQL
Mattermost поддерживает PostgreSQL и MySQL, но PostgreSQL — рекомендуемый и наиболее протестированный вариант. Ставим из стандартного репозитория Ubuntu:
apt install -y postgresql postgresql-contrib
systemctl enable --now postgresql
Создаём отдельного пользователя и базу для Mattermost — не используйте postgres напрямую в проде:
sudo -u postgres psql -c "CREATE USER mmuser WITH PASSWORD 'замените_на_свой_пароль';"
sudo -u postgres psql -c "CREATE DATABASE mattermost OWNER mmuser;"
Пароль сгенерируйте случайный (openssl rand -base64 24) и сохраните — он понадобится в конфиге сервера. По умолчанию PostgreSQL слушает только localhost, что нас устраивает — сервер Mattermost и база будут жить на одной машине, отдельного сетевого доступа не нужно.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Mattermost Server
Официальный способ — скачать бинарный архив с сайта Mattermost (APT-репозитория для community-редакции нет). Узнайте актуальную версию на странице релизов (https://mattermost.com/deploy/) и подставьте её вместо <VERSION>:
cd /tmp
wget https://releases.mattermost.com/<VERSION>/mattermost-<VERSION>-linux-amd64.tar.gz
tar -xzf mattermost-<VERSION>-linux-amd64.tar.gz
mv mattermost /opt
Создаём системного пользователя и каталог для данных (загруженные файлы, логи, плагины):
useradd --system --user-group mattermost
mkdir -p /opt/mattermost/data
chown -R mattermost:mattermost /opt/mattermost
chmod -R g+w /opt/mattermost
Правим основной конфиг /opt/mattermost/config/config.json — минимум нужно поменять SqlSettings.DriveName и DataSource, а также адрес сервиса и внешний домен:
nano /opt/mattermost/config/config.json
Ключевые поля:
{
"ServiceSettings": {
"SiteURL": "https://mm.example.com",
"ListenAddress": ":8065"
},
"SqlSettings": {
"DriveName": "postgres",
"DataSource": "postgres://mmuser:замените_на_свой_пароль@localhost:5432/mattermost?sslmode=disable&connect_timeout=10"
}
}
SiteURL — обязательно ваш реальный домен по HTTPS, иначе будут проблемы с вебсокетами, куками и мобильными клиентами. ListenAddress оставляем :8065 — этот порт наружу не открываем, за него отвечает Nginx.
Настройка systemd и запуск сервиса
Создайте unit-файл /etc/systemd/system/mattermost.service:
[Unit]
Description=Mattermost
After=network.target postgresql.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=multi-user.target
Запускаем и проверяем:
systemctl daemon-reload
systemctl enable --now mattermost
systemctl status mattermost
Если сервис не стартует — первым делом смотрите логи:
journalctl -u mattermost -n 100 --no-pager
Частые причины на этом этапе: неверный пароль в DataSource, PostgreSQL ещё не поднялся к моменту старта (тогда помогает After=postgresql.service, который уже прописан выше), либо права на /opt/mattermost/data выставлены не на пользователя mattermost.
Проверить, что сервер отвечает локально, можно так:
curl -I http://localhost:8065
Ожидаем HTTP/1.1 200 OK или редирект — если получаете Connection refused, сервис ещё не поднялся или упал, смотрите логи выше.
Nginx как reverse proxy и SSL
Ставим Nginx, если его ещё нет, и certbot для Let's Encrypt:
apt install -y nginx certbot python3-certbot-nginx
Конфиг /etc/nginx/sites-available/mattermost:
upstream mattermost_backend {
server 127.0.0.1:8065;
keepalive 32;
}
server {
listen 80;
server_name mm.example.com;
location / {
proxy_pass http://mattermost_backend;
proxy_set_header Host $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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 100M;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
Заголовки Upgrade/Connection "upgrade" критичны — без них не заработают вебсокеты, а значит сообщения не будут приходить в реальном времени, только по обновлению страницы. client_max_body_size увеличен, чтобы можно было загружать файлы крупнее стандартного 1 МБ Nginx.
Активируем конфиг и получаем сертификат:
ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d mm.example.com
Certbot сам допишет блок listen 443 ssl и настроит редирект с 80 на 443, если согласиться на предложенный вариант. Подробнее о том, как устроен Nginx как reverse proxy и на что обращать внимание при отладке, — в статье Nginx как reverse proxy на Ubuntu 24.04. Продление сертификата certbot настраивает автоматически через systemd-таймер, проверить можно командой certbot renew --dry-run.
Firewall и базовая защита
Открываем только необходимое — SSH, HTTP и HTTPS, порт 8065 наружу не пускаем вообще:
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable
ufw status verbose
Проверьте, что порт 8065 действительно недоступен снаружи (с другой машины):
curl -I http://ваш-ip:8065 --max-time 5
Должен быть таймаут или отказ соединения — трафик к Mattermost обязан идти только через Nginx с TLS. Подробный разбор настройки UFW и типовых ошибок — в статье UFW на Ubuntu 24.04.
Дополнительно стоит:
- Отключить регистрацию открытым инвайтом в системной консоли, если команда закрытая (
System Console → Authentication). - Настроить регулярный бэкап базы PostgreSQL и каталога
/opt/mattermost/data(там хранятся загруженные файлы) — например, через BorgBackup. - Включить fail2ban для SSH, если это ещё не сделано на сервере в принципе.
Первый запуск и настройка команды
Откройте https://mm.example.com — первый зарегистрированный пользователь автоматически становится системным администратором. После регистрации:
- Создайте первую команду (Team) — рабочее пространство для вашей компании.
- В
System Console → Site Configuration → Notificationsнастройте SMTP для email-уведомлений — без него пользователи не получат приглашения и оповещения о новых сообщениях. - В
System Console → Environment → File Storageможно переключить хранение файлов с локального диска на S3-совместимое хранилище — полезно, если сервер небольшой, а вложений будет много. - Отключите неиспользуемые функции (например, встроенные звонки, если пользуетесь другим сервисом для видеосвязи) — это снижает нагрузку и поверхность атаки.
Для продакшена стоит сразу настроить домен и почтовый сервер для уведомлений — если DNS ещё не настроен, см. настройку домена и DNS на Ubuntu 24.04.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли поставить Mattermost через Docker вместо бинарника?
Да, у Mattermost есть официальный docker-compose-репозиторий (mattermost/docker), это законный альтернативный путь. Бинарная установка описана здесь, потому что она даёт больше прозрачности в управлении и проще для первого знакомства с системой — вы явно видите, что и куда пишет процесс.
Хватит ли Team Edition или нужна Enterprise?
Team Edition (community-редакция, бесплатная) закрывает базовые каналы, треды, интеграции и вебхуки — для большинства небольших и средних команд этого достаточно. Enterprise добавляет SSO/SAML, AD/LDAP, продвинутый комплаенс и поддержку от вендора — платно.
Почему после установки не приходят email-уведомления?
Почти всегда причина — не настроен SMTP в System Console → Notifications → Email. Mattermost сам письма не рассылает, ему нужен внешний почтовый сервер или сервис вроде SendGrid/Mailgun.
Как обновить Mattermost на новую версию?
Останавливаете сервис, делаете бэкап базы и каталога data, скачиваете новый архив, заменяете содержимое /opt/mattermost (кроме config и data), запускаете снова — сервер сам прогонит миграции базы при старте. Перед мажорным обновлением обязательно прочитайте changelog — иногда меняется минимально поддерживаемая версия PostgreSQL.
Нужен ли отдельный сервер под PostgreSQL?
Для команды до сотни человек — нет, база спокойно живёт на одной машине с самим Mattermost. Выносить её на отдельный сервер имеет смысл при росте нагрузки или если у вас уже есть общий PostgreSQL-кластер для нескольких сервисов.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →