Por qué autoalojar Mattermost en un VPS
Las mensajerías SaaS facturan por usuario activo y conservan el historial de sus conversaciones en sus servidores. Mattermost invierte esa lógica: una instancia autoalojada en un VPS alberga equipos enteros sin coste por puesto en la edición Team, con historial completo y almacenamiento de archivos que usted controla. Para una agencia o empresa con restricciones de confidencialidad, hospedar su propia mensajería significa que los mensajes, los archivos compartidos y los metadatos nunca pasan por un tercero. Mattermost también se integra de forma nativa con forjas Git, herramientas de CI/CD y webhooks entrantes/salientes, convirtiéndola en un hub central de comunicación para equipos técnicos.
A diferencia de Slack, que impone su infraestructura y su tarificación por tramos, una instancia Mattermost le da control total sobre la retención de mensajes, las políticas de archivado, los registros de auditoría y las integraciones. Esto es especialmente relevante para equipos sujetos a regulaciones sectoriales — sanidad, finanzas, defensa — donde los datos no pueden salir de un perímetro definido.
Beneficios concretos de un Mattermost autoalojado
- Historial de mensajes completo en la edición Team — la edición gratuita Entry limita el historial consultable a 10 000 mensajes desde la versión 11 (ver sección dedicada).
- Almacenamiento de archivos compartidos en su VPS o en un bucket S3 que controla.
- Webhooks entrantes/salientes y slash commands para conectar CI, monitorización y alertas.
- Autenticación empresarial: LDAP/AD, SAML y OAuth según la edición.
- Aplicaciones de escritorio y móviles oficiales apuntando a su propio dominio.
- Cumplimiento y soberanía de datos: ninguna conversación sale de su infraestructura.
- Plugin Boards integrado (v10+) para gestión de proyectos Kanban/tablero directamente en la mensajería.
- Llamadas de audio/vídeo HD mediante el plugin Calls — conferencias sin herramienta externa.
Requisitos de hardware y software
Mattermost es más exigente que una forja Git porque mantiene conexiones WebSocket persistentes. Planifique un VPS con 2 vCPU y 4 GB de RAM para un equipo de hasta 50 usuarios activos; apunte a 8 GB más allá de eso o si activa la búsqueda avanzada (Elasticsearch). Para organizaciones de 100 a 500 usuarios, o si activa las videollamadas HD mediante el plugin Calls, planifique 16 GB de RAM y 4 vCPU. PostgreSQL es la base de datos recomendada desde v10 — MySQL sigue siendo compatible pero PostgreSQL ofrece mejor rendimiento para grandes volúmenes y búsqueda de texto completo. Provisione al menos 30 GB de SSD, más si almacena muchos archivos localmente.
En el lado del software: Docker Engine 24+ y Docker Compose v2, un subdominio chat.tudominio.com con registro A, y un proxy inverso que pueda reenviar correctamente las conexiones WebSocket (Upgrade/Connection). Se requiere un certificado TLS válido — los clientes móviles rechazan las conexiones HTTP. Abra también el puerto 8443 si activa las videollamadas (plugin Calls/RTCD) y configure un servidor TURN para las conexiones detrás de NAT.
Desplegar Mattermost con Docker y SSL
Preparar el VPS
Instale Docker y Compose, luego clone el repositorio oficial
mattermost-dockero cree/opt/mattermost. Aumentevm.max_map_county los límites de archivos abiertos si es necesario:sysctl -w vm.max_map_count=262144echo 'vm.max_map_count=262144' >> /etc/sysctl.confConfigurar PostgreSQL y los volúmenes
En
docker-compose.yml, declare un serviciopostgrescon contraseña fuerte y volúmenes persistentes para/var/lib/postgresql/data. Para Mattermost, monte volúmenes dedicados aconfig,data,logsypluginspara conservar todo fuera del contenedor.Arrancar la pila Mattermost
Rellene
MM_SQLSETTINGS_DATASOURCEyMM_SERVICESETTINGS_SITEURL(en HTTPS), luego ejecutedocker compose up -d. Sigadocker compose logs -fhasta el mensaje que indica que el servidor escucha en el puerto 8065.Configurar el proxy inverso HTTPS con WebSocket
Con Nginx, redirija hacia
http://127.0.0.1:8065y añada estas cabeceras WebSocket imprescindibles:proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_read_timeout 86400;
Sin estas líneas, la mensajería en tiempo real no funcionará. Con Caddy,reverse_proxy localhost:8065gestiona WebSocket automáticamente.Activar el certificado SSL (Let's Encrypt)
Obtenga el certificado con
certbot --nginx -d chat.tudominio.como deje que Caddy lo provisione automáticamente. Verifique queSiteURLesté enhttps://en la configuración, de lo contrario los clientes móviles rechazarán conectarse.Crear el equipo y endurecer la instancia
Abra
https://chat.tudominio.com, cree la cuenta de administrador del sistema y su primer equipo. Desactive el registro abierto (solo invitaciones por correo), configure SMTP para los correos de notificación y restrinja la creación de equipos a los administradores.Primer inicio de sesión
Abra la URL en cuanto finalice la instalación: Mattermost muestra una pantalla de creación de cuenta, y la PRIMERA cuenta creada recibe automáticamente el rol de administrador del sistema. Créela de inmediato.
Mattermost v10: las novedades clave
Mattermost v10 (publicado a finales de 2024, rama de soporte extendido activa en 2025–2026) introdujo mejoras significativas para las instancias autoalojadas:
Boards integrado en GA — el plugin Boards (Kanban/tablero) viene pre-empaquetado y activado por defecto. Sus equipos gestionan proyectos directamente desde Mattermost sin herramienta externa.
Llamadas HD (plugin Calls v0.x) — conferencias de audio y vídeo HD directamente en los canales, con compartición de pantalla. La instalación Docker incluye el plugin; basta con activar MM_PLUGINSETTINGS_ENABLE=true.
SAML AES-256-GCM — cifrado mejorado de las aserciones SAML para entornos Enterprise.
Connected Workspaces en GA — los canales compartidos entre múltiples instancias Mattermost pasan de beta a disponibilidad general, permitiendo espacios de trabajo federados.
Fin del soporte E10/E20 — si migra desde una licencia antigua, verifique su plan antes de actualizar.
Integraciones: webhooks, Gitea, Jira y Zoom
Mattermost destaca como hub centralizado para equipos técnicos. Las integraciones más habituales en despliegues autoalojados:
Webhooks entrantes — cada canal dispone de una URL webhook. Su CI envía un POST JSON cuando un despliegue tiene éxito o falla; Mattermost lo muestra en #ci-alerts. Configúrelo en Integraciones → Webhooks entrantes.
Webhooks salientes — Mattermost envía una petición HTTP cuando un mensaje contiene una palabra clave definida. Útil para disparar pipelines desde una conversación.
Gitea y GitLab — el plugin oficial para GitLab (compatible con Gitea mediante webhooks JSON) notifica pushes, merge requests e issues en los canales de sus repositorios.
Jira — el plugin Jira permite crear tickets directamente desde un mensaje de Mattermost y recibir actualizaciones de estado en los canales.
Zoom — el plugin Zoom genera un enlace de reunión con el comando slash /zoom en cualquier canal. Alternativa: use el plugin nativo Calls para reuniones completamente on-premise.
Copias de seguridad: base de datos y archivos
Una instancia Mattermost se apoya en dos componentes que hay que respaldar regularmente: la base PostgreSQL y la carpeta de datos.
Copia de seguridad de PostgreSQL con pg_dump (desde el host, con el contenedor en marcha):docker exec mattermost-postgres pg_dump -U mmuser mattermost | gzip > /backups/mm-$(date +%Y%m%d).sql.gz
Copia de seguridad de la carpeta de datos — monte el volumen mattermost/data externamente y archívelo:tar czf /backups/mm-data-$(date +%Y%m%d).tar.gz /opt/mattermost/data
Restauración — para restaurar: detenga los contenedores, importe el volcado SQL en un contenedor Postgres limpio, reemplace la carpeta data, luego docker compose up -d.
Recuerde probar la restauración al menos una vez: una copia de seguridad no probada no es una copia de seguridad.
Lo que limita la edición gratuita desde la versión 11
A partir de Mattermost 11, la edición gratuita autoalojada — llamada Entry — limita el historial consultable a 10 000 mensajes, en todos los canales y para todo el servidor. El punto importante se malinterpreta con frecuencia: los mensajes más antiguos no se eliminan. Permanecen en su base de datos, en su máquina — simplemente dejan de ser visibles y buscables desde la aplicación. El cambio fue mal recibido por la comunidad, precisamente porque restringe datos que el usuario aloja él mismo. Existen dos opciones: pasar a una edición de pago para eliminar el límite, o elegir una herramienta cuya edición libre no limite el historial. Si su uso es mensajería de equipo a largo plazo, mida su volumen mensual antes de comprometerse: 10 000 mensajes se consumen rápidamente entre varias personas. Existe una tercera vía, a menudo ignorada: la edición Team, también gratuita, NO limita el historial — pero no soporta SSO y se limita a 250 usuarios. La elección es por tanto entre un límite de historial (Entry) y un límite de usuarios sin SSO (Team).
Mattermost vs Slack vs Rocket.Chat
Desplace la tabla
| Criterio | Mattermost (Team) | Slack (gratuito) | Rocket.Chat (CE) |
|---|---|---|---|
| Autoalojado | Sí | No (SaaS) | Sí |
| Historial de mensajes | Ilimitado | 90 días | Ilimitado |
| Coste por usuario | Gratis hasta 250 usuarios | Gratis / 7,25 $/u/mes Pro | Gratis (código abierto) |
| Videollamadas nativas | Plugin Calls (HD) | Integración Huddles | Plugin Jitsi |
| Boards / gestión de proyectos | Plugin Boards (GA v10) | No (Canvases) | No |
| LDAP/SAML | Ediciones de pago | No (SAML Enterprise+) | Sí (incluido CE) |
| API y webhooks | Sí (entrantes/salientes) | Sí | Sí |
| Móvil (iOS/Android) | Apps oficiales | Apps oficiales | Apps oficiales |
Resolución de problemas: errores frecuentes
WebSocket SSL no se establece — verifique que su bloque Nginx incluye proxy_set_header Upgrade $http_upgrade; y proxy_set_header Connection "upgrade";. Si el proxy está detrás de Cloudflare, active el modo WebSocket en el panel de Cloudflare (Red → WebSockets).
Error de conexión a la base de datos — compruebe que MM_SQLSETTINGS_DATASOURCE apunta al servicio postgres de Compose (postgres://mmuser:contraseña@db:5432/mattermost). El contenedor Mattermost debe estar en la misma red Docker que postgres.
Actualización entre versiones principales — no salte versiones principales. De v9 a v11: pase primero por v10, espere a que complete la migración del esquema (revise los logs), luego actualice a v11. Consulte el CHANGELOG.md oficial para los cambios importantes antes de cada salto.
Los clientes móviles rechazan conectarse — SiteURL debe ser https:// y el certificado válido. Un certificado autofirmado es rechazado por las apps iOS/Android sin configuración MDM.
Para los archivos compartidos, no almacene todo en el disco del VPS a largo plazo: configure Mattermost con almacenamiento de objetos compatible con S3. Esto desacopla el volumen de datos del tamaño del VPS, simplifica radicalmente las copias de seguridad (el bucket se versiona de forma independiente) y facilita un posible escalado horizontal. Considere también activar la retención de datos para purgar automáticamente mensajes antiguos y controlar el crecimiento de PostgreSQL.
La documentación oficial
Para la configuración avanzada y las opciones específicas de la herramienta, consulte la documentación oficial de Mattermost. Esta guía cubre el despliegue en VPS; la documentación del editor sigue siendo la referencia para los ajustes finos, las actualizaciones principales y los casos de uso específicos.