Cómo instalar el sistema de mensajería en equipo Mattermost en Ubuntu 22.04

Mattermost es una plataforma de mensajería de código abierto utilizada para chatear, compartir archivos, gestionar proyectos y orquestar flujos de trabajo. Está escrita en lenguaje Go. Se ofrece como solución alojada en la nube y como servidor autoalojado. Es una alternativa a Slack y otras plataformas profesionales. La posibilidad de alojarlo en tu servidor te permite tener control sobre tus comunicaciones y datos sensibles.

En este tutorial, aprenderás a instalar Mattermost Team Messaging System en un servidor Ubuntu 22.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04 con un mínimo de 2 GB de RAM para hasta 1000 usuarios.
  • Un usuario no root con privilegios sudo.
  • El Cortafuegos sin complicaciones (UFW) está activado y en ejecución.
  • Un nombre de dominio Totalmente Cualificado apuntando al servidor. Para nuestro tutorial, utilizaremos el dominio mattermost.example.com.
  • Todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    

Paso 1 – Configurar el Cortafuegos

El primer paso antes de instalar ningún paquete es configurar el cortafuegos para que permita las conexiones HTTP y HTTPS.

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

El puerto 8065 es necesario para Mattermost. Este puerto debe abrirse sólo temporalmente para confirmar la instalación. Lo eliminaremos más adelante.

$ sudo ufw allow 8065

Permite los puertos HTTP y HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Comprueba de nuevo el estado para confirmarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
8065                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
8065 (v6)                  ALLOW       Anywhere (v6)

Paso 2 – Instalar PostgreSQL

Mattermost puede funcionar tanto con servidores MySQL como PostgreSQL, pero PostgreSQL es la opción recomendada.

Ubuntu 22.04 incluye la última versión estable (v14) de PostgreSQL. Puedes instalarla con un solo comando.

$ sudo apt install postgresql postgresql-contrib

Comprueba la versión de MySQL.

$ psql --version
psql (PostgreSQL) 14.4 (Ubuntu 14.4-0ubuntu0.22.04.1)

Paso 3 – Configurar PostgreSQL

PostgreSQL crea una cuenta de usuario Linux postgres durante la instalación. Se puede acceder al shell de PostgreSQL utilizando esta cuenta.

Accede al shell PostgreSQL.

$ sudo -u postgres psql

Crea la base de datos Mattermost.

postgres=# CREATE DATABASE mattermostdb;

Crea el usuario de la base de datos Mattermost. Sustituye mmuser-password por una contraseña más segura de tu elección.

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

Concede todos los privilegios sobre la base de datos al usuario.

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

Sal del intérprete de comandos PostgreSQL introduciendo \q en el intérprete de comandos.

postgres=# \q

Abre el archivo /etc/postgresql/{version}/main/pg_hba.conf para editarlo.

$ sudo nano /etc/postgresql/{version}/main/pg_hba.conf

Busca las siguientes líneas.

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256

Cambia los valores peer y scram-sha-256 por trust en las líneas anteriores.

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Reinicia el servicio PostgreSQL para activar el cambio.

$ sudo systemctl restart postgresql

Comprueba que puedes conectarte con el usuario SQL de Mattermost.

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

Se te pedirá la contraseña. Introdúcela y accederás al shell de PostgreSQL. Introduce \q para salir del intérprete de comandos.

Password:
psql (14.4 (Ubuntu 14.4-0ubuntu0.22.04.1))
Type "help" for help.

mattermost-> \q

Paso 4 – Descarga Mattermost

Descarga la última versión del servidor Mattermost. En el momento de escribir este tutorial, la última versión disponible es la 7.0.1.

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

Extrae el archivo.

$ tar -xvzf mattermost*.gz

Mueve los archivos extraídos al directorio /opt.

$ sudo mv mattermost /opt

Crea el directorio de almacenamiento de datos para el servidor Mattermost.

$ sudo mkdir /opt/mattermost/data

Paso 5 – Crear un usuario de sistema para Mattermost y configurar los permisos

Abre el archivo de configuración /opt/mattermost/config/config.json para editarlo.

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

