Гид по технологиям

Установка Mattermost на Debian Buster 10 с MySQL и Nginx

• 8 min read • DevOps • Обновлено 27 Nov 2025
Установка Mattermost на Debian Buster
Установка Mattermost на Debian Buster

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

Скриншот логотипа Mattermost и интерфейса установки

Введение

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

Запустите и включите автозапуск сервиса MySQL:

systemctl start mysql  
systemctl enable mysql

Если всё прошло успешно, 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

Создание базы данных и пользователя MySQL

Проверка

  • Попробуйте подключиться под только что созданным пользователем и убедиться, что доступ к базе есть.

Шаг 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

Совет

  • Для обновления 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.

Результат запуска Mattermost вручную

Подсказки

  • Если при подключении к БД возникает ошибка, проверьте права пользователя и корректность строки 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

Юнит systemd создан и запущен

Советы по управлению

  • Для просмотра логов используйте 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

Конфигурация Nginx и тестирование

Советы по безопасности TLS

  • Используйте только современные протоколы TLS v1.2 или выше.
  • Включите автоматическое обновление сертификатов certbot и контрольное тестирование обновлений.
  • Ограничьте доступ к административным интерфейсам с помощью брандмауэра.

Шаг 8 — Тестирование и первый вход

Откройте браузер и перейдите по HTTPS адресу вашего сервера, например:

https://mattermost.hakase-labs.io/

Создайте первую учётную запись — она станет системным администратором. Заполните имя пользователя, email и пароль и нажмите Create Account.

Веб-инсталлятор Mattermost — создание администратора

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

Создание команды в Mattermost

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

Интерфейс Mattermost после установки

Проверки после установки

  • Вход под созданным админом — можно управлять пользователями и системными настройками.
  • Загрузка вложений (проверить папку /opt/mattermost/data).
  • Отправка уведомлений и работа WebSocket (чат в реальном времени).

Критерии приёмки

  • Mattermost доступен по HTTPS и показывает валидный сертификат.
  • Сервис systemd активен и перезапускается после рестарта хоста.
  • Подключение к базе данных корректно, логи не содержат критических ошибок.
  • Попытка отправки/получения сообщений проходит успешно для нескольких пользователей.

Резервирование, откат и план действий при инциденте

Быстрый план отката

  1. Остановить сервис Mattermost: systemctl stop mattermost
  2. Восстановить файлы из резервной копии (/opt/mattermost и /opt/mattermost/data)
  3. Восстановить базу данных MySQL из дампа: mysql -u root -p mattermost < backup.sql
  4. Запустить сервис: systemctl start mattermost
  5. Проверить логи и работоспособность

Рекомендации по резервному копированию

  • Регулярно экспортируйте дамп БД: 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-режиме.

Мини‑методология развёртывания

  1. Подготовка сервера и резервного плана.
  2. Установка БД и создание учётных записей.
  3. Скачивание и первоначальная настройка Mattermost.
  4. Настройка systemd и проверка локального запуска.
  5. Настройка TLS и обратного прокси.
  6. Тестирование и передача в эксплуатацию.

Глоссарий (1‑строчные определения)

  • Mattermost — платформа командного общения с открытым исходным кодом.
  • systemd — система инициализации и менеджер сервисов в Linux.
  • Nginx — веб-сервер и обратный прокси.
  • certbot — клиент для получения сертификатов Let’s Encrypt.

Итог

В этом руководстве показаны шаги по развёртыванию Mattermost на Debian Buster с MySQL и Nginx, а также рекомендации по безопасности, бэкапам и тестированию. После выполнения шагов у вас будет локально управляемый мессенджер с HTTPS и автоматическим запуском как systemd‑сервиса.

Короткая проверка перед вводом в продакшен

  • Убедитесь, что бэкапы БД настроены и протестированы.
  • Проверьте автоматическое обновление сертификатов и nginx конфигурацию.
  • Настройте мониторинг и алерты на отказ сервиса и заполнение диска.

Если нужно, могу подготовить адаптацию под PostgreSQL, автоматизированный Ansible playbook или Docker‑образ для развертывания в контейнерной среде.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро