bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Self-hosted Mattermost на VPS: установка с Docker, Nginx, Push-уведомлениями и S3-бэкапами

calendar_month Jun 08, 2026 schedule 20 мин. чтения visibility 50 просмотров
Self-hosted Mattermost на VPS: установка с Docker, Nginx, Push-уведомлениями и S3-бэкапами
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Self-hosted Mattermost на VPS: установка с Docker, Nginx, Push-уведомлениями и S3-бэкапами

TL;DR

В этом подробном руководстве мы настроим Mattermost — мощную платформу для командного общения, которая служит отличной альтернативой Slack, но полностью контролируется вами. Мы развернем его на виртуальном или выделенном сервере (VPS/Dedicated) с использованием Docker и Docker Compose для упрощения управления, настроим Nginx в качестве обратного прокси с SSL-сертификатами от Let's Encrypt, обеспечим работу мобильных push-уведомлений и реализуем надежную систему автоматического резервного копирования данных в S3-совместимое хранилище.

  • Полностью управляемый вами Mattermost на Ubuntu Server 24.04 LTS.
  • Использование Docker и Docker Compose для изоляции и простоты развертывания.
  • Настройка Nginx для безопасного доступа через HTTPS с автоматическими SSL-сертификатами.
  • Поддержка мобильных push-уведомлений для всех пользователей.
  • Автоматические ежедневные бэкапы базы данных и файлов в S3-хранилище.
  • Актуальные версии ПО, инструкции для 2026 года.

Что мы настраиваем и зачем

Схема: Что мы настраиваем и зачем
Схема: Что мы настраиваем и зачем

Mattermost — это современная платформа для командного обмена сообщениями, разработанная как открытая альтернатива коммерческим продуктам вроде Slack или Microsoft Teams. Она предоставляет все необходимые функции для эффективной коммуникации: публичные и приватные каналы, прямые сообщения, обмен файлами, интеграции с внешними сервисами, голосовые и видеозвонки (через плагины) и многое другое. Самостоятельное развертывание Mattermost (self-hosted) на собственном VPS или выделенном сервере дает полный контроль над данными, безопасностью и возможностью глубокой настройки под уникальные потребности вашей команды или компании.

В этом руководстве мы пройдем путь от пустого сервера до полностью функционального Mattermost-инстанса, доступного из любой точки мира через защищенное HTTPS-соединение. Мы сосредоточимся на использовании Docker и Docker Compose — эти инструменты позволяют легко развертывать, управлять и обновлять приложения в изолированных контейнерах, что значительно упрощает эксплуатацию. Nginx будет выступать в роли обратного прокси, обрабатывая входящие запросы и направляя их к Mattermost-контейнеру, а также обеспечивая шифрование трафика с помощью бесплатных SSL-сертификатов от Let's Encrypt. Отдельное внимание уделим настройке push-уведомлений для мобильных клиентов и реализации надежной системы автоматического резервного копирования данных в S3-совместимое хранилище, что критически важно для любой производственной системы.

В итоге вы получите отказоустойчивую и безопасную систему коммуникации, которая не зависит от сторонних облачных провайдеров и полностью находится под вашим контролем. Это идеальное решение для разработчиков, стартапов, криптоэнтузиастов и всех, кто ценит конфиденциальность и суверенитет над своими данными.

Альтернативы: Cloud-managed vs Self-hosted

При выборе платформы для командного общения обычно стоят два основных варианта:

  • Cloud-managed решения (Slack, Microsoft Teams, Mattermost Cloud): Эти сервисы предлагают удобство "под ключ", не требуя от вас никаких технических знаний для установки и обслуживания. Вы просто регистрируетесь, платите ежемесячную абонентскую плату, и все работает. Однако, вы полностью доверяете свои данные стороннему провайдеру, теряете контроль над их местоположением и безопасностью, а также ограничены в кастомизации и интеграциях. Стоимость может быстро расти с увеличением числа пользователей.
  • Self-hosted решения (Mattermost на VPS): Вы самостоятельно развертываете и управляете приложением на собственном сервере. Это требует определенных технических навыков, но дает неоспоримые преимущества:
    • Полный контроль над данными: Ваши данные остаются на вашем сервере, под вашим управлением. Это критично для компаний с высокими требованиями к безопасности и конфиденциальности.
    • Гибкость и кастомизация: Вы можете устанавливать любые плагины, модифицировать исходный код (если это open-source), интегрировать с внутренними системами без ограничений API.
    • Экономия: Долгосрочно self-hosted решение часто оказывается дешевле, особенно для больших команд, так как вы платите только за сервер, а не за каждого пользователя.
    • Независимость: Вы не зависите от политики ценообразования или возможных сбоев стороннего провайдера.