Establece la variable SiteURL con el nombre de dominio que quieras utilizar para tu instalación.

"SiteURL": "https://mattermost.example.com",

Busca la variable DriverName debajo de SqlSettings y cambia su valor a mysql.

"DriverName": "mysql",

Establece la variable DataSource con el siguiente valor. Sustituye mmuser por el nombre de usuario SQL, YourPassword23! por la contraseña SQL y mattermostdb por el nombre de la base de datos, que configuraste en el paso 4.

"DataSource": "mmuser:YourPassword23!@tcp(localhost:3306)/mattermostdb?charset=utf8mb4,utf8&writeTimeout=30s",

Hay muchos otros ajustes que puedes configurar en este punto, pero sería más fácil hacerlo después de la instalación. Por ahora, sólo estos dos ajustes son esenciales.

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Crea un usuario y un grupo de sistema para el servidor Mattermost.

$ sudo useradd --system --user-group mattermost

Cambia la propiedad del directorio Mattermost al usuario y grupo recién creados.

$ sudo chown -R mattermost:mattermost /opt/mattermost

Da permisos de escritura al grupo mattermost en el directorio.

$ sudo chmod -R g+w /opt/mattermost

Cambia al directorio Mattermost.

$ cd /opt/mattermost

Inicia el servidor Mattermost como usuario mattermost.

$ sudo -u mattermost ./bin/mattermost

El servidor se iniciará y generará un montón de información de registro. Espera a que aparezca la línea Server is listening on [::]:8065. Visita la URL http://<serverIPaddress>:8065 en tu navegador y verás la siguiente página de inicio de sesión.

Página de creación de la cuenta Mattermost

Pulsa Ctrl + C para detener el servidor. Volveremos a esto más adelante para configurar la instalación.

Paso 6 – Crear un archivo de unidad Systemd

El siguiente paso es crear un archivo de sistema para Mattermost.

Crea y abre el archivo de unidad para editarlo.

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

Pega en él el siguiente código.

