Instalar y configurar un servidor Mattermost en Ubuntu 18.04

¿Que es Mattermost?

Mattermost es un servicio de chat en línea de código abierto y autohospedable con intercambio de archivos, búsqueda e integraciones. Está diseñado como un chat interno para organizaciones y empresas, y se comercializa principalmente como una alternativa de código abierto para Slack y Microsoft Teams.

Actualizar el sistema

sudo apt update && apt upgrade -y

Instalar servidor de bases de datos PostgreSQL

sudo apt install postgresql postgresql-contrib

Nota: ahora puedes iniciar el servidor de bases de datos con:

/usr/lib/postgresql/10/bin/pg_ctl -D /var/lib/postgresql/10/main -l logfile start

Nota: Despues de la instalacion se ha creado un usuario en nuestro sistema GNU/Linux con nombre “postgres”

Iniciar sesion con usuario postgres

sudo --login --user postgres

Iniciar la terminal PostgreSQL

psql

Crear base de datos para Mattermost

postgres=# CREATE DATABASE mattermost;

Crear usuario para la base de datos de Mattermost

postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password';

Garantizar todos los privilegios al usuario sobre la base de datos de Mattermost

postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;

Salir de la terminal de PostgreSQL

postgres=# \q

Salir de la sesion en GNU/Linux del usuario postgres

exit

Modificar el archivo pg_hba.conf para que se comunique con la base de datos

sudo nano /etc/postgresql/10/main/pg_hba.conf

Buscar la linea:

local   all             all                        peer

Y modificarla por:

local   all             all                        trust

Reiniciar el servicio PostgreSQL

sudo systemctl reload postgresql

Verificar si te puedes conectar a la base de datos de Mattermos en PosgreSQL

psql --dbname=mattermost --username=mmuser --password

Si todo salio bien entraremos a la terminal de PostgreSQL y solo debemos salir

\q

Instalar Servidor Mattermost 5.17.1

Descargar Mattermost

wget https://releases.mattermost.com/5.17.1/mattermost-5.17.1-linux-amd64.tar.gz

Descomprimir el archivo descargado

tar -xvzf mattermost-5.17.1-linux-amd64.tar.gz

Mover la carpeta extraida a /opt

sudo mv mattermost /opt

Crear el almacenamiento para los archivos de los usuario en Mattermost

sudo mkdir /opt/mattermost/data

Crear usuario mattermost y grupo de usuario mattermost

sudo useradd --system --user-group mattermost

Definir al usuario y gupo de usuario mattermost como dueño de la ruta /opt/mattermost

sudo chown -R mattermost:mattermost /opt/mattermost

Definir permisos de escritura al usuario y grupo de usuarios mattermost de la ruta /opt/mattermost

sudo chmod -R g+w /opt/mattermost

Configurar el archivo /opt/mattermost/config/config.json para la conexion a la base de datos

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

Nota: Buscar la linea

"postgres://mmuser:mmuser-password@localhost:5432/mattermost?sslmode=disable\u0026connect_timeout=10",

Y reemplazar por los valores correctos de tu base de datos. No olvides cambiar la linea -> “mysql” y cambiarla por “postgres”

Probar Mattermost ingresando al directorio

cd /opt/mattermost

Ejecutar el servidor Mattermost como usuario mattermost

sudo -u mattermost ./bin/mattermost

Si todo salio bien se debe ejecutar el servicio y mostrar en una linea el texto “Server is listening on :8065”

Cancelar la orden para continuar con ctrl+c

Configurar systemd para iniciar automáticamente el servicio de Mattermost

Ejecutar el servidor Mattermost como usuario mattermost

Crear el archivo .service correspondiente a Mattermost

sudo nano /lib/systemd/system/mattermost.service

Recomendamos utilizar la siguiente configuración aunque puedes elegir la que prefieras

[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
Requires=postgresql.service
[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152
[Install]
WantedBy=postgresql.service

Hacer que systemd lea el nuevo archivo

sudo systemctl daemon-reload

Iniciar el servicio

sudo systemctl start mattermost.service

Debemos leer un texto como el siguiente:

● mattermost.service - Mattermost
   Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; ven
   Active: active (running) since Thu 2048-XX-XX 00:00:00 UTC; 0s ago

Asegurarse que Mattermost funciona mostrando un código HTML

	curl http://localhost:8065

Configurar el servicio de Mattermost para que se inicie cuando encienda el servidor

sudo systemctl enable mattermost.service

Configurar el servidor Mattermost

Configurar el reverse proxy (en nuestro caso usamos NGINX) por lo que crearemos el archivo TUDOMINIO.conf

nano /etc/nginx/conf.d/TUDOMINIO.conf

y dentro colocaremos la siguiente configuración reemplazando TUDOMINIO con tu dominio asignado

Nota: Estas especificaciones contienen también la configuración del certificado de seguridad que se genero con Let’s Encrypt en lo que no profundizaremos ahora

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
upstream mattermost_backend {
  server 127.0.0.1:8065;
}
server {
    listen 80;
    server_name TUDOMINIO www.TUDOMINIO;
    include snippets/letsencrypt.conf;
    return 301 https://TUDOMINIO$request_uri;
}
server {
    listen 443 ssl http2;
    server_name www.TUDOMINIO;
    ssl_certificate /etc/letsencrypt/live/TUDOMINIO/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/TUDOMINIO/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/TUDOMINIO/chain.pem;
    include snippets/ssl.conf;
    return 301 https://TUDOMINIO$request_uri;
}
server {
    listen 443 ssl http2;
    server_name TUDOMINIO;
    ssl_certificate /etc/letsencrypt/live/TUDOMINIO/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/TUDOMINIO/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/TUDOMINIO/chain.pem;
    include snippets/ssl.conf;
    access_log /var/log/nginx/TUDOMINIO-access.log;
    error_log /var/log/nginx/TUDOMINIO-error.log;
    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;
       proxy_read_timeout 600s;
       proxy_pass http://mattermost_backend;
    }
    location / {
       proxy_http_version 1.1;
       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_pass http://mattermost_backend;
    }
}

Reiniciar nuestro servicio de NGINX

systemctl restart nginx

Ir a nuestro navegador a la dirección http:localhost:8065

Al entrar a Mattermost debemos crear el primer usuario y equipo; El primer usuario en el sistema cumplirá el rol de administrador y tendrá acceso a la consola del sistema

Dentro de las configuraciones podrás modificar lo que quieras y todas las cuestiones generales de Mattermost, te recomendamos leer la documentación oficial de Mattermost y también leer esta guía de instalación de Linuxize

Esperamos que esta documentación les sirva y Happy hacking