Удельта

Пошаговая инструкция · Самостоятельная установка

Как установить Mattermost на сервер с PostgreSQL и HTTPS

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

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

Что подготовить и как читать инструкцию #

Для Mattermost делаем исключение из общей базы Ubuntu 26.04: в официальной матрице APT перечислены Ubuntu 20.04, 22.04 и 24.04. Здесь используем Ubuntu 24.04 LTS и подписанный пакет 11.11.1-1. Это понятный путь обслуживания через systemd и APT. Docker Compose разработчик относит к знакомству и тестированию; для этого рабочего сценария он не применяется. Официальный выбор установки.

Подготовьте отдельную базу PostgreSQL 16 на втором сервере или в managed-сервисе. Для рабочей среды разработчик рекомендует отделить базу от приложения. Одновременная потеря диска чата и единственной базы не должна лишить команду всей переписки. На сервере приложения можно начать с 4 vCPU, 8 ГБ RAM и SSD от 80 ГБ; ресурсы базы и копий считаются отдельно. Подробности — в руководстве выбора сервера Mattermost.

Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.

Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.

HTTPS оформляется через официальный Certbot; Nginx и сертификаты обслуживаются на хосте.

Дополнительные официальные источники: Стабильный релиз 11.11.1.

Шаг 1. Установите инструменты сервера #

В этой статье используется поддерживаемая Mattermost Ubuntu 24.04. apt установит Nginx, snapd для установки Certbot и клиент PostgreSQL. Сам Certbot установим отдельным шагом по официальной рекомендации разработчика.

Установите инструменты сервера
sudo apt update
sudo apt install curl ca-certificates gnupg nginx snapd postgresql-client-16

apt завершился без ошибок; переходить к репозиторию можно после завершения установки.

Шаг 2. Установите Certbot из snap #

Плагин Nginx включён в официальный snap Certbot. Используем один способ установки: если Certbot уже установлен через apt, не ставьте поверх него вторую версию; сначала разберите имеющуюся настройку. Для чистого сервера выполните команду ниже.

Установите Certbot из snap
sudo snap install --classic certbot

Certbot установлен. Дальше вызывайте /snap/bin/certbot: путь не зависит от наличия другой команды certbot в PATH.

Шаг 3. Скачайте настройку репозитория #

Репозиторий — источник пакетов Mattermost. curl сохраняет официальный скрипт; пока ничего не устанавливаем. Посмотрите файл командой less mattermost-repo-setup.sh; выход — q.

Скачайте настройку репозитория
curl -fL -o mattermost-repo-setup.sh https://deb.packages.mattermost.com/repo-setup.sh

Получен скрипт, а не HTML-страница ошибки.

Шаг 4. Подключите репозиторий Mattermost #

Запустим проверенный скрипт и обновим список пакетов. Скрипт добавляет источники Mattermost и сопутствующих компонентов.

Подключите репозиторий Mattermost
# Прочитайте скрипт перед выполнением.
sudo bash mattermost-repo-setup.sh mattermost
sudo apt update

sudo apt update не сообщает об ошибке подписи или недоступном репозитории.

Шаг 5. Установите выбранный релиз #

Установим 11.11.1-1 и удержим пакет от случайного обновления. Это ещё не запуск приложения: сначала подготовим базу и конфигурацию.

Установите выбранный релиз
sudo apt install mattermost=11.11.1-1
sudo apt-mark hold mattermost

Пакет установлен. Команда apt-mark сообщает, что mattermost удерживается.

Шаг 6. Подготовьте конфигурацию и каталог вложений #

Скопируем стандартные настройки в рабочий config.json. Каталог data хранит загруженные файлы; владелец mattermost позволяет приложению записывать их без прав root.

Подготовьте конфигурацию и каталог вложений
sudo install -C -m 600 -o mattermost -g mattermost \
  /opt/mattermost/config/config.defaults.json /opt/mattermost/config/config.json
sudo install -d -o mattermost -g mattermost -m 750 /opt/mattermost/data
sudo install -d -m 755 /etc/mattermost

Файл /opt/mattermost/config/config.json и каталог /opt/mattermost/data существуют. Не меняйте их владельца на своего SSH-пользователя.

Шаг 7. Создайте базу и пользователя #

На собственном сервере PostgreSQL откройте sudo -u postgres psql; в managed-сервисе используйте SQL-консоль администратора. Выполните команды ниже именно там. Команда \password спросит новый пароль mmuser; ввод не попадёт в историю SQL.

Создайте базу и пользователя
CREATE ROLE mmuser LOGIN;
\password mmuser
CREATE DATABASE mattermost OWNER mmuser ENCODING 'UTF8' TEMPLATE template0;
\connect mattermost
ALTER SCHEMA public OWNER TO mmuser;
GRANT USAGE, CREATE ON SCHEMA public TO mmuser;
ALTER DATABASE mattermost SET default_text_search_config = 'pg_catalog.english';

Созданы роль mmuser и база mattermost. Пароль сохранён; роль не является суперпользователем.

Шаг 8. Сохраните сертификат базы #

Получите CA-сертификат у владельца PostgreSQL. В терминале приложения откройте файл ниже и вставьте публичный PEM-сертификат целиком, включая BEGIN/END CERTIFICATE. Это сертификат доверия, а не приватный ключ. База должна принимать TLS-подключения с адреса этого сервера.

Сохраните сертификат базы
sudo nano /etc/mattermost/db-ca.pem
sudo chmod 644 /etc/mattermost/db-ca.pem

Сертификат соответствует db.example.internal — замените это имя настоящим адресом базы.

Шаг 9. Проверьте доступ к PostgreSQL #

Проверим соединение с сервера приложения. Введите пароль mmuser по запросу. verify-full проверяет сертификат и имя базы; при ошибке исправьте адрес, CA или сетевые правила.

Проверьте доступ к PostgreSQL
PGSSLMODE=verify-full PGSSLROOTCERT=/etc/mattermost/db-ca.pem psql -h db.example.internal -U mmuser -W -d mattermost -c 'SELECT 1;'

Запрос возвращает число 1. До этого результата Mattermost не запускайте.

Шаг 10. Заполните настройки Mattermost #

Откройте sudo nano /opt/mattermost/config/config.json. Ниже показаны поля для изменения, а не замена всего файла. SiteURL — адрес в браузере; ListenAddress оставляет приложение на локальном порту 8065. В DataSource замените адрес и пароль базы. Для пароля со специальными символами требуется URL-кодирование; удобнее заранее создать hex-пароль.

Заполните настройки Mattermost
{
  "ServiceSettings": {
    "SiteURL": "https://chat.example.com",
    "ListenAddress": "127.0.0.1:8065"
  },
  "SqlSettings": {
    "DriverName": "postgres",
    "DataSource": "postgres://mmuser:REPLACE_WITH_URL_ENCODED_PASSWORD@db.example.internal:5432/mattermost?sslmode=verify-full&sslrootcert=/etc/mattermost/db-ca.pem&connect_timeout=10"
  },
  "FileSettings": {
    "DriverName": "local",
    "Directory": "/opt/mattermost/data"
  },
  "SupportSettings": {
    "SupportEmail": "admin@example.com"
  }
}

JSON сохранён без потери остальных разделов; имя базы, пароль и путь к CA совпадают с предыдущими шагами.

Шаг 11. Запустите приложение локально #

Запустим службу и включим её запуск после перезагрузки. Сначала обращаемся к приложению на самом сервере, чтобы отделить ошибки базы от ошибок HTTPS.

Запустите приложение локально
sudo systemctl enable --now mattermost
curl -fsS http://127.0.0.1:8065/api/v4/system/ping

Локальный ping возвращает статус OK. Если служба завершилась, смотрите journalctl -u mattermost и исправьте конфигурацию.

Шаг 12. Создайте временный HTTP-сайт #

Домен chat.example.com должен указывать на этот сервер. Создадим сайт только для проверки домена Certbot; он пока не открывает Mattermost посетителям. Порты 80 и 443 должны быть разрешены у провайдера.

Создайте временный HTTP-сайт
sudo install -d -m 755 /var/www/acme
sudo tee /etc/nginx/sites-available/mattermost >/dev/null <<'NGINX'
server {
    listen 80;
    server_name chat.example.com;
    root /var/www/acme;
    location /.well-known/acme-challenge/ { try_files $uri =404; }
    location / { return 404; }
}
NGINX
sudo ln -sfn /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost

Сайт подключён ссылкой в sites-enabled. Во всех строках указан ваш домен.

Шаг 13. Примените временный сайт #

Сначала проверьте синтаксис. Выполните reload только после сообщения successful: он перечитывает настройки без остановки Nginx.

Примените временный сайт
sudo nginx -t && sudo systemctl reload nginx

nginx -t завершился успешно. Ошибка duplicate server name означает, что нужно проверить другие сайты этого домена.

Шаг 14. Получите HTTPS-сертификат #

Certbot проверит доступность домена через временный сайт. Замените домен и почту администратора своими.

Сертификат выпускается через webroot, поэтому deploy-hook перечитывает Nginx после успешного продления. Certbot сохраняет этот параметр для следующих запусков; это нужно, чтобы Nginx начал выдавать новый сертификат.

Получите HTTPS-сертификат
# После включения временного HTTP-сайта с root /var/www/acme:
sudo /snap/bin/certbot certonly --webroot -w /var/www/acme \
  -d chat.example.com --email admin@example.com --agree-tos --deploy-hook "systemctl reload nginx"

Certbot сообщил о выпуске сертификата; при ошибке проверьте DNS и входящий TCP 80.

Шаг 15. Настройте HTTPS-прокси #

Откройте sudo nano /etc/nginx/sites-available/mattermost и замените временный сайт шаблоном ниже. Nginx принимает HTTPS и передаёт запросы локальному Mattermost; WebSocket нужен для обновления сообщений. Замените домен во всех путях сертификатов.

Настройте HTTPS-прокси
server {
    listen 80;
    server_name chat.example.com;
    location /.well-known/acme-challenge/ {
        root /var/www/acme;
        try_files $uri =404;
    }
    location / { return 301 https://$host$request_uri; }
}
server {
    listen 443 ssl;
    server_name chat.example.com;
    ssl_certificate /etc/letsencrypt/live/chat.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/chat.example.com/privkey.pem;
    client_max_body_size 100M;
    location / {
        proxy_pass http://127.0.0.1:8065;
        proxy_http_version 1.1;
        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 Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 3600s;
    }
}

Сохранён полный шаблон; порт 8065 не открыт в Интернет.

Шаг 16. Проверьте и включите HTTPS-сайт #

Первые две строки проверяют и применяют Nginx; при ошибке первой не выполняйте вторую. Затем проверим службу и внешний API. Журнал помогает найти ошибку приложения, dry-run проверяет продление сертификата.

Проверьте и включите HTTPS-сайт
sudo nginx -t && sudo systemctl reload nginx
sudo systemctl status mattermost --no-pager
curl -fsS https://chat.example.com/api/v4/system/ping
sudo journalctl -u mattermost --since '15 minutes ago'
sudo /snap/bin/certbot renew --dry-run
systemctl list-timers --all 'snap.certbot.renew*'

Ping возвращает OK; сертификат доверенный и пробное продление успешно.

У таймера snap.certbot.renew есть следующий запуск. Не закрывайте TCP 80: проверка домена при продлении использует тот же webroot.

Шаг 17. Создайте администратора и команду #

На своём компьютере откройте https://chat.example.com. Создайте первую учётную запись с уникальным паролем и первую команду. Первая учётная запись управляет сервером; для ежедневной работы позднее создайте обычную.

Открывается команда и вы можете написать сообщение в её канале.

Шаг 18. Настройте почту и приглашения #

В System Console заполните SMTP по данным почтового сервиса: сервер, порт, логин, пароль и TLS. Отправьте тестовое письмо, затем пригласите вторую учётную запись. Ограничьте создание новых команд и регистрацию по правилам вашей организации.

Второй пользователь получил приглашение, вошёл и видит сообщение; посторонний не может зарегистрироваться выбранным запрещённым способом.

Шаг 19. Подготовьте место и остановите запись #

Для согласованной копии базы и вложений нужен короткий перерыв. Предупредите пользователей. Остановим только Mattermost и подготовим закрытый каталог копии.

Подготовьте место и остановите запись
sudo systemctl stop mattermost
sudo install -d -o "$USER" -g "$(id -gn)" -m 700 /var/backups/mattermost

Служба остановлена; пользователи не могут менять данные до завершения копии.

Шаг 20. Скопируйте базу сообщений #

pg_dump обращается к той же базе и проверяет TLS. Введите пароль роли. В дампе находятся пользователи, каналы и сообщения; вложения сохраняются отдельно.

Скопируйте базу сообщений
PGSSLMODE=verify-full PGSSLROOTCERT=/etc/mattermost/db-ca.pem \
  pg_dump -h db.example.internal -U mmuser -W -Fc mattermost \
  -f /var/backups/mattermost/database.dump

Команда завершилась без ошибок и database.dump не пуст. При ошибке не считайте копию готовой.

Шаг 21. Скопируйте вложения и настройки #

Архив /opt/mattermost включает рабочую конфигурацию, файлы и плагины. Он содержит секреты, поэтому ограничим доступ к обеим частям копии.

Скопируйте вложения и настройки
sudo tar -czf /var/backups/mattermost/application.tar.gz -C /opt mattermost
sudo chmod 600 /var/backups/mattermost/database.dump /var/backups/mattermost/application.tar.gz

application.tar.gz создан; оба файла доступны только владельцу и root.

Шаг 22. Верните доступ и проверьте копию #

Запустите приложение. Перенесите обе копии в закрытое хранилище на другой машине. Восстанавливать их нужно вместе на изолированном сервере совместимой версии; успешный вход и открытие старого вложения подтверждают восстановление.

Верните доступ и проверьте копию
# Только после успешного завершения копии:
sudo systemctl start mattermost

После запуска снова отправляется сообщение. Назначены регулярные копии и отдельная проверка восстановления.

Если результат шага отличается #

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

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

Обсудить установку и настройку

Материал был полезен?

Сообщить об ошибке или задать вопрос редакции

Сообщение увидит редакция. Не указывайте пароли и личные данные. Текст удаляется через 180 дней.

О материале

ИнфраструктураРуководствоЗадача: установитьУровень: практикаMattermost

Последнее обновление:

Обсуждение

Комментарии проходят подтверждение адреса и проверку редакцией.