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

Podman en Debian 11: instalación y uso
DevOps

Podman en Debian 11: instalación y uso

Apt-pinning en Debian: guía práctica
Sistemas

Apt-pinning en Debian: guía práctica

OptiScaler: inyectar FSR 4 en casi cualquier juego
Guía técnica

OptiScaler: inyectar FSR 4 en casi cualquier juego

Dansguardian + Squid NTLM en Debian Etch
Redes

Dansguardian + Squid NTLM en Debian Etch

Arreglar error de instalación Android en SD
Android

Arreglar error de instalación Android en SD

Conectar carpetas de red con KNetAttach
Redes

Conectar carpetas de red con KNetAttach