Guía de tecnologías

Instalar Mattermost con PostgreSQL y Nginx en Ubuntu 16.04

7 min read DevOps Actualizado 20 Oct 2025
Mattermost con PostgreSQL y Nginx en Ubuntu
Mattermost con PostgreSQL y Nginx en Ubuntu

Introducción

Mattermost es un sistema de mensajería de código abierto escrito en Golang y React. Es una alternativa a Slack que permite alojar la plataforma en tus propios servidores. Puedes acceder desde el escritorio, Android e iPhone.

En este tutorial configurarás un servidor Mattermost que use PostgreSQL como base de datos y Nginx como proxy inverso. El sistema operativo usado es Ubuntu 16.04.

Cosas que necesitas antes de empezar:

  • Ubuntu 16.04 (64 bits)
  • Privilegios de root o sudo
  • Acceso SSH al servidor

Contenido de la guía

  • Prerrequisitos y preparación
  • Paso 1: instalar y configurar PostgreSQL
  • Paso 2: instalar y configurar Mattermost
  • Paso 3: crear servicio systemd
  • Paso 4: instalar y configurar Nginx y SSL
  • Paso 5: pruebas y verificación
  • Seguridad, backups y mantenimiento
  • Checklist de producción y resolución de problemas

Paso 1 - Instalar y configurar PostgreSQL

Mattermost soporta MySQL y PostgreSQL. En esta guía usaremos PostgreSQL.

Conéctate al servidor vía SSH y actualiza los repositorios:

ssh [email protected]
sudo apt-get update

Instala PostgreSQL como root o con sudo:

sudo apt-get install postgresql postgresql-contrib

Cuando termine la instalación, cambia al usuario postgres y entra en el shell psql:

su - postgres
psql

Cambia la contraseña del usuario postgres:

\password postgres
Enter new password:

Crea la base de datos y el usuario para Mattermost. En el ejemplo usamos nombres de demostración: base de datos mattermostdb, usuario matteruser y contraseña matterpassword. Usa contraseñas seguras en producción.

CREATE DATABASE mattermostdb;
CREATE USER matteruser WITH PASSWORD 'matterpassword';
GRANT ALL PRIVILEGES ON DATABASE mattermostdb TO matteruser;
\q

Configuración de la base de datos PostgreSQL para Mattermost.

Importante: Si vas a exponer el servidor a Internet, restringe el acceso a PostgreSQL mediante reglas de firewall y escucha únicamente en localhost o en una interfaz interna.

Paso 2 - Instalar y configurar Mattermost

Se recomienda crear un usuario de sistema no root para ejecutar Mattermost. En este ejemplo usaremos el usuario matter.

Crea el usuario y asigna contraseña:

useradd -m -s /bin/bash matter
passwd matter

Cambia al usuario matter y descarga la versión de Mattermost. El ejemplo usa la versión 3.4.0; reemplaza por la versión más reciente si procede.

su - matter
wget https://releases.mattermost.com/3.4.0/mattermost-3.4.0-linux-amd64.tar.gz

Extrae el archivo y entra al directorio mattermost:

tar -xzvf mattermost-3.4.0-linux-amd64.tar.gz
cd mattermost/

Crea el directorio de datos y edita el archivo de configuración config/config.json (puedes usar vim, nano o tu editor preferido):

mkdir data/
vim config/config.json

Configura Mattermost para que escuche en localhost (esto facilita el uso de Nginx como proxy inverso). En el bloque ServiceSettings ajusta ListenAddress:

"ListenAddress": "127.0.0.1:8065",

En el bloque SqlSettings, ajusta DriverName y DataSource para PostgreSQL. Sustituye matteruser y matterpassword por las credenciales reales.

"DriverName": "postgres",
"DataSource": "postgres://matteruser:[email protected]:5432/mattermostdb?sslmode=disable&connect_timeout=10",

Importante: usa sslmode=require si tu base de datos está en un host remoto que soporte SSL.

Guarda y cierra el archivo. Inicia Mattermost desde el binario para probar:

cd bin/
./platform

Verás que Mattermost se inicia en 127.0.0.1:8065. Para detenerlo pulsa Ctrl+C.

Instalación de Mattermost en Ubuntu 16.04.

Paso 3 - Crear el servicio systemd para Mattermost

Crea un archivo de servicio para ejecutar Mattermost como servicio de sistema y reiniciarlo automáticamente.

