Instalar Mattermost con PostgreSQL y Nginx en Ubuntu 16.04

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
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.
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
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.
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)
- Backup de la base de datos PostgreSQL:
pg_dump -U matteruser -h localhost -Fc mattermostdb > /backup/mattermostdb-$(date +%F).dump
- Backup de archivos de Mattermost (adjuntos):
tar -czvf /backup/mattermost-files-$(date +%F).tar.gz /home/matter/mattermost/data
- 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
Materiales similares

Solución a Charging On Hold en iPhone

Acuerdo Siri de Apple: elegibilidad y cómo reclamar

Cómo convertir foto de perfil de Facebook a GIF

Error Code Centipede en Destiny 2: soluciones

Descargar imágenes de Google Docs
