Паровой телеграф на платиновых клапанах: Mattermost на Debian с PostgreSQL

Протестировано на:

Debian: 12

Любой гильдии нужен надёжный узел связи, и Mattermost — это тот самый закрытый телеграф с латунными клеммами безопасности. Он бесплатен, опенсорсен, хранит историю переписки вечно и умеет в двухфакторку, вебхуки, ботов и интеграции с вашими паровыми CI/CD-машинами.

Сегодня мы возьмём чистый Debian 12, разожжём в топке не старый угольный MySQL, а высокооктановый PostgreSQL, и соберём Mattermost последней Team-сборки. Все неочевидные медные гайки, от формата строки подключения до правильного systemd-юнита, — из моего личного полевого журнала.



Шаг 0. Растапливаем котёл PostgreSQL

Mattermost требует современный PostgreSQL (рекомендуется 16-я версия). Ставим из официального репозитория — так мы получим свежие шестерёнки без компромиссов.

sudo apt update && sudo apt upgrade -y
sudo apt install curl ca-certificates
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
sudo apt install postgresql-16 -y

Запускаем и прописываем в автозагрузку:

sudo systemctl enable postgresql --now

Теперь создадим роль и базу данных. Обратите внимание: пароль должен быть надёжным, но не содержать незакодированных спецсимволов — о кодировании поговорим чуть позже.

sudo -u postgres psql

Внутри консоли:

CREATE ROLE mattermost WITH LOGIN PASSWORD 'ВашСуперПароль';
CREATE DATABASE mattermost OWNER mattermost ENCODING 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE template0;
\q

💡 Совет

Если локаль en_US.UTF-8 не сгенерирована, создайте её командой

sudo locale-gen en_US.UTF-8

, иначе база не соберётся. Я однажды застрял на этом на полсмены.

Проверяем, что искра проскочила:

psql -h 127.0.0.1 -U mattermost -d mattermost -c "SELECT version();"

Шаг 1. Скачиваем и монтируем механизм Mattermost

Создаём непривилегированного пользователя для службы:

sudo useradd --system --user-group mattermost

Скачиваем последнюю Team-сборку (на момент написания — 11.7.2; проверяйте актуальную на странице загрузок):

wget https://releases.mattermost.com/11.7.2/mattermost-team-11.7.2-linux-amd64.tar.gz
tar -xvzf mattermost-team-11.7.2-linux-amd64.tar.gz
sudo mv mattermost /opt
sudo mkdir -p /opt/mattermost/data

Назначаем правильного владельца, чтобы у телеграфиста был доступ к чернильнице:

sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod -R g+w /opt/mattermost

Шаг 2. Калибруем конфигурационный манифест

Сердце агрегата — файл /opt/mattermost/config/config.json. Открываем его медным ключом nano или vim и находим секцию SqlSettings. Приводим её к вот такому рабочему состоянию:

"SqlSettings": {
    "DriverName": "postgres",
    "DataSource": "postgres://mattermost:ВашСуперПароль@127.0.0.1:5432/mattermost?sslmode=disable&connect_timeout=10",
    "DataSourceReplicas": [],
    ...
}

⚡ Важно

Если пароль содержит символы @, :, /, ?, % и т.д., их обязательно нужно URL-кодировать. Иначе телеграф не сможет подключиться к котлу. Для проверки используйте команду:

python3 -c "import urllib.parse; print(urllib.parse.quote_plus('ВашСуперПароль'))"

Используйте то, что выведется. Я как-то полночи искал утечку пара именно из-за незакодированной @.

В этом же файле поправьте SiteURL в секции ServiceSettings. Если планируете заезд через Nginx, укажите полный URL (например, http://chat.guild.local). Пока оставьте http://localhost:8065, мы вернёмся к этому после настройки прокси.

Шаг 3. Заводной systemd-юнит

Создаём файл /etc/systemd/system/mattermost.service:

[Unit]
Description=Mattermost Steam Messenger
After=network.target postgresql.service
Requires=postgresql.service

[Service]
Type=simple
User=mattermost
Group=mattermost
WorkingDirectory=/opt/mattermost
ExecStart=/opt/mattermost/bin/mattermost
Restart=on-failure
RestartSec=10
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

Почему именно так?

  • Type=simple надёжнее notify, потому что Mattermost не всегда шлёт уведомление о готовности.
  • Requires гарантирует, что без прогретого PostgreSQL служба не тронется.
  • LimitNOFILE поднимает лимит открытых заслонок, чтобы не захлебнуться на пиковых нагрузках.

Применяем:

sudo systemctl daemon-reload
sudo systemctl enable mattermost --now

Проверяем, не дымит ли:

systemctl status mattermost
sudo journalctl -u mattermost -f

Если в логах видна строка Server is listening on :8065, шестерёнки сцепились верно.

Шаг 4. Обратный прокси-шлюз Nginx

Телеграф слушает порт 8065, но пускать сигналы напрямую — плохой тон. Ставим Nginx в качестве распределительного щита.

sudo apt install nginx -y

Конфигурация виртуального хоста /etc/nginx/sites-available/mattermost:

server {
    listen 80;
    server_name chat.guild.local;

    location / {
        proxy_pass http://127.0.0.1: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_read_timeout 90;
    }
}

Включаем сайт и перезагружаем Nginx:

sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Теперь можно вернуться в config.json и поменять SiteURL на http://chat.guild.local (или ваш домен). Не забудьте перезапустить Mattermost:

sudo systemctl restart mattermost

Убедитесь, что имя хоста резолвится: добавьте в /etc/hosts строку 127.0.0.1 chat.guild.local хотя бы на время тестов.

Шаг 5. Первый выход в эфир: создание администратора

Переходим браузером на http://chat.guild.local (или IP-адрес:8065, если прокси ещё не готов). Видим форму регистрации. Первый созданный аккаунт автоматически получит права администратора.

Первая учётная запись — главный телеграфист всей системы

Заполните email, имя и пароль. После входа обязательно настройте SMTP в System Console → Environment → SMTP, иначе приглашения для команды не улетят. Я обычно использую внешний почтовый насос вроде Mailgun или локальный Postfix.

Куда двигаться дальше

Телеграф запущен. Теперь можно приглашать гильдию, настраивать каналы, подключать вебхуки к GitLab или Jenkins, создавать ботов и наслаждаться полным контролем над перепиской.

💡 Совет

Настройте регулярное резервное копирование базы данных и каталога /opt/mattermost/data. Латунь со временем окисляется, и без бэкапов можно потерять ценную переписку.

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



⚙️ Машинное отделение ROADIT благодарит за прочтение.

Больше команд, шпаргалок и обзоров — на roadit.ru и в нашем Телеграф-канале. 📋 Все команды

Оставьте комментарий