cd /etc/systemd/system/
vim mattermost.service

Pega la siguiente configuración (ajusta rutas si cambiaste el directorio home del usuario matter):

[Unit]
Description=Mattermost is an open source, self-hosted Slack-alternative
After=syslog.target network.target

[Service]
Type=simple
User=matter
Group=matter
ExecStart=/home/matter/mattermost/bin/platform
PrivateTmp=yes
WorkingDirectory=/home/matter/mattermost
Restart=always
RestartSec=30
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

Guarda, recarga systemd e inicia el servicio:

systemctl daemon-reload
systemctl start mattermost
systemctl enable mattermost

Verifica que el servicio esté activo y que el puerto local esté escuchando:

netstat -plntu
systemctl status mattermost

Servicio Mattermost en ejecución

Paso 4 - Instalar y configurar Nginx

Usaremos Nginx como proxy inverso y terminador TLS. Instala Nginx:

sudo apt-get install nginx

Crea un directorio para certificados SSL:

cd /etc/nginx/
mkdir ssl/; cd ssl/

Genera un certificado autofirmado (útil para pruebas). En producción usa Let’s Encrypt o un certificado emitido por una CA:

openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/mattermost.crt -keyout /etc/nginx/ssl/mattermost.key
chmod 400 mattermost.key

Crea el archivo de sitio en /etc/nginx/sites-available/mattermost y pega la configuración del servidor. Ajusta server_name a tu dominio:

server {
   listen         80;
   server_name    mattermost.mydomain.com;
   return         301 https://$server_name$request_uri;
}

server {
   listen 443 ssl;
   server_name mattermost.mydomain.com;

   ssl on;
   ssl_certificate /etc/nginx/ssl/mattermost.crt;
   ssl_certificate_key /etc/nginx/ssl/mattermost.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:10m;

   location / {
      gzip off;
      proxy_set_header X-Forwarded-Ssl on;
      client_max_body_size 50M;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      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_pass http://127.0.0.1:8065;
   }
}

Activa el sitio y recarga Nginx:

ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx

Notas sobre TLS: la configuración anterior soporta TLSv1/1.1/1.2; en entornos actuales se recomienda deshabilitar TLSv1 y TLSv1.1 y usar TLSv1.2 o superior. Si usas Let’s Encrypt con certbot, reemplaza los archivos .crt/.key por los emitidos por certbot.

Paso 5 - Pruebas

Abre tu navegador y visita https://mattermost.mydomain.com (reemplaza por tu dominio). Se redirigirá automáticamente a HTTPS. Crea una cuenta usando Create Account y luego crea un equipo o accede al panel de administración.

Crear una cuenta en Mattermost

Crear equipo o acceder a la consola de administración

Panel de la consola de administración de Mattermost

Crear equipo en Mattermost

Panel del equipo de Mattermost

Chat de equipo en Mattermost

Mattermost con PostgreSQL y Nginx en Ubuntu 16.04 debería funcionar correctamente.

Seguridad y endurecimiento recomendado

  • Firewall: permite puertos 22 (SSH), 80 y 443; y bloquea accesos innecesarios. Ejemplo con ufw:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
  • Ejecuta Mattermost bajo un usuario sin privilegios (ya usamos “matter”).
  • Usa certificados emitidos por una CA confiable (Let’s Encrypt en producción). Certbot simplifica la renovación automática.
  • Respaldos: programa backups periódicos de la base de datos y del directorio “data” de Mattermost.
  • Monitoreo: agrega checks de disponibilidad y alertas para procesos y uso de disco.
  • Logs: rota y conserva los logs con logrotate.
  • Límites de recursos: usa systemd LimitNOFILE adecuado (ya configurado) y revisa número máximo de conexiones de PostgreSQL.

Copias de seguridad básicas (mini-metodología)

  1. Backup de la base de datos PostgreSQL:
pg_dump -U matteruser -h localhost -Fc mattermostdb > /backup/mattermostdb-$(date +%F).dump
  1. Backup de archivos de Mattermost (adjuntos):
tar -czvf /backup/mattermost-files-$(date +%F).tar.gz /home/matter/mattermost/data
  1. Prueba de restauración en un entorno aislado antes de confiar en los backups.

Checklist de producción (roles)

Administrador de sistema:

  • Usuario “matter” creado y con permisos correctos
  • Servicio systemd habilitado y reinicios automáticos
  • Firewall configurado (ufw/iptables)
  • Certificado TLS válido instalado y renovaciones automáticas
  • Backups programados y probados
  • Monitorización y alertas configuradas

Administrador de Mattermost (producto):

  • Crear equipos y reglas de administración
  • Configurar políticas de contraseña y autenticación (LDAP/SSO si procede)
  • Revisar permisos de canales y equipos
  • Revisar integraciones y websockets

Criterios de aceptación

  • El servicio systemd arranca y mantiene Mattermost (systemctl status muestra Active: active)
  • El puerto 8065 escucha en localhost y Nginx proxifica correctamente a 443
  • El certificado TLS es válido en el navegador y la página carga por HTTPS
  • Los usuarios pueden crear cuentas y equipos básicos

Solución de problemas comunes

  • Si Nginx devuelve 502 Bad Gateway: comprueba que Mattermost está en ejecución y escuchando en 127.0.0.1:8065. Revisa los logs en /home/matter/mattermost/logs.
  • Si la base de datos no conecta: verifica DataSource en config.json y que PostgreSQL acepta conexiones desde localhost. Revisa pg_hba.conf y permisos.
  • Problemas con WebSocket: asegúrate de que las cabeceras Upgrade/Connection están presentes en la configuración de proxy (ya incluidas en la configuración mostrada).

Alternativas y cuándo no usar esta guía

  • Si prefieres una instalación contenizada, usa Docker o Kubernetes y las imágenes oficiales de Mattermost.
  • En entornos con alta disponibilidad necesitas replicación de PostgreSQL, balanceadores de carga y discos compartidos o sincronizados para los archivos de usuario.
  • Si necesitas integración SSO a gran escala, consulta la documentación oficial para configurar LDAP/SAML/OAuth.

Actualización y mantenimiento

  • Para actualizar Mattermost, detén el servicio, realiza backup de la base de datos y del directorio “data”, reemplaza los binarios por la nueva versión según la guía de actualización oficial, migra la base de datos si es necesario y reinicia el servicio.
  • Mantén el sistema operativo actualizado con actualizaciones de seguridad.

Preguntas frecuentes

¿Puedo usar MySQL en lugar de PostgreSQL?

Sí. Mattermost soporta MySQL. Cambia DriverName a “mysql” y adapta DataSource según el formato de MySQL. Para producción se recomienda evaluar características y rendimiento antes de elegir.

¿Cómo obtengo un certificado válido gratis?

Usa Let’s Encrypt con certbot. Instala certbot, solicita el certificado para tu dominio y configura renovación automática (certbot renew).

¿Cómo hago backups automáticos?

Programa scripts que ejecuten pg_dump y archiven el directorio data, luego envíalos a almacenamiento externo (S3, FTP, NFS). Prueba restauraciones periódicamente.

Resumen

  • Instalaste PostgreSQL, configuraste usuario y base de datos.
  • Instalaste Mattermost en un usuario sin privilegios y lo configuraste para usar PostgreSQL.
  • Implementaste systemd para gestionar el servicio.
  • Configuraste Nginx como proxy inverso y TLS (certificado autofirmado en el ejemplo).
  • Añadiste recomendaciones de seguridad, backups y pruebas.

Importante: reemplaza contraseñas de ejemplo por credenciales seguras, usa certificados válidos en producción y prueba los backups con restauraciones.

Notas:

  • Revisa la documentación oficial periódicamente para cambios en requisitos y mejores prácticas.
  • Considera usar versiones LTS compatibles o imágenes oficiales si prefieres contenedores.

Referencias

Autor
Edición

Materiales similares

Solución a Charging On Hold en iPhone
iPhone

Solución a Charging On Hold en iPhone

Acuerdo Siri de Apple: elegibilidad y cómo reclamar
Legal

Acuerdo Siri de Apple: elegibilidad y cómo reclamar

Cómo convertir foto de perfil de Facebook a GIF
Redes sociales

Cómo convertir foto de perfil de Facebook a GIF

Error Code Centipede en Destiny 2: soluciones
Guía técnica

Error Code Centipede en Destiny 2: soluciones

Descargar imágenes de Google Docs
Productividad

Descargar imágenes de Google Docs

Guardar tus Memories de Snapchat sin pagar
Guías

Guardar tus Memories de Snapchat sin pagar