[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
BindsTo=postgresql.service

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Recarga el demonio systemd para cargar el archivo de servicio.

$ sudo systemctl daemon-reload

Inicia el servicio Mattermost.

$ sudo systemctl start mattermost

Comprueba el estado del servicio.

? mattermost.service - Mattermost
     Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-07-11 01:24:46 UTC; 20s ago
   Main PID: 23628 (mattermost)
      Tasks: 48 (limit: 2241)
     Memory: 448.2M
        CPU: 14.929s
     CGroup: /system.slice/mattermost.service
             ??23628 /opt/mattermost/bin/mattermost
             ??23651 plugins/com.mattermost.plugin-channel-export/server/dist/plugin-linux-amd64
             ??23656 plugins/com.mattermost.nps/server/dist/plugin-linux-amd64
             ??23662 plugins/com.mattermost.calls/server/dist/plugin-linux-amd64
             ??23668 plugins/com.mattermost.apps/server/dist/plugin-linux-amd64
             ??23674 plugins/playbooks/server/dist/plugin-linux-amd64
             ??23683 plugins/focalboard/server/dist/plugin-linux-amd64
 ....

Habilita el servicio.

$ sudo systemctl enable mattermost

Paso 7 – Instalar Nginx

Ubuntu 22.04 incluye una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.0

Paso 8 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d mattermost.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/mattermost.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Abre el archivo /etc/letsencrypt/renewal/mattermost.example.com.conf para editarlo.

$ sudo nano /etc/letsencrypt/renewal/mattermost.example.com.conf

Pega el siguiente código en la parte inferior.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Hemos generado el certificado SSL utilizando la opción autónoma de Certbot. Ejecuta su servidor web para crear el certificado, lo que significa que Nginx debe estar apagado durante la renovación. Los comandos pre_hook y post_hook se ejecutan antes y después de la renovación para apagar y reiniciar automáticamente el servidor Nginx, por lo que no requieren intervención manual.

Para comprobar si la renovación SSL funciona correctamente, realiza una ejecución en seco del proceso.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 9 – Configurar Nginx

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Crea y abre el archivo /etc/nginx/conf.d/monica.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/mattermost.conf

Pega en él el siguiente código. Sustituye mattermost.example.com por el nombre de tu dominio. Asegúrate de que el valor de client_max_body_size se establece en 10 MB, que es el tamaño de subida de archivos por defecto en Monica. Es el mismo valor que configuramos antes con PHP.

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 default_server;
  server_name   mattermost.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name    mattermost.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/mattermost.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/mattermost.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/mattermost.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # HSTS (ngx_http_headers_module is required) (15768000 seconds = six months)
   add_header Strict-Transport-Security max-age=15768000;
   # OCSP Stapling ---
   # fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   add_header X-Early-Data $tls1_3_early_data;

   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_http_version 1.1;
       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;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Da permisos a Nginx en el directorio de caché.

$ sudo chown -R nginx:nginx /var/cache/nginx

Verifica la configuración de Nginx.

$ sudo nginx -t

Reinicia el servidor Nginx.

$ sudo systemctl restart nginx

Paso 10 – Accede al Servidor Mattermost

Abre la URL https://mattermost.example.com en tu navegador y serás recibido con la página de registro como se muestra en el paso 5. Introduce los datos de tu cuenta y se establecerá como Administrador del sistema.

Antes de seguir adelante, tenemos que cerrar el puerto 8065, ya que hemos configurado Mattermost para que sea accesible a través de una URL pública. Por lo tanto, el puerto abierto supone un riesgo para la seguridad.

$ sudo ufw delete allow 8065

A continuación, accederás a la página de creación de equipos.

Página de creación del equipo Mattermost

Haz clic en el botón Crear un equipo para crear tu primer equipo.

Nuevo equipo Mattermost

A continuación, se te pedirá que establezcas una URL pública para el equipo.

URL del equipo Mattermost

Haz clic en el botón Finalizar para abrir el Panel de Control de Mattermost.

Panel Mattermost

Paso 11 – Configurar el Servidor Mattermost

Puedes configurar Mattermost utilizando el archivo config.json o utilizando la consola del sistema desde el panel de control. Nosotros lo haremos a través del panel de control, ya que es mucho más sencillo. Haz clic en el Botón de Producto de la esquina superior izquierda y selecciona la opción Consola del sistema.

Menú de la consola del sistema Mattermost

Accederás al panel de control de la consola del Sistema, desde donde podrás configurar todo lo relacionado con el servidor.

Configurar las notificaciones por correo electrónico

Una de las características más importantes de un sistema de mensajería son las notificaciones por correo electrónico.

El primer paso es activar las notificaciones. Visita Consola del Sistema >> Configuración del Sitio >> menú Notificaciones y configura las siguientes opciones.

  • Establece Activar Notificaciones por Correo Electr ónico como verdadero
  • Establece el Nombre a Mostrar de la Notificación como Sin Respuesta
  • Establece Dirección de origen de la notificación como [email protected].
  • Establece la dirección de correo electrónico de soporte como [email protected]

Notificaciones por correo electrónico de Mattermost

El siguiente paso es activar SMTP. Visita Consola del Sistema >> Entorno >> Menú SMTP y configura las siguientes opciones. Para nuestro tutorial, estamos utilizando el servidor de correo Amazon SES.

  • Establece el Servidor SM TP como {Servidor SMTP}.
  • Establece el Puerto del Servidor SMTP a 465
  • Establece Activar Autenticación SMTP como verdadero
  • Establece el Nombre de usuario del servidor SMTP en {SES-username}
  • Establece la Contraseña del Servidor SMTP en {SES-Key}
  • Establece la Seguridad de la Conexión en TLS o STARTTLS, dependiendo de lo que acepte el servidor SMTP

Haz clic en el botón Probar conexión para confirmar la configuración SMTP.

Configuración SMTP de Mattermost

Hay muchos más ajustes que configurar. Cuando hayas terminado, tienes que reiniciar el servidor desde el terminal para que se apliquen los cambios.

$ sudo systemctl restart mattermost

Conclusión

Con esto concluye nuestro tutorial sobre la instalación y configuración del sistema de mensajería en equipo Mattermost en un servidor Ubuntu 22.04. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...