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.
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.
Haz clic en el botón Crear un equipo para crear tu primer equipo.
A continuación, se te pedirá que establezcas una URL pública para el equipo.
Haz clic en el botón Finalizar para abrir el Panel de Control de 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.
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]
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.
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.