# Установка Mattermost на Ubuntu

**Mattermost** — это платформа для обмена сообщениями и совместной работы, которую можно установить на собственных серверах или в облаке. Mattermost является альтернативой таким мессенджерам как [Slack](https://slack.com/) и [RocketChat](https://www.rocket.chat/).

В этом гайде мы рассмотрим тарифный план Free, который включает в себя безлимитную историю сообщений и групповые звонки ([подробнее о тарифах](https://mattermost.com/pricing/)). Клиенты Mattemost доступны на мобильных платформах (IOS, Android), в десктоп-версиях (Windows, Linux, Mac), также поддерживается браузерная версия.

> Для тарифа Free доступна только Self Hosted версия; далее будет разбираться установка на Ubuntu. Ознакомиться с другими способами установки (в том числе и Docker-образ) можно на [официальном сайте](https://mattermost.com/download/).

### Технические требования

На 1000 пользователей минимально потребуется 1 CPU, 2GB RAM и PostgreSQL v11+ (необязательно использовать именно Postgres).

### Установка Mattermost

Теперь можно переходить к самой установке. Для установки подключим репозиторий `deb.packages.mattermost.com/repo-setup.sh`.

```
curl -o- https://deb.packages.mattermost.com/repo-setup.sh | sudo bash -s mattermost
```

Здесь в `sudo bash -s mattermost` передается аргумент `mattermost` для добавления репозитория только Mattermost. Аргументом по умолчанию в данном скрипте является `all`, тогда будут также добавлены репозитории Ngnix, PostgreSQL и Certbot.

Установим сервис. Он будет установлен по пути `/opt/mattermost`. Пользователь `mattermost` и группа `mattermost` будут созданы автоматически.

```
sudo apt update
sudo apt install mattermost -y
```

После установки понадобится создать `config.json` с необходимыми правами (он создается на основе `config.defaults.json`). Чтение и запись в файл будут доступны только для пользователя владельца (в нашем случае это `mattermost`).

```
sudo install -C -m 600 -o mattermost -g mattermost /opt/mattermost/config/config.defaults.json /opt/mattermost/config/config.json
```

В конфиге необходимо заполнить параметры:

```
sudo nano /opt/mattermost/config/config.json
```

- SiteUrl — сюда необходимо прописать созданный домен с протоколом https (в блоке `ServiceSettings`). Позже мы подключим SSL-сертификат.

<figure contenteditable="false" id="bkmrk--2"><div class="figure_wrapper">![](https://content.timeweb.com/assets/7b483263-249e-4b7b-9621-61cddbc1fcd6?width=730&height=500)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure>- DriverName — по умолчанию стоит postgres (в блоке `SqlSettings`).
- DataSource — указать пользователя, пароль, хост и имя БД в ссылке подключения (в блоке `SqlSettings`).

<figure contenteditable="false" id="bkmrk--3"><div class="figure_wrapper">![](https://content.timeweb.com/assets/367a08a5-0b32-424e-9399-9f63923513da?width=799&height=402)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure>Остальные конфиги не важны для первого запуска, и их можно будет изменить позднее в административной консоли Mattermost.

Запускаем сервис Mattermost:

```
sudo systemctl start mattermost
```

Проверим, что ничего не упало и Mattermost поднялся:

```
sudo systemctl status mattermost.service
```

<figure contenteditable="false" id="bkmrk--4"><div class="figure_wrapper">![](https://content.timeweb.com/assets/8627ec6b-d788-4bf9-a99b-b17d36b1a65f?width=854&height=133)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure>А также, что он доступен на порту 8065.

<figure contenteditable="false" id="bkmrk--5"><div class="figure_wrapper">![](https://content.timeweb.com/assets/e328427a-7bef-4a62-90d7-bd2c3abccc9d?width=1574&height=980)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure>Если сайт не открывается, проверьте настройки фаервола. Также можно обратиться к порту локально с сервера:

```
curl -v localhost:8065
```

Дополнительно добавим автозапуск сервиса:

```
sudo systemctl enable mattermost.service
```

#### Nginx

Мы не будем напрямую использовать порт 8065 — он будет позже закрыт фаерволом. Для проксирования запросов установим Nginx.

```
sudo apt install nginx
```

Теперь добавим конфигурацию:

```
sudo nano /etc/nginx/sites-available/mattermost
```

В строке `server_name` необходимо указать свой домен, в нашем случае *mattermost.twc1.net*.

Обратите внимание, что проксируется как HTTP, так и websocket-протоколы.

```
upstream backend {
  server 127.0.0.1:8065;
  keepalive 32;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
  listen 80;
  server_name mattermost.twc1.net;
  location ~ /api/v[0-9]+/(users/)?websocket$ {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    client_max_body_size 50M;
    proxy_set_header Host $http_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;
    client_body_timeout 60;
    send_timeout 300;
    lingering_timeout 5;
    proxy_connect_timeout 90;
    proxy_send_timeout 300;
    proxy_read_timeout 90s;
    proxy_pass http://backend;
  }
  location / {
    client_max_body_size 50M;
    proxy_set_header Connection "";
    proxy_set_header Host $http_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 600s;
    proxy_cache mattermost_cache;
    proxy_cache_revalidate on;
    proxy_cache_min_uses 2;
    proxy_cache_use_stale timeout;
    proxy_cache_lock on;
    proxy_http_version 1.1;
    proxy_pass http://backend;
 }
}
```

Добавим линк конфигурационного файла в `sites-enabled`:

```
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
```

Уберем дефолтный конфиг:

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

Делаем рестарт сервиса Nginx:

```
sudo service nginx restart
```

Теперь выпустим сертификат от Let’s Encrypt для домена через `certbot`:

```
sudo apt install python3-certbot-nginx && certbot
```

Certbot попросит указать почту, домен и после добавит сертификат для домена.

После установки сертификата `certbot` допишет конфигурацию nginx mattermost. Будет добавлена директива `listen` для обработки запросов с 443 порта, директивы с ключами и конфигами для SSL, а также редирект с HTTP на HTTPS.

#### Firewall

Я ограничил входящие TCP запросы портами 22 для работы с SSH, 80 и 443 для TCP. Для сбора метрик на дашборд сервера необходимо открыть также порт 10050; список IP-адресов, для которых необходимо открывать порт, будет в `/etc/zabbix/zabbix_agentd.conf`.

### Первый запуск

Теперь Mattermost будет доступен по адресу https://mattermost.twc1.net/*.*

<figure contenteditable="false" id="bkmrk--7"><div class="figure_wrapper">![](https://content.timeweb.com/assets/ede5fd09-3a8e-4df2-8d8a-f492274b77ee?width=1536&height=878)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure>Можно создать аккаунт и рабочее пространство сразу из браузерной версии.

<figure contenteditable="false" id="bkmrk--8"><div class="figure_wrapper">![](https://content.timeweb.com/assets/b2cdbe85-89b3-4bb7-afe5-135083778005?width=1900&height=861)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure>После установки и при первом входе можно наблюдать проблему с коннектом Web-сокетов.

<figure contenteditable="false" id="bkmrk--9"><div class="figure_wrapper">![](https://content.timeweb.com/assets/b6fede2d-5c62-4764-9027-2d8276740233?width=1910&height=542)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure>Рекомендую проверить конфиги, теперь сделать это можно из System Console.

<figure contenteditable="false" id="bkmrk--10"><div class="figure_wrapper">![](https://content.timeweb.com/assets/15d932e0-2130-4506-ad10-b8f9b57d2d14?width=1464&height=608)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure> Например, моя ошибка заключалась в URL сервера.

<figure contenteditable="false" id="bkmrk--11"><div class="figure_wrapper">![](https://content.timeweb.com/assets/572e9b59-c47d-4610-bba3-2df59ad0a2d5?width=1912&height=911)</div><figcaption class="editable_text" data-placeholder="Caption (optional)" dir="auto"></figcaption></figure>Из коробки будут доступны звонки, playbooks, магазин с плагинами, аутентификация Gitlab. Также сам продукт имеет [отличную документацию](https://docs.mattermost.com/).

[Источник](https://timeweb.cloud/tutorials/servers/ustanovka-mattermost-na-ubuntu)