Мы выбираем self-hosted подход на VPS, чтобы получить максимум преимуществ при разумных затратах и с полным контролем.

Какой VPS-конфиг нужен под эту задачу

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Какой VPS-конфиг нужен под эту задачу

Требования к серверу для Mattermost зависят от количества пользователей и интенсивности использования. Приведенные ниже рекомендации актуальны для установки Mattermost Team Edition.

Минимальные требования (до 50 активных пользователей)

  • CPU: 2 ядра (x86-64)
  • RAM: 4 GB
  • Диск: 80 GB SSD (для ОС, Docker-образов, БД и пользовательских файлов)
  • Сеть: 100 Mbps, неограниченный трафик

Рекомендуемый конфиг (до 200 активных пользователей)

  • CPU: 4 ядра (x86-64)
  • RAM: 8 GB
  • Диск: 160-200 GB NVMe SSD (для максимальной производительности дисковой подсистемы)
  • Сеть: 1 Gbps, неограниченный трафик

Для нашей задачи по развертыванию Mattermost с Nginx, Docker и бэкапами, рекомендуем ориентироваться на конфигурацию: 4 vCPU, 8 GB RAM, 160 GB NVMe SSD, 1 Gbps сеть. Такой сервер обеспечит комфортную работу для команды до 200 человек и оставит запас для роста. VPS с указанными характеристиками будет оптимальным выбором для большинства команд.

Когда нужен dedicated, а не VPS

Выделенный сервер (dedicated server) становится предпочтительнее в следующих случаях:

  • Очень большие команды: Если вы ожидаете 500+ активных пользователей или тысячи одновременных подключений.
  • Высокие требования к производительности: Для критически важных систем, где задержки недопустимы, и требуется максимальная производительность диска и CPU без влияния "соседей" по VPS.
  • Специфические требования к безопасности/комплаенсу: Когда необходима полная изоляция на физическом уровне, или требуется установка кастомного оборудования/ПО, которое невозможно на VPS.
  • Интенсивное использование плагинов и интеграций: Некоторые ресурсоемкие плагины могут требовать больше ресурсов, чем может предоставить средний VPS.

Для большинства сценариев, описанных в этом гайде, мощного VPS будет более чем достаточно.

Локация: на что влияет

Выбор локации VPS имеет значение для:

  • Задержки (latency): Чем ближе сервер к большинству ваших пользователей, тем ниже будет пинг и быстрее отклик. Для международной команды выбирайте центральную локацию или используйте CDN.
  • Законодательство: Расположение сервера определяет юрисдикцию, под которую подпадают ваши данные. Это важно для соблюдения GDPR, HIPAA и других регуляций.
  • Стоимость: Цены на VPS могут варьироваться в зависимости от локации.

Рекомендуется выбирать локацию, которая географически близка к основной массе пользователей Mattermost.

Подготовка сервера

Схема: Подготовка сервера
Схема: Подготовка сервера

Предполагается, что у вас есть свежеустановленный VPS с операционной системой Ubuntu Server 24.04 LTS. Все команды будут выполняться от имени пользователя с правами sudo.

1. Обновление системы и установка базовых утилит

Первым делом обновим систему и установим необходимые пакеты.


sudo apt update && sudo apt upgrade -y # Обновление списка пакетов и их обновление
sudo apt install -y curl wget git nano htop ufw fail2ban # Установка полезных утилит и инструментов безопасности

2. Создание нового пользователя с правами sudo (если еще не сделали)

Работа под root пользователем небезопасна. Создадим нового пользователя и дадим ему права sudo.


sudo adduser mattermostuser # Создаем нового пользователя
sudo usermod -aG sudo mattermostuser # Добавляем пользователя в группу sudo

Теперь выйдите из сессии root и войдите под новым пользователем mattermostuser.


exit
# Войдите снова: ssh mattermostuser@your_vps_ip

3. Настройка SSH-ключей (рекомендуется)

Использование SSH-ключей вместо паролей значительно повышает безопасность.

На вашей локальной машине:


ssh-keygen -t rsa -b 4096 # Генерируем новый SSH-ключ (если его нет)
ssh-copy-id mattermostuser@your_vps_ip # Копируем публичный ключ на сервер

Теперь можно отключить авторизацию по паролю в SSH на сервере. Отредактируйте файл /etc/ssh/sshd_config:


sudo nano /etc/ssh/sshd_config

Найдите и измените следующие строки (или добавьте, если отсутствуют):


#...
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no
#...

Перезапустите SSH-сервис:


sudo systemctl restart sshd

4. Настройка брандмауэра (UFW)

UFW (Uncomplicated Firewall) — простой в использовании брандмауэр для Linux.


sudo ufw allow OpenSSH # Разрешаем SSH-подключения
sudo ufw allow http # Разрешаем HTTP (порт 80)
sudo ufw allow https # Разрешаем HTTPS (порт 443)
sudo ufw enable # Включаем UFW
sudo ufw status # Проверяем статус брандмауэра

Убедитесь, что SSH разрешен, прежде чем включать UFW, иначе вы можете потерять доступ к серверу.

5. Настройка Fail2ban

Fail2ban защищает сервер от атак методом подбора паролей, блокируя IP-адреса, с которых происходят многократные неудачные попытки входа.

После установки он работает "из коробки" с SSH. Для настройки дополнительных правил можно создать файл /etc/fail2ban/jail.local:


sudo nano /etc/fail2ban/jail.local

Пример содержимого (для SSH):


[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h

Перезапустите Fail2ban:


sudo systemctl restart fail2ban
sudo fail2ban-client status # Проверяем статус

На этом базовая подготовка сервера завершена.

Установка ПО — пошагово

Схема: Установка ПО — пошагово
Схема: Установка ПО — пошагово

В этом разделе мы установим Docker, Docker Compose, Nginx и настроим их для работы с Mattermost. Все версии ПО актуальны на 2026 год, что подразумевает использование последних стабильных релизов.

1. Установка Docker Engine и Docker Compose

Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Docker Compose позволяет определять и запускать многоконтейнерные Docker-приложения.


# Добавляем репозиторий Docker
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Устанавливаем Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Установка Docker и Docker Compose (v2)

# Добавляем текущего пользователя в группу docker для работы без sudo
sudo usermod -aG docker mattermostuser # Замените mattermostuser на ваше имя пользователя
newgrp docker # Применяем изменения для текущей сессии, либо перелогиньтесь

# Проверяем установку Docker
docker run hello-world # Запуск тестового контейнера
docker compose version # Проверка версии Docker Compose

На момент 2026 года, docker-compose-plugin является предпочтительным способом установки Docker Compose v2, который интегрирован в CLI Docker.

2. Установка Nginx

Nginx будет работать как обратный прокси для Mattermost, обрабатывая SSL-сертификаты и направляя трафик.


sudo apt update
sudo apt install -y nginx # Установка Nginx (версия ~1.26.x на 2026 год для Ubuntu 24.04 LTS)

sudo systemctl enable nginx # Включаем автозапуск Nginx
sudo systemctl start nginx # Запускаем Nginx
sudo systemctl status nginx # Проверяем статус Nginx

Проверьте доступность Nginx, открыв IP-адрес вашего сервера в браузере. Вы должны увидеть страницу "Welcome to Nginx!".

3. Установка Certbot (для Let's Encrypt SSL)

Certbot — это клиент для автоматического получения и обновления SSL-сертификатов от Let's Encrypt.


sudo apt install -y certbot python3-certbot-nginx # Установка Certbot и плагина для Nginx

Для работы Certbot вам потребуется доменное имя, указывающее на IP-адрес вашего VPS. Например, chat.yourdomain.com.

4. Создание директорий для Mattermost

Создадим структуру директорий для хранения конфигурации Mattermost, данных и базы данных PostgreSQL.


sudo mkdir -p /opt/mattermost/{app,data,db,logs,config,plugins,client/plugins} # Создание основной структуры
sudo chown -R mattermostuser:mattermostuser /opt/mattermost # Назначение прав текущему пользователю
sudo chmod -R 770 /opt/mattermost # Установка прав доступа

Убедитесь, что ваш пользователь mattermostuser имеет права на запись в эти директории.

Конфигурация

Схема: Конфигурация
Схема: Конфигурация

Этот раздел посвящен настройке всех компонентов: Docker Compose для Mattermost и PostgreSQL, Nginx для проксирования и SSL, а также Mattermost для push-уведомлений и S3-бэкапов.

1. Подготовка файла .env для секретов

Создадим файл .env для хранения переменных окружения и секретов, чтобы не хардкодить их в docker-compose.yml.


nano /opt/mattermost/.env

Пример содержимого /opt/mattermost/.env:


# Mattermost
MM_HOSTNAME=chat.yourdomain.com # Замените на ваш домен
MM_SITEURL=https://chat.yourdomain.com # Замените на ваш домен
MM_DB_USERNAME=mmuser
MM_DB_PASSWORD=your_strong_db_password # Сгенерируйте надежный пароль
MM_DB_NAME=mattermost

# PostgreSQL
POSTGRES_USER=mmuser
POSTGRES_PASSWORD=your_strong_db_password
POSTGRES_DB=mattermost

Важно: Сгенерируйте по-настоящему надежные пароли для базы данных. Используйте онлайн-генераторы или команду типа openssl rand -base64 32.

2. Создание файла docker-compose.yml

Создадим основной файл docker-compose.yml, который определит сервисы Mattermost, PostgreSQL и Nginx.


nano /opt/mattermost/docker-compose.yml

Пример содержимого /opt/mattermost/docker-compose.yml:


version: '3.8'

services:
  app:
    container_name: mattermost-app
    image: mattermost/mattermost-team-edition:9.6 # Актуальная версия на 2026 год, или используйте latest
    restart: unless-stopped
    environment:
      MM_SQLSETTINGS_DRIVERNAME: postgres
      MM_SQLSETTINGS_DATASOURCE: postgres://${MM_DB_USERNAME}:${MM_DB_PASSWORD}@db:5432/${MM_DB_NAME}?sslmode=disable&connect_timeout=10
      MM_SERVICESETTINGS_SITEURL: ${MM_SITEURL}
      MM_LOGSETTINGS_FILELOCATION: /mattermost/logs/mattermost.log
      MM_FILESETTINGS_DIRECTORY: /mattermost/data
      MM_EMAILSETTINGS_SENDEMAILNOTIFICATIONS: "true" # Включите после настройки SMTP
      MM_EMAILSETTINGS_FEEDBACKEMAIL: "[email protected]"
      MM_EMAILSETTINGS_SMTPUSERNAME: "smtp_user" # Замените на ваши данные SMTP
      MM_EMAILSETTINGS_SMTPPASSWORD: "smtp_password"
      MM_EMAILSETTINGS_SMTPSERVER: "smtp.yourprovider.com"
      MM_EMAILSETTINGS_SMTPPORT: "587"
      MM_EMAILSETTINGS_CONNECTIONSECURITY: "STARTTLS"
      MM_EMAILSETTINGS_ENABLESMTPAUTH: "true"
      MM_MESSAGINGSETTINGS_ENABLEEMAILBATCHING: "true"
      MM_MESSAGINGSETTINGS_EMAILBATCHINGBUFFERSIZE: "256"
      MM_MESSAGINGSETTINGS_EMAILBATCHINGINTERVAL: "30" # Seconds
      MM_PUSHNOTIFICATIONSSETTINGS_ENABLEEXTENSIBLESERVICE: "true"
      MM_PUSHNOTIFICATIONSSETTINGS_GATEWAYURL: "https://push.mattermost.com" # Используем официальный шлюз
      # MM_PUSHNOTIFICATIONSSETTINGS_ANDROIDPUSHPROXYURL: "http://localhost:8065" # Для собственного MPNS
      # MM_PUSHNOTIFICATIONSSETTINGS_IOSPUSHPROXYURL: "http://localhost:8065" # Для собственного MPNS
    volumes:
      - /opt/mattermost/app:/mattermost:rw
      - /opt/mattermost/data:/mattermost/data:rw
      - /opt/mattermost/config:/mattermost/config:rw
      - /opt/mattermost/logs:/mattermost/logs:rw
      - /opt/mattermost/plugins:/mattermost/plugins:rw
      - /opt/mattermost/client/plugins:/mattermost/client/plugins:rw
    ports:
      - "8065:8065" # Mattermost слушает на 8065, Nginx будет проксировать
    depends_on:
      - db
    networks:
      - mattermost-bridge

  db:
    container_name: mattermost-db
    image: postgres:16-alpine # Актуальная версия PostgreSQL на 2026 год
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - /opt/mattermost/db:/var/lib/postgresql/data:rw
    networks:
      - mattermost-bridge

networks:
  mattermost-bridge:
    driver: bridge

Пояснения:

  • mattermost-team-edition:9.6: Это пример актуальной версии Mattermost на 2026 год. Всегда используйте последнюю стабильную версию.
  • postgres:16-alpine: Последняя стабильная версия PostgreSQL.
  • MM_SQLSETTINGS_DATASOURCE: Строка подключения к базе данных. Использует переменные из .env.
  • MM_SERVICESETTINGS_SITEURL: Важный параметр, определяющий базовый URL вашего Mattermost-инстанса. Должен быть HTTPS.
  • volumes: Монтирование локальных директорий сервера в контейнеры, чтобы данные (конфиги, файлы, БД) сохранялись после перезапуска контейнеров.
  • networks: Создаем внутреннюю Docker-сеть для безопасного взаимодействия контейнеров между собой.
  • SMTP-настройки: Замените на данные вашего SMTP-провайдера для отправки уведомлений по почте.
  • Push-уведомления: По умолчанию мы используем официальный шлюз Mattermost (https://push.mattermost.com), что является самым простым способом. Для настройки собственного MPNS (Mattermost Push Notification Service) потребуется значительно больше усилий и отдельный сервер или контейнер.

3. Настройка Nginx

Создадим конфигурационный файл Nginx для Mattermost. Сначала удалим дефолтный конфиг:


sudo rm /etc/nginx/sites-enabled/default

Затем создадим новый файл конфигурации для вашего домена:


sudo nano /etc/nginx/sites-available/mattermost.conf

Пример содержимого /etc/nginx/sites-available/mattermost.conf:


server {
    listen 80;
    server_name chat.yourdomain.com; # Замените на ваш домен

    location / {
        return 301 https://$host$request_uri; # Перенаправляем весь HTTP-трафик на HTTPS
    }
}

server {
    listen 443 ssl http2;
    server_name chat.yourdomain.com; # Замените на ваш домен

    ssl_certificate /etc/letsencrypt/live/chat.yourdomain.com/fullchain.pem; # Путь к вашему SSL-сертификату
    ssl_certificate_key /etc/letsencrypt/live/chat.yourdomain.com/privkey.pem; # Путь к приватному ключу
    ssl_trusted_certificate /etc/letsencrypt/live/chat.yourdomain.com/chain.pem;

    # SSL-настройки для безопасности
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    ssl_dhparam /etc/ssl/certs/dhparam.pem; # Сгенерируем его позже

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # Добавляем заголовки безопасности
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "no-referrer-when-downgrade";
    add_header Content-Security-Policy "frame-ancestors 'self'";

    client_max_body_size 50M; # Увеличиваем лимит на размер загружаемых файлов
    client_body_buffer_size 128k;

    location ~ /api/v[0-9]+/(users/)?websocket$ {
        proxy_pass http://localhost:8065; # Mattermost слушает на 8065
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        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_set_header X-Frame-Options SAMEORIGIN;
        proxy_buffering off; # Отключаем буферизацию для WebSocket
    }

    location / {
        proxy_pass http://localhost:8065; # Mattermost слушает на 8065
        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_set_header X-Frame-Options SAMEORIGIN;
        proxy_buffers 256 16k; # Увеличиваем буферы прокси
        proxy_buffer_size 16k;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

Создайте символическую ссылку на этот файл в sites-enabled:


sudo ln -s /etc/nginx/sites-available/mattermost.conf /etc/nginx/sites-enabled/mattermost.conf

Сгенерируйте файл dhparam.pem для усиления SSL-безопасности. Это может занять несколько минут:


sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 # Или 4096 для большей безопасности

Проверьте синтаксис Nginx и перезапустите его:


sudo nginx -t # Проверка синтаксиса
sudo systemctl restart nginx # Перезапуск Nginx

4. Получение SSL-сертификатов с Certbot

Теперь, когда Nginx настроен и слушает порт 80, можно получить сертификаты Let's Encrypt.


sudo certbot --nginx -d chat.yourdomain.com # Замените на ваш домен

Certbot задаст несколько вопросов (email, согласие с условиями, перенаправление HTTP на HTTPS). Выберите автоматическое перенаправление (опция 2, если предложат). Certbot автоматически обновит ваш Nginx-конфиг и установит сертификаты.

Проверьте, что автоматическое обновление работает:


sudo systemctl status certbot.timer # Проверка таймера systemd для Certbot
sudo certbot renew --dry-run # Тестовое обновление

5. Запуск Mattermost с Docker Compose

Перейдите в директорию с docker-compose.yml и запустите сервисы.


cd /opt/mattermost
docker compose up -d # Запуск контейнеров в фоновом режиме

Проверьте статус контейнеров:


docker compose ps

Вы должны увидеть, что контейнеры mattermost-app и mattermost-db находятся в статусе running.

6. Проверка работоспособности

Откройте в браузере ваш домен (например, https://chat.yourdomain.com). Вы должны увидеть страницу приветствия Mattermost и возможность создать учетную запись администратора.

Также можно проверить доступность с помощью curl на сервере:


curl -I https://chat.yourdomain.com # Проверка HTTPS-доступа
curl http://localhost:8065/api/v4/system/ping # Проверка прямого доступа к Mattermost API изнутри сервера

Если все настроено правильно, первый запрос покажет HTTP/200 OK, а второй — {"status":"OK"} или подобный ответ.

Бэкапы и обслуживание

Схема: Бэкапы и обслуживание
Схема: Бэкапы и обслуживание

Надежное резервное копирование — критически важный аспект любой производственной системы. Мы настроим автоматические бэкапы базы данных и файлов Mattermost в S3-совместимое хранилище.

1. Что бэкапить

Для Mattermost необходимо резервировать три основные группы данных:

  1. База данных PostgreSQL: Содержит всю информацию о пользователях, каналах, сообщениях, настройках и т.п. Это самая важная часть.
  2. Пользовательские файлы: Все файлы, загруженные пользователями (изображения, документы и т.д.), хранятся в директории /opt/mattermost/data.
  3. Конфигурационные файлы: Файл config.json/opt/mattermost/config) и docker-compose.yml, .env.

2. Установка AWS CLI и настройка S3

Мы будем использовать AWS CLI для взаимодействия с S3-совместимым хранилищем. Это может быть как Amazon S3, так и любой другой провайдер, поддерживающий S3 API (например, MinIO, DigitalOcean Spaces, Vultr Object Storage).


sudo apt install -y python3-pip # Устанавливаем pip, если его нет
pip install awscli # Устанавливаем AWS CLI

Настройте AWS CLI, указав учетные данные S3. Вам потребуются Access Key ID, Secret Access Key и region.


aws configure # Запустите и введите свои данные
# AWS Access Key ID [None]: YOUR_ACCESS_KEY_ID
# AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY
# Default region name [None]: YOUR_S3_REGION (например, us-east-1 или ru-central1)
# Default output format [None]: json

3. Скрипт автоматического бэкапа

Создадим скрипт, который будет выполнять дамп базы данных, архивировать файлы и загружать все это в S3.


nano /opt/mattermost/backup_mattermost.sh

Пример содержимого /opt/mattermost/backup_mattermost.sh:


#!/bin/bash

# Load environment variables
source /opt/mattermost/.env

# --- Configuration ---
BACKUP_DIR="/opt/mattermost/backups"
S3_BUCKET="s3://your-mattermost-backup-bucket" # Замените на имя вашего S3-бакета
DATE=$(date +%Y-%m-%d-%H%M%S)
DB_BACKUP_FILE="${BACKUP_DIR}/mattermost_db_${DATE}.sql"
FILES_BACKUP_FILE="${BACKUP_DIR}/mattermost_files_${DATE}.tar.gz"
CONFIG_BACKUP_FILE="${BACKUP_DIR}/mattermost_config_${DATE}.tar.gz"
LOG_FILE="/var/log/mattermost_backup.log"

# --- Create backup directory ---
mkdir -p "$BACKUP_DIR" >> "$LOG_FILE" 2>&1
echo "--- Starting Mattermost backup at ${DATE} ---" >> "$LOG_FILE"

# --- 1. Database Backup ---
echo "Dumping PostgreSQL database..." >> "$LOG_FILE"
docker compose exec -T db pg_dump -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" > "${DB_BACKUP_FILE}" >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
    echo "Database dump successful: ${DB_BACKUP_FILE}" >> "$LOG_FILE"
else
    echo "Database dump FAILED!" >> "$LOG_FILE"
fi

# --- 2. Files Backup ---
echo "Archiving Mattermost data files..." >> "$LOG_FILE"
tar -czf "${FILES_BACKUP_FILE}" -C /opt/mattermost data >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
    echo "Files archive successful: ${FILES_BACKUP_FILE}" >> "$LOG_FILE"
else
    echo "Files archive FAILED!" >> "$LOG_FILE"
fi

# --- 3. Configuration Files Backup ---
echo "Archiving Mattermost configuration files..." >> "$LOG_FILE"
tar -czf "${CONFIG_BACKUP_FILE}" -C /opt/mattermost config docker-compose.yml .env >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
    echo "Config archive successful: ${CONFIG_BACKUP_FILE}" >> "$LOG_FILE"
else
    echo "Config archive FAILED!" >> "$LOG_FILE"
fi

# --- Upload to S3 ---
echo "Uploading backups to S3 bucket: ${S3_BUCKET}..." >> "$LOG_FILE"
aws s3 cp "${DB_BACKUP_FILE}" "${S3_BUCKET}/db/" --region YOUR_S3_REGION >> "$LOG_FILE" 2>&1
aws s3 cp "${FILES_BACKUP_FILE}" "${S3_BUCKET}/files/" --region YOUR_S3_REGION >> "$LOG_FILE" 2>&1
aws s3 cp "${CONFIG_BACKUP_FILE}" "${S3_BUCKET}/config/" --region YOUR_S3_REGION >> "$LOG_FILE" 2>&1

if [ $? -eq 0 ]; then
    echo "S3 upload successful." >> "$LOG_FILE"
else
    echo "S3 upload FAILED!" >> "$LOG_FILE"
fi

# --- Cleanup local backups (optional) ---
echo "Cleaning up local backup files older than 7 days..." >> "$LOG_FILE"
find "${BACKUP_DIR}" -type f -name "mattermost_.sql" -mtime +7 -delete >> "$LOG_FILE" 2>&1
find "${BACKUP_DIR}" -type f -name "mattermost_.tar.gz" -mtime +7 -delete >> "$LOG_FILE" 2>&1
echo "Cleanup complete." >> "$LOG_FILE"

echo "--- Mattermost backup finished at $(date +%Y-%m-%d-%H%M%S) ---" >> "$LOG_FILE"
echo "" >> "$LOG_FILE" # Add a newline for readability

Сделайте скрипт исполняемым:


chmod +x /opt/mattermost/backup_mattermost.sh

Протестируйте скрипт вручную:


/opt/mattermost/backup_mattermost.sh

Проверьте содержимое /var/log/mattermost_backup.log и ваш S3-бакет.

4. Настройка Cron для автоматического запуска

Добавим скрипт в планировщик Cron для ежедневного выполнения, например, в 3 часа ночи.


crontab -e

Добавьте следующую строку в конец файла:


0 3   * /opt/mattermost/backup_mattermost.sh >> /var/log/cron.log 2>&1

Эта строка означает: "Каждый день в 3:00 утра выполнить скрипт backup_mattermost.sh".

5. Обслуживание и обновления

  • Обновление ОС: Регулярно запускайте sudo apt update && sudo apt upgrade -y для поддержания актуальности вашей операционной системы.
  • Обновление Docker и Docker Compose: Они обновляются вместе с ОС, если установлены из репозиториев.
  • Обновление Mattermost: Для обновления контейнера Mattermost измените тег образа в docker-compose.yml на новую версию (например, с 9.6 на 9.7), затем выполните:
    
    cd /opt/mattermost
    docker compose pull app # Загрузить новый образ
    docker compose up -d # Пересоздать контейнер с новым образом
    

    Всегда читайте официальную документацию Mattermost перед обновлением, так как могут быть изменения в базе данных, требующие миграции.

  • Обновление Nginx: Обновляется вместе с ОС.
  • Мониторинг: Следите за использованием ресурсов сервера (CPU, RAM, диск) с помощью htop или более продвинутых систем мониторинга.
  • Журналы: Регулярно просматривайте логи Mattermost (/opt/mattermost/logs/mattermost.log) и Docker-контейнеров (docker compose logs app) на предмет ошибок.

Troubleshooting + FAQ

Здесь собраны ответы на часто задаваемые вопросы и решения типичных проблем, которые могут возникнуть при установке и эксплуатации Mattermost.

Mattermost не запускается, ошибка подключения к базе данных. Что делать?

Что проверить: Убедитесь, что контейнер mattermost-db запущен и доступен. Проверьте логи контейнера базы данных на предмет ошибок. Также проверьте файл .env на корректность имени пользователя, пароля и имени базы данных. Убедитесь, что порты не заняты другими процессами. Возможно, Mattermost-контейнер запустился раньше, чем PostgreSQL полностью инициализировался.

Как фиксить:


        cd /opt/mattermost
        docker compose logs db # Просмотр логов БД
        docker compose restart db app # Перезапустить сначала БД, потом приложение
        

Убедитесь, что MM_SQLSETTINGS_DATASOURCE в docker-compose.yml правильно ссылается на сервис db (postgres://user:pass@db:5432/dbname).

Какой VPS-конфиг минимально подойдёт?

Для небольшой команды до 50 активных пользователей минимально подойдет VPS с 2 vCPU, 4 GB RAM и 80 GB SSD. Это позволит запустить Docker, Mattermost и PostgreSQL, а также Nginx и обеспечить базовую производительность. Однако, для комфортной работы и запаса на рост, особенно при использовании плагинов, рекомендуется 4 vCPU, 8 GB RAM и 160 GB NVMe SSD.

Nginx выдает ошибку 502 Bad Gateway.

Что проверить: Ошибка 502 обычно означает, что Nginx не смог связаться с бэкенд-сервисом (в нашем случае, с контейнером Mattermost на порту 8065). Проверьте, запущен ли контейнер mattermost-app: docker compose ps. Убедитесь, что Mattermost слушает на порту 8065 внутри контейнера и что в docker-compose.yml правильно проброшен порт (8065:8065).

Как фиксить:


        docker compose logs app # Просмотр логов Mattermost
        sudo systemctl restart nginx # Перезапустить Nginx
        

Убедитесь, что в файле /etc/nginx/sites-available/mattermost.conf строка proxy_pass http://localhost:8065; указана верно.

Что выбрать — VPS или dedicated для этой задачи?

Для большинства команд до 500 пользователей и средних нагрузок VPS будет оптимальным и экономически выгодным решением. Выделенный сервер стоит выбирать, если у вас очень большая команда (более 500 активных пользователей), критически высокие требования к производительности без каких-либо задержек, специфические требования к аппаратной изоляции или если вы планируете запускать множество других ресурсоемких приложений на том же сервере.

Не приходят мобильные push-уведомления.

Что проверить: Убедитесь, что в config.json Mattermost (который можно отредактировать через веб-интерфейс в разделе "System Console" -> "Notifications" -> "Push Notifications") включен параметр "Enable Push Notifications" и "Push Notification Server" установлен на https://push.mattermost.com (или на адрес вашего собственного MPNS). Проверьте, что ваш сервер имеет исходящий доступ к этому URL. Также убедитесь, что в docker-compose.yml установлены переменные окружения для push-уведомлений, как указано в разделе "Конфигурация".

Как фиксить: Проверьте логи Mattermost на предмет ошибок, связанных с push-уведомлениями. Если используете собственный MPNS, убедитесь, что он правильно настроен и доступен. Удостоверьтесь, что на вашем сервере открыт исходящий трафик на 443 порт для push.mattermost.com. Если вы только что настроили, попробуйте перелогиниться в мобильном приложении.

SSL-сертификат не работает или истек.

Что проверить: Убедитесь, что Certbot правильно настроил автоматическое обновление. Проверьте статус таймера Certbot: sudo systemctl status certbot.timer. Убедитесь, что доменное имя chat.yourdomain.com (или ваше) верно указано в Nginx-конфиге и в команде Certbot. Проверьте логи Certbot на предмет ошибок при обновлении.

Как фиксить: Попробуйте вручную обновить сертификаты: sudo certbot renew --force-renewal. Если это не помогает, проверьте, что DNS-записи для вашего домена корректно указывают на IP вашего сервера. Убедитесь, что порт 80 открыт для Certbot во время процесса обновления.

Выводы и следующие шаги

Схема: Выводы и следующие шаги
Схема: Выводы и следующие шаги

Поздравляем! Вы успешно развернули полностью функциональный Mattermost-сервер на вашем VPS. Теперь у вас есть мощная, безопасная и полностью контролируемая платформа для командного общения, работающая на Docker, защищенная Nginx с SSL и поддерживающая мобильные push-уведомления, а также автоматическое резервное копирование в S3-совместимое хранилище. Это дает вам полный суверенитет над вашими данными и гибкость в настройке.

Дальнейшие шаги для оптимизации и расширения функционала:

  • SMTP-настройки: Обязательно настройте отправку электронной почты (SMTP) в System Console Mattermost для регистрации пользователей, сброса паролей и уведомлений.
  • Интеграции и плагины: Изучите богатую экосистему плагинов и интеграций Mattermost. Вы можете добавить поддержку голосовых/видеозвонков (Jitsi, Zoom), интеграции с системами контроля версий (GitHub, GitLab), системами CI/CD и многими другими сервисами.
  • Мониторинг и логирование: Для производственных систем рекомендуется настроить более продвинутый мониторинг (Prometheus, Grafana) и централизованное логирование (ELK Stack или Graylog) для отслеживания производительности и быстрого реагирования на проблемы.
  • Масштабирование: Если ваша команда значительно вырастет, рассмотрите возможность масштабирования Mattermost, разделив базу данных и файловое хранилище на отдельные серверы или используя кластерные решения для Mattermost.

Поделиться этой записью:

self-hosted mattermost на vps: установка с docker, nginx, push-уведомлениями и s3-бэкапами
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.