Установка Mattermost на Debian Buster 10 с MySQL и Nginx
Mattermost — свободная система командного обмена сообщениями, совместимая с Linux и легко разворачиваемая на Debian Buster 10. В статье пошагово показано, как установить Mattermost с MySQL, запустить как systemd-сервис, настроить Nginx как обратный прокси и защитить сайт сертификатом Let’s Encrypt. Приведены рекомендации по безопасности, тестированию, откату и контрольные списки для ролей.

Введение
Mattermost — это open-source платформа для командного общения, написанная на Go и React. По функционалу она похожа на Slack или HipChat и позволяет развернуть собственный мессенджер под вашими правилами безопасности и хранения данных.
Кому пригодится этот гайд
- Системным администраторам, которые разворачивают внутренний мессенджер.
- DevOps-инженерам, настраивающим сервисы под управляемую инфраструктуру.
- Малому и среднему бизнесу, который хочет контролировать данные пользователей локально.
Требования к хосту (рекомендации)
- ОЗУ: минимум 2 ГБ (рекомендуется 4+ ГБ для активных команд)
- Диск: минимум 25 ГБ свободного места (для логов и вложений выделите дополнительные 50–100 ГБ по потребностям)
- CPU: минимум 2 vCPU
- Операционная система: Debian 10 Buster
- Доступ по sudo и возможность принимать входящие HTTP/HTTPS
Что мы сделаем
- Установим MySQL Server 8.0
- Создадим базу данных и пользователя для Mattermost
- Добавим системного пользователя и распакуем Mattermost
- Настроим config.json (адрес прослушивания и подключение к БД)
- Настроим systemd-сервис для автозапуска
- Получим SSL-сертификат от Let’s Encrypt с помощью certbot
- Установим и настроим Nginx как reverse-proxy
- Протестируем установку и пройдем контрольные проверки
Важно
- В руководстве используется MySQL; Mattermost также поддерживает PostgreSQL. Выбор зависит от вашей инфраструктуры и опыта.
- Не используйте в проде простые пароли, приведённые в примерах.
Шаг 1 — Установка MySQL Server
Сначала добавим официальный репозиторий MySQL и установим MySQL Server 8.0.
Установите утилиты curl, wget и gnupg2 (если их нет):
sudo apt install curl wget gnupg2Скачайте пакет конфигурации репозитория MySQL и установите его:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
dpkg -i mysql-apt-config_0.8.13-1_all.debОбновите список пакетов и установите сервер MySQL:
sudo apt update
sudo apt install mysql-server -yВ процессе установки вам предложат задать пароль root для MySQL. Введите надежный пароль и подтвердите его.

Запустите и включите автозапуск сервиса MySQL:
systemctl start mysql
systemctl enable mysqlЕсли всё прошло успешно, MySQL доступен и готов к использованию.

