MAATRIX / Блог / Как установить и настроить Mattermost на VPS

Как установить и настроить Mattermost на VPS

MAATRIX

Slack и Discord удобны, но для рабочей переписки команды это означает, что архив сообщений, файлы и метаданные о том, кто с кем общается, лежат на чужих серверах — и однажды могут стать недоступны из-за санкций, блокировки аккаунта или просто смены тарифа. Mattermost закрывает этот вопрос: это открытый корпоративный мессенджер с интерфейсом и логикой каналов почти один в один как в Slack, но который вы разворачиваете на собственном VPS и полностью контролируете. Ниже — рабочая установка на Ubuntu 24.04 без Docker, с PostgreSQL, Nginx и Let's Encrypt, плюс нюансы, на которых обычно спотыкаются.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что нужно перед установкой

Mattermost Team Edition — бесплатная версия с неограниченным числом пользователей, каналов и команд (workspace в терминологии Mattermost), без SSO/LDAP и части enterprise-фич, но для рабочего чата команды из 5–200 человек её достаточно с запасом. Официальные системные требования скромные, но на практике комфортно работает от:

  • 2 vCPU, 4 ГБ RAM — для команды до ~50 активных пользователей;
  • 4 vCPU, 8 ГБ RAM — если планируете звонки/скринкаст-плагины и активную загрузку файлов;
  • 40+ ГБ диска — под систему, БД и файлы вложений (растёт быстро, если люди шлют скриншоты и видео).

Понадобится:

  • домен или поддомен (chat.example.com), указывающий A-записью на IP сервера;
  • Ubuntu 22.04/24.04 с правами sudo;
  • открытые порты 80 и 443 наружу (сам Mattermost слушает 8065 только локально, наружу его не выставляем — за это отвечает Nginx).

Проверьте DNS перед стартом:

dig +short chat.example.com

Если возвращается IP вашего сервера — можно ставить сертификат сразу после установки Mattermost, не дожидаясь распространения DNS. Если своего домена ещё нет, порядок настройки описан в статье про настройку домена и DNS с нуля — принцип для Ubuntu тот же.

Ставим и настраиваем PostgreSQL

Mattermost поддерживает PostgreSQL и MySQL, но в 2026 году официально рекомендован именно PostgreSQL — MySQL считается legacy-опцией. Если у вас ещё нет PostgreSQL на сервере, разверните его по нашей пошаговой установке PostgreSQL на Ubuntu; дальше — специфика под Mattermost.

Создаём отдельную базу и пользователя:

sudo -u postgres psql <<EOF
CREATE DATABASE mattermost;
CREATE USER mmuser WITH PASSWORD 'СЛОЖНЫЙ_ПАРОЛЬ_СЮДА';
GRANT ALL PRIVILEGES ON DATABASE mattermost TO mmuser;
ALTER DATABASE mattermost OWNER TO mmuser;
EOF

Если PostgreSQL и Mattermost стоят на одном сервере (типичный случай для команды до сотни человек), проще всего оставить подключение по localhost через pg_hba.conf с методом scram-sha-256 — так и оставляем по умолчанию, ничего дополнительно открывать наружу не нужно. Если база на отдельном сервере — придётся открыть 5432 и настроить pg_hba.conf под IP сервера с Mattermost, но для старта это избыточно.

Пароль пользователя mmuser — генерируйте длинный и случайный, он попадёт в конфиг Mattermost открытым текстом:

openssl rand -base64 24

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Устанавливаем Mattermost Server

Официальный способ — скачать tar.gz с бинарником и запустить его через systemd, без Docker (хотя Docker-вариант тоже существует, для одиночного сервера бинарник проще в диагностике и апдейтах). Версию проверяйте на странице релизов перед установкой — команда ниже указывает конкретную для примера, актуальную на конец августа 2026 замените по факту:

cd /tmp
wget https://releases.mattermost.com/10.5.1/mattermost-10.5.1-linux-amd64.tar.gz
sudo tar -xzf mattermost-10.5.1-linux-amd64.tar.gz -C /opt
sudo mv /opt/mattermost /opt/mattermost-server

sudo mkdir -p /opt/mattermost-server/data
sudo useradd --system --user-group mattermost
sudo chown -R mattermost:mattermost /opt/mattermost-server
sudo chmod -R g+w /opt/mattermost-server

Правим конфиг подключения к БД:

sudo nano /opt/mattermost-server/config/config.json

Находим блок SqlSettings и меняем DriverName и DataSource:

"SqlSettings": {
    "DriverName": "postgres",
    "DataSource": "postgres://mmuser:СЛОЖНЫЙ_ПАРОЛЬ_СЮДА@localhost:5432/mattermost?sslmode=disable&connect_timeout=10"
}

Создаём unit-файл systemd, чтобы сервис поднимался при перезагрузке и рестартовал при падении:

sudo tee /etc/systemd/system/mattermost.service > /dev/null <<'EOF'
[Unit]
Description=Mattermost
After=network.target postgresql.service

[Service]
Type=notify
ExecStart=/opt/mattermost-server/bin/mattermost
WorkingDirectory=/opt/mattermost-server
User=mattermost
Group=mattermost
Restart=always
RestartSec=10
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now mattermost
sudo systemctl status mattermost

Проверить, что сервис слушает локальный порт:

curl -I http://localhost:8065

Ответ 200 OK или редирект — значит сервер поднялся и можно подключать веб-часть.

Настраиваем Nginx и SSL

Наружу Mattermost отдаём через Nginx как reverse proxy — так же, как в статье про Nginx как reverse proxy. Особенность Mattermost — WebSocket-соединение для realtime-сообщений, его нужно явно проксировать с апгрейдом заголовков, иначе чат будет работать «рывками», обновляясь только по F5.

server {
    listen 80;
    server_name chat.example.com;

    location / {
        client_max_body_size 100M;
        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_pass http://127.0.0.1:8065;

        # WebSocket для realtime-сообщений
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

client_max_body_size поднимите под реальные лимиты загрузки файлов, которые задаёте в самом Mattermost (FileSettings.MaxFileSize) — по умолчанию оба ограничения около 100 МБ, но их можно синхронно увеличить.

Получаем сертификат через certbot:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d chat.example.com

Certbot сам пропишет listen 443 ssl, ключи и добавит редирект с 80 на 443. Если предпочитаете Caddy с автоматическим SSL вместо связки Nginx+certbot — конфиг получится короче, сравнение подходов есть в статье Caddy или Nginx: что выбрать.

Первый вход и настройка команды

Открываем https://chat.example.com — первый зарегистрированный пользователь автоматически становится System Admin. Дальше в System Console (иконка шестерёнки) стоит сразу пройтись по нескольким пунктам:

  • Site URL — должен совпадать с публичным доменом, иначе будут проблемы с WebSocket и OAuth;
  • Authentication → Signup — по умолчанию открыта свободная регистрация; для рабочего чата отключите её и включите инвайты по email или ограничьте домены почты (Enable Open Server → выключить, задать Restrict Domain);
  • Notifications — настройте SMTP, иначе пользователи не будут получать email-уведомления и приглашения. Понадобится внешний SMTP-релей (Mailgun, SendGrid, свой Postfix) — сам Mattermost почтовый сервер не поднимает;
  • Compliance / Data Retention — если чат ведёт рабочую переписку, задайте политику хранения сообщений сразу, а не когда база разрастётся до неудобных размеров.

Для управления из консоли без веб-интерфейса пригодится mmctl — официальная CLI-утилита:

sudo -u mattermost /opt/mattermost-server/bin/mattermost user create \
  --email admin@example.com --username admin --password 'ПАРОЛЬ' --system-admin

Хранение файлов: локально или S3

По умолчанию вложения (картинки, документы, аватарки) складываются на локальный диск в /opt/mattermost-server/data. Это просто и быстро, но у подхода два ограничения: диск растёт бесконтрольно, а бэкапить файлы приходится вместе со всей директорией. Если вложений много или сервер с БД и сервер с файлами хотите разделить, Mattermost умеет писать напрямую в S3-совместимое хранилище — в том числе в собственный MinIO на соседнем VPS. Блок в config.json:

"FileSettings": {
    "DriverName": "amazons3",
    "AmazonS3Bucket": "mattermost-files",
    "AmazonS3Endpoint": "s3.example.com",
    "AmazonS3AccessKeyId": "ключ",
    "AmazonS3SecretAccessKey": "секрет",
    "AmazonS3SSL": true
}

Как поднять такое хранилище с нуля — в статье про установку MinIO на VPS. Для команды до полусотни человек локальный диск обычно оправдан дольше, чем кажется — переезд на S3 имеет смысл, когда файлы уже занимают десятки гигабайт или вы хотите вынести их на отдельный, более дешёвый по диску сервер.

Бэкапы, обновления и безопасность

Полный бэкап Mattermost — это дамп PostgreSQL плюс директория с файлами (если храните локально) плюс config.json:

pg_dump -U mmuser -h localhost mattermost | gzip > mattermost_db_$(date +%F).sql.gz
tar -czf mattermost_data_$(date +%F).tar.gz /opt/mattermost-server/data
cp /opt/mattermost-server/config/config.json config_backup_$(date +%F).json

Автоматизируйте это через cron и уносите копии за пределы сервера — принципы разобраны в общей статье про бэкапы. Обновление между minor-версиями обычно безопасно и делается заменой бинарника:

sudo systemctl stop mattermost
wget https://releases.mattermost.com/X.Y.Z/mattermost-X.Y.Z-linux-amd64.tar.gz
sudo tar -xzf mattermost-X.Y.Z-linux-amd64.tar.gz -C /tmp
sudo rsync -a --exclude=config --exclude=data --exclude=plugins /tmp/mattermost/ /opt/mattermost-server/
sudo chown -R mattermost:mattermost /opt/mattermost-server
sudo systemctl start mattermost

Перед мажорным обновлением (например, 9.x → 10.x) обязательно читайте release notes — там бывают breaking changes в схеме БД, и откат назад после апгрейда не поддерживается без восстановления из бэкапа. По безопасности минимум: закрыть 8065 фаерволом наружу (слушаться должен только localhost за Nginx), включить fail2ban на SSH, и — если чат содержит рабочую переписку — включить принудительный HTTPS и, желательно, MFA для всех пользователей в System Console. Базовую настройку фаервола см. в статье про UFW на Ubuntu.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Чем Team Edition отличается от Enterprise?

В Team Edition нет SSO/LDAP/SAML, продвинутого compliance-экспорта и части инструментов модерации на масштаб тысяч пользователей. Каналы, треды, звонки через плагины, интеграции через webhooks и боты — всё это доступно бесплатно.

Можно ли перенести историю переписки из Slack?

Да, у Mattermost есть встроенный импортёр Slack-экспорта (System Console → Import). Он переносит каналы, сообщения и, частично, файлы, но точность зависит от того, что попало в экспорт самого Slack (бесплатный тариф Slack отдаёт не всю историю).

Нужен ли Docker вместо бинарной установки?

Нет, оба варианта официально поддерживаются. Docker удобнее для быстрого разворачивания и переноса между серверами, бинарник — проще диагностировать через стандартный systemd-journal и понятнее апдейтить вручную. Для одиночного продакшен-сервера разница невелика.

Как подключить звонки (voice/video)?

Через официальный плагин Calls, который поднимает отдельный RTC-сервис. Ему нужен свой диапазон UDP-портов, открытый в фаерволе, и это отдельная настройка сверх базовой установки — закладывайте на неё время отдельно.

Сколько RAM реально нужно, если команда растёт?

Официальные цифры Mattermost — ориентир, реальное потребление сильно зависит от активности (число одновременных WebSocket-соединений, поиск, интеграции с ботами). Проще всего смотреть на реальную нагрузку через htop/systemctl status mattermost первые недели и апгрейдить план по факту, а не закладываться заранее с большим запасом.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →