Mattermost es una plataforma de mensajería instantánea de código abierto, una alternativa de Slack autohospedada. Está escrito en Golang y React y puede usar MySQL o PostgreSQL como base de datos. Mattermost reúne toda la comunicación de su equipo en un solo lugar y ofrece varias funciones, como compartir archivos, mensajes individuales y grupales, emojis personalizados, videollamadas y más. En este tutorial, le mostraremos cómo implementar Mattermost en un servidor CentOS 7 y configurar Nginx como proxy inverso SSL.
Requisitos previos #
Asegúrese de cumplir con los siguientes requisitos previos antes de continuar con este tutorial:
- Ha iniciado sesión como usuario con privilegios sudo.
- Tiene un nombre de dominio que apunta a la dirección IP de su servidor. Usaremos
linuxize-test.com
. - Tiene Nginx instalado, si no, consulte esta guía.
- Tienes un certificado SSL instalado para tu dominio. Puede instalar un certificado SSL gratuito de Let's Encrypt siguiendo esta guía.
Crear base de datos MySQL #
Usaremos MariaDB 10.3 como back-end de la base de datos. Mattermost no funcionará con MariaDB versión 5.5.
Si no tiene instalado MariaDB 10.3 en su servidor, puede consultar esta guía.
Inicie sesión en el shell de MySQL:
mysql -u root -p
Y ejecute los siguientes comandos para crear una nueva base de datos y un nuevo usuario para nuestra instalación de Mattermost:
create database mattermost;
GRANT ALL ON mattermost.* TO mattermost@localhost IDENTIFIED BY 'P4ssvv0rD';
Crear nuevo usuario del sistema #
Para crear un nuevo usuario y grupo llamado mattermost
, que ejecutará la instalación de Mattermost, ejecuta el siguiente comando:
sudo useradd -U -M -d /opt/mattermost mattermost
Instalar servidor Mattermost #
Al momento de escribir este artículo, la última versión estable de Mattermost es la versión 5.4.0. Antes de continuar con el siguiente paso, debe consultar la página de descarga de Mattermost para ver si hay una versión más nueva disponible.
Descargue el archivo con el siguiente comando curl:
sudo curl -L https://releases.mattermost.com/5.4.0/mattermost-5.4.0-linux-amd64.tar.gz -o /tmp/mattermost.tar.gz
Una vez que se complete la descarga, extraiga el archivo y muévalo a opt
directorio:
sudo tar zxf /tmp/mattermost.tar.gz -C /opt
Cree el directorio de almacenamiento para archivos:
sudo mkdir /opt/mattermost/data
Cambie la propiedad del directorio al mattermost
usuario:
sudo chown -R mattermost: /opt/mattermost
Abra el config.json
archivo con su editor de texto favorito:
sudo nano /opt/mattermost/config/config.json
Establezca el controlador de la base de datos en mysql
, ingrese el nombre de la base de datos y la contraseña de usuario de la base de datos que creamos anteriormente en este tutorial:
...
"SqlSettings": {
"DriverName": "mysql",
"DataSource": "mattermost:P4ssvv0rD@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
"DataSourceReplicas": [],
...
Para probar nuestra instalación y asegurarnos de que todo funcione antes de crear la unidad systemd y configurar un proxy inverso con Nginx, iniciaremos el servidor Mattermost.
Cambie a /opt/mattermost
directorio e inicie el servidor:
cd /opt/mattermost
sudo -u mattermost bin/mattermost
El resultado debe mostrar que el servidor Mattermost está escuchando en el puerto 8065
:
{"level":"info","ts":1540921243.6797202,"caller":"app/plugin.go:100","msg":"Starting up plugins"}
{"level":"info","ts":1540921244.3483207,"caller":"app/server.go:88","msg":"Starting Server..."}
{"level":"info","ts":1540921244.3488805,"caller":"app/server.go:148","msg":"Server is listening on [::]:8065"}
{"level":"info","ts":1540921244.3620636,"caller":"app/web_hub.go:75","msg":"Starting 2 websocket hubs"}
{"level":"info","ts":1540921244.451155,"caller":"jobs/workers.go:63","msg":"Starting workers"}
{"level":"info","ts":1540921244.456804,"caller":"jobs/schedulers.go:68","msg":"Starting schedulers."}
Ahora puede detener el servidor de Mattermost con CTRL+C
y continúa con los siguientes pasos.
Crear una Unidad Systemd #
Para ejecutar nuestra instancia de Mattermost como un servicio, crearemos un mattermost.service
archivo de unidad en el /etc/systemd/system/
directorio con el siguiente contenido:
[Unit]
Description=Mattermost
After=network.target nss-lookup.target mariadb.service
[Service]
Type=notify
WorkingDirectory=/opt/mattermost
User=mattermost
SyslogIdentifier=mattermost
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
Notifique a systemd que creamos un nuevo archivo de unidad e inicie el servicio Mattermost ejecutando:
sudo systemctl daemon-reload
sudo systemctl start mattermost
Ahora podemos verificar el estado del servicio con el siguiente comando:
sudo systemctl status mattermost
● mattermost.service - Mattermost
Loaded: loaded (/etc/systemd/system/mattermost.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2018-10-30 17:44:46 UTC; 3s ago
Main PID: 25959 (mattermost)
CGroup: /system.slice/mattermost.service
└─25959 /opt/mattermost/bin/mattermost
Finalmente, habilite el servicio de Mattermost para que se inicie automáticamente en el momento del arranque:
sudo systemctl enable mattermost
Configurar un proxy inverso con Nginx #
Si siguió nuestras guías sobre cómo instalar Nginx en CentOS 7 y cómo proteger Nginx con Let's Encrypt en CentOS 7, ya debería tener Nginx instalado y configurado con un certificado SSL. Ahora solo necesitamos crear un nuevo bloque de servidor para nuestra instalación de Mattermost.
/etc/nginx/conf.d/linuxize-test.com.confproxy_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 linuxize-test.com www.linuxize-test.com;
include snippets/letsencrypt.conf;
return 301 https://linuxize-test.com$request_uri;
}
server {
listen 443 ssl http2;
server_name www.linuxize-test.com;
ssl_certificate /etc/letsencrypt/live/linuxize-test.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/linuxize-test.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/linuxize-test.com/chain.pem;
include snippets/ssl.conf;
return 301 https://linuxize-test.com$request_uri;
}
server {
listen 443 ssl http2;
server_name linuxize-test.com;
ssl_certificate /etc/letsencrypt/live/linuxize-test.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/linuxize-test.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/linuxize-test.com/chain.pem;
include snippets/ssl.conf;
access_log /var/log/nginx/linuxize-test.com-access.log;
error_log /var/log/nginx/linuxize-test.com-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;
}
}
Vuelva a cargar el servicio Nginx para que los cambios surtan efecto:
sudo systemctl reload nginx
Configurando Mattermost #
Abre tu navegador, escribe tu dominio y crea tu primera cuenta:
El primer usuario creado en el sistema tiene privilegios de administrador.
Haga clic en Create a new team
enlace, cree su primer equipo y establezca la URL del equipo:
Después de crear la primera cuenta de administrador y el primer equipo, se le redirigirá al panel de control de Mattermost e iniciará sesión como administrador. Abra la Consola del sistema, haciendo clic en su nombre de usuario en la parte superior del panel de navegación y, en el nuevo menú que se abre, haga clic en System Console
enlace:
Establezca la URL del sitio yendo a Configuración General → Configuración.
Habilite las notificaciones por correo electrónico yendo a Notificaciones → Correo electrónico
e ingrese sus parámetros SMTP. Puede utilizar cualquier servicio de correo electrónico transaccional popular, como SendinBlue, SendGrid, Amazon SES, Mandrill, Mailgun, Mailjet y Postmark, o puede configurar su propio servidor de correo.
Finalmente, debemos reiniciar el servicio de Mattermost para que los cambios surtan efecto:
sudo systemctl restart mattermost