Совет безопасности
- Сразу после установки выполните mysql_secure_installation для базовых настроек безопасности (удаление анонимных пользователей, отключение удалённого входа root и т. п.).
Шаг 2 — Создание базы данных для Mattermost
Mattermost поддерживает PostgreSQL и MySQL. В этом руководстве мы используем MySQL.
Войдите в MySQL shell под root:
mysql -u root -pСоздайте базу данных и отдельного пользователя. В примере имя БД — mattermost, пользователь mmuser. Обязательно замените mmuser-password на надежный пароль.
create database mattermost;
create user mmuser@localhost identified by 'mmuser-password';
grant all privileges on mattermost.* to mmuser@localhost;
flush privileges;Выйдите из оболочки:
exit
Проверка
- Попробуйте подключиться под только что созданным пользователем и убедиться, что доступ к базе есть.
Шаг 3 — Добавление системного пользователя и скачивание Mattermost
Mattermost будет работать от имени системного пользователя mattermost и устанавливаться в /opt/mattermost.
Создаём системного пользователя:
useradd --system --user-group mattermostПерейдите в /opt и скачайте архив релиза (в примере используется версия 5.21.0):
cd /opt/
curl -o mattermost.tar.gz https://releases.mattermost.com/5.21.0/mattermost-5.21.0-linux-amd64.tar.gzРаспакуйте и создайте каталог данных:
tar -xf mattermost.tar.gz
mkdir -p /opt/mattermost/dataУстановите права доступа:
chown -R mattermost:mattermost /opt/mattermost
chmod -R g+w /opt/mattermost
Совет
- Для обновления Mattermost в будущем сохраните резервную копию /opt/mattermost/config и /opt/mattermost/data.
Шаг 4 — Настройка Mattermost
Перейдите в каталог приложения и откройте config/config.json для правки:
cd /opt/mattermost/
vim config/config.jsonИзмените ListenAddress на локальный интерфейс, чтобы внешние подключения шли через Nginx:
"ListenAddress": "127.0.0.1:8065",В разделе SqlSettings поменяйте DriverName на mysql и укажите корректную строку подключения DataSource. В примере ниже используйте ваш логин/пароль/имя базы:
"SqlSettings": {
"DriverName": "mysql",
"DataSource": "dbuser:dbpassword@tcp(localhost:3306)/dbname?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",Рекомендуемый пример для нашего случая:
"SqlSettings": {
"DriverName": "mysql",
"DataSource": "mmuser:mmuser-password@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",Сохраните файл и инициализируйте приложение от имени пользователя mattermost (это создаст необходимые таблицы и покажет стартовую информацию):
sudo -u mattermost ./bin/mattermostПосле запуска вы увидите логи и статус сервера. Нажмите Ctrl+C чтобы остановить интерактивный запуск — дальше сервис будет управляться systemd.

Подсказки
- Если при подключении к БД возникает ошибка, проверьте права пользователя и корректность строки DataSource.
- Проверьте, что MySQL слушает на localhost и что нет конфликтов портов.
Шаг 5 — Настройка Mattermost как systemd-сервиса
Создайте файл юнита systemd для автоматического запуска:
cd /lib/systemd/system/
vim mattermost.serviceВставьте конфигурацию:
[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service
[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152
[Install]
WantedBy=multi-user.targetЗагрузите конфигурацию systemd и запустите сервис:
systemctl daemon-reload
systemctl start mattermost
systemctl enable mattermostПроверка статуса:
systemctl status mattermost
Советы по управлению
- Для просмотра логов используйте journalctl -u mattermost -f
- При изменениях config.json перезапускайте сервис: systemctl restart mattermost
Шаг 6 — Установка certbot и получение SSL
Установите certbot:
sudo apt install certbotПолучение сертификата (пример для standalone режима). Замените email и домен на ваши значения:
certbot certonly --standalone --agree-tos -m [email protected] -d mattermost.hakase-labs.ioСертификаты будут расположены в /etc/letsencrypt/live/<ваш-домен>/
Поддержка автоматического обновления
- Certbot создаёт cron/systemd таймер для автоматического обновления. Проверьте /etc/letsencrypt/renewal и выполните dry-run: certbot renew –dry-run
Шаг 7 — Установка и настройка Nginx как обратного прокси
Установите Nginx:
sudo apt install nginx -yВключите и запустите сервис:
systemctl start nginx
systemctl enable nginxСоздайте файл конфигурации виртуального хоста:
cd /etc/nginx/
vim sites-available/mattermostПример конфигурации (из исходного текста). Внимательно замените server_name и пути к сертификатам на свои:
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 edu.initrc.fun;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name edu.initrc.fun
ssl on;
ssl_certificate /etc/letsencrypt/live/edu.initrc.fun/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/edu.initrc.fun/privkey.pem;
ssl_session_timeout 1d;
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
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;
}
}Создайте директорию кэша и назначьте права:
mkdir -p /var/cache/nginx
chown -R www-data:www-data /var/cache/nginxАктивируйте виртуальный хост и проверьте конфигурацию:
ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx
Советы по безопасности TLS
- Используйте только современные протоколы TLS v1.2 или выше.
- Включите автоматическое обновление сертификатов certbot и контрольное тестирование обновлений.
- Ограничьте доступ к административным интерфейсам с помощью брандмауэра.
Шаг 8 — Тестирование и первый вход
Откройте браузер и перейдите по HTTPS адресу вашего сервера, например:
https://mattermost.hakase-labs.io/
Создайте первую учётную запись — она станет системным администратором. Заполните имя пользователя, email и пароль и нажмите Create Account.

Далее создайте первую команду (team) и укажите её имя.

Завершите настройку — система предложит URL команды и автоматически подключит вас к каналам по умолчанию (Off-Topic и Town Square).

Проверки после установки
- Вход под созданным админом — можно управлять пользователями и системными настройками.
- Загрузка вложений (проверить папку /opt/mattermost/data).
- Отправка уведомлений и работа WebSocket (чат в реальном времени).
Критерии приёмки
- Mattermost доступен по HTTPS и показывает валидный сертификат.
- Сервис systemd активен и перезапускается после рестарта хоста.
- Подключение к базе данных корректно, логи не содержат критических ошибок.
- Попытка отправки/получения сообщений проходит успешно для нескольких пользователей.
Резервирование, откат и план действий при инциденте
Быстрый план отката
- Остановить сервис Mattermost: systemctl stop mattermost
- Восстановить файлы из резервной копии (/opt/mattermost и /opt/mattermost/data)
- Восстановить базу данных MySQL из дампа: mysql -u root -p mattermost < backup.sql
- Запустить сервис: systemctl start mattermost
- Проверить логи и работоспособность
Рекомендации по резервному копированию
- Регулярно экспортируйте дамп БД: mysqldump –single-transaction –quick mattermost > mattermost-YYYYMMDD.sql
- Снимайте бэкапы каталога /opt/mattermost/data (вложения) и /opt/mattermost/config
- Храните резервные копии на отдельном хосте или в облаке
Безопасность и hardening
Рекомендации по безопасности продакшена
- Обновляйте Debian и пакетную базу: apt update && apt upgrade
- Отключите доступ к MySQL извне (оставьте localhost) или используйте VPN/приватные сети.
- Настройте firewall (ufw/iptables) — откройте только нужные порты (80/443 для веба, 22 для SSH с ограничением по IP).
- Настройте fail2ban для защиты SSH и публичных сервисов.
- Используйте отдельные учётные записи для сервисов и минимальные права доступа.
- Шифруйте бэкапы и храните их в управляемом хранилище.
Privacy / GDPR заметки
- Mattermost хранит персональные данные (имена, e‑mail). Для соответствия требованиям GDPR организуйте хранение и удаление данных согласно политике вашей компании.
- Проинформируйте пользователей об условиях хранения данных и резервного копирования.
Тесты и критерии приёмки (короткий набор)
- Acceptance-1: Веб-интерфейс возвращает 200 OK по HTTPS для корня.
- Acceptance-2: WebSocket подключение к /api/v4/users/websocket устанавливается и принимает сообщения.
- Acceptance-3: Вложения загружаются и доступны через UI.
- Acceptance-4: При перезапуске сервиса systemd приложение поднимается автоматически.
Контрольные списки по ролям
DevOps
- Установить и настроить MySQL
- Создать пользователя и БД для Mattermost
- Настроить systemd юнит и мониторинг
- Настроить резервное копирование и планы восстановления
Администратор безопасности
- Проверить права доступа к файлам и БД
- Настроить TLS и регулярное обновление сертификатов
- Настроить firewall и fail2ban
- Выполнить аудит логов
Системный администратор
- Обновлять систему и зависимости
- Проводить тесты восстановления
- Обеспечивать доступность и масштабируемость
Шпаргалка команд (cheat sheet)
- Старт/стоп/перезапуск: systemctl start|stop|restart mattermost
- Логи сервиса: journalctl -u mattermost -f
- Тест nginx: nginx -t
- Обновление certbot: certbot renew –dry-run
Частые ошибки и способы их устранения
Проблема: 502 Bad Gateway Решение: Проверьте, работает ли systemd-сервис mattermost (systemctl status mattermost) и слушает ли порт 8065 на localhost.
Проблема: Ошибка подключения к базе Решение: Проверьте строку DataSource в config.json, права пользователя MySQL и доступность порта.
Проблема: Сертификат не подтягивается Решение: Убедитесь, что домен указывает на ваш сервер, nginx не занимает порт 80 при получении сертификата в standalone-режиме.
Мини‑методология развёртывания
- Подготовка сервера и резервного плана.
- Установка БД и создание учётных записей.
- Скачивание и первоначальная настройка Mattermost.
- Настройка systemd и проверка локального запуска.
- Настройка TLS и обратного прокси.
- Тестирование и передача в эксплуатацию.
Глоссарий (1‑строчные определения)
- Mattermost — платформа командного общения с открытым исходным кодом.
- systemd — система инициализации и менеджер сервисов в Linux.
- Nginx — веб-сервер и обратный прокси.
- certbot — клиент для получения сертификатов Let’s Encrypt.
Итог
В этом руководстве показаны шаги по развёртыванию Mattermost на Debian Buster с MySQL и Nginx, а также рекомендации по безопасности, бэкапам и тестированию. После выполнения шагов у вас будет локально управляемый мессенджер с HTTPS и автоматическим запуском как systemd‑сервиса.
Короткая проверка перед вводом в продакшен
- Убедитесь, что бэкапы БД настроены и протестированы.
- Проверьте автоматическое обновление сертификатов и nginx конфигурацию.
- Настройте мониторинг и алерты на отказ сервиса и заполнение диска.
Если нужно, могу подготовить адаптацию под PostgreSQL, автоматизированный Ansible playbook или Docker‑образ для развертывания в контейнерной среде.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента