Пошаговая инструкция · Самостоятельная установка
Как установить Mattermost на сервер с PostgreSQL и HTTPS
Пошаговая инструкция для самостоятельной установки. Развернём Mattermost для рабочей переписки: установим сервер из официального репозитория, подключим PostgreSQL, настроим HTTPS и проверим сообщения, файлы и приглашения.
Что подготовить и как читать инструкцию #
Для 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-16apt завершился без ошибок; переходить к репозиторию можно после завершения установки.
Шаг 2. Установите Certbot из snap #
Плагин Nginx включён в официальный snap Certbot. Используем один способ установки: если Certbot уже установлен через apt, не ставьте поверх него вторую версию; сначала разберите имеющуюся настройку. Для чистого сервера выполните команду ниже.
snapsudo snap install --classic certbotCertbot установлен. Дальше вызывайте /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 и сопутствующих компонентов.
# Прочитайте скрипт перед выполнением.
sudo bash mattermost-repo-setup.sh mattermost
sudo apt updatesudo 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 или сетевые правила.
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-пароль.
{
"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 должны быть разрешены у провайдера.
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 nginxnginx -t завершился успешно. Ошибка duplicate server name означает, что нужно проверить другие сайты этого домена.
Шаг 14. Получите HTTPS-сертификат #
Certbot проверит доступность домена через временный сайт. Замените домен и почту администратора своими.
Сертификат выпускается через webroot, поэтому deploy-hook перечитывает Nginx после успешного продления. Certbot сохраняет этот параметр для следующих запусков; это нужно, чтобы Nginx начал выдавать новый сертификат.
# После включения временного 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 нужен для обновления сообщений. Замените домен во всех путях сертификатов.
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 проверяет продление сертификата.
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.gzapplication.tar.gz создан; оба файла доступны только владельцу и root.
Шаг 22. Верните доступ и проверьте копию #
Запустите приложение. Перенесите обе копии в закрытое хранилище на другой машине. Восстанавливать их нужно вместе на изолированном сервере совместимой версии; успешный вход и открытие старого вложения подтверждают восстановление.
# Только после успешного завершения копии:
sudo systemctl start mattermostПосле запуска снова отправляется сообщение. Назначены регулярные копии и отдельная проверка восстановления.
Если результат шага отличается #
Вернитесь к проверке того шага, на котором появилась ошибка. Первая ошибка в выводе обычно полезнее последних строк: последующие команды могли не получить нужный файл или работающую службу. Не повторяйте установку целиком поверх частично настроенного приложения.
Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.