Протестировано на:
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 и в нашем Телеграф-канале. 📋 Все команды