Mattermost self-hosted na VPS
Mattermost é o substituto open-source do Slack mais completo — canais, DMs, threads, chamadas de vídeo, bots, webhooks e apps mobile nativos. Self-hosteado na VPS, todas as mensagens e arquivos da equipe ficam na sua infraestrutura, sem planos por usuário e sem dependência de serviço externo.
Instalar Mattermost com Docker Compose
Stack com Mattermost e PostgreSQL para produção:
# docker-compose.yml
services:
mattermost:
image: mattermost/mattermost-team-edition:latest
restart: always
ports:
- "127.0.0.1:8065:8065"
environment:
MM_SQLSETTINGS_DRIVERNAME: postgres
MM_SQLSETTINGS_DATASOURCE: postgres://mattermost:${POSTGRES_PASSWORD}@postgres:5432/mattermost?sslmode=disable
MM_SERVICESETTINGS_SITEURL: https://chat.seudominio.com.br
MM_FILESETTINGS_DRIVERNAME: local # ou 'amazons3' para MinIO/S3
volumes:
- mattermost_data:/mattermost/data
- mattermost_logs:/mattermost/logs
- mattermost_config:/mattermost/config
- mattermost_plugins:/mattermost/plugins
depends_on:
- postgres
postgres:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: mattermost
POSTGRES_USER: mattermost
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
mattermost_data:
mattermost_logs:
mattermost_config:
mattermost_plugins:
postgres_data:Configurar Nginx com SSL e WebSocket
O Mattermost usa WebSocket para mensagens em tempo real — configuração específica necessária:
# /etc/nginx/conf.d/mattermost.conf
server {
listen 80;
server_name chat.seudominio.com.br;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name chat.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/chat.seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/chat.seudominio.com.br/privkey.pem;
client_max_body_size 100M;
location ~ /api/v[0-9]+/(users/)?websocket$ {
# Rota WebSocket do Mattermost
proxy_pass http://127.0.0.1:8065;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $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_read_timeout 86400s;
}
location / {
proxy_pass http://127.0.0.1:8065;
proxy_set_header Host $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_read_timeout 90s;
}
}Configurar armazenamento de arquivos no MinIO
Usar MinIO self-hosted como storage S3-compatible para uploads:
# No Mattermost — System Console → File Storage
# File Storage System: Amazon S3
# Configurações (via variáveis de ambiente ou System Console):
MM_FILESETTINGS_DRIVERNAME: amazons3
MM_FILESETTINGS_AMAZONS3BUCKET: mattermost
MM_FILESETTINGS_AMAZONS3REGION: us-east-1
MM_FILESETTINGS_AMAZONS3ENDPOINT: s3.seudominio.com.br # seu MinIO
MM_FILESETTINGS_AMAZONS3ACCESSKEYID: ACCESS_KEY
MM_FILESETTINGS_AMAZONS3SECRETACCESSKEY: SECRET_KEY
MM_FILESETTINGS_AMAZONS3SSL: "true"
MM_FILESETTINGS_AMAZONS3PATHSTYLE: "true" # obrigatório para MinIO
# Criar bucket no MinIO:
mc mb myminio/mattermost
mc anonymous set none myminio/mattermost # privado (Mattermost gerencia acesso)
# Migrar arquivos existentes do local para MinIO:
docker compose exec mattermost \
./bin/mmctl files migrate-to-s3 --confirmIntegrações e webhooks
Conectar o Mattermost ao n8n e outros serviços:
# Webhook de entrada (para enviar mensagens ao Mattermost):
# System Console → Integrations → Incoming Webhooks → Add
# Copiar a URL gerada
# Enviar mensagem via webhook:
curl -X POST "https://chat.seudominio.com.br/hooks/WEBHOOK_ID" \
-H "Content-Type: application/json" \
-d '{"text": "Deploy concluído! ✅", "channel": "deploys"}'
# Com attachment (mensagem formatada):
curl -X POST "https://chat.seudominio.com.br/hooks/WEBHOOK_ID" \
-H "Content-Type: application/json" \
-d '{
"attachments": [{
"color": "#36a64f",
"title": "Deploy Produção",
"text": "Versão 1.2.3 em produção",
"fields": [
{"title": "Branch", "value": "main", "short": true},
{"title": "Por", "value": "github-actions", "short": true}
]
}]
}'
# Integração com n8n: Mattermost node nativo no n8n
# (buscar por "Mattermost" nos nodes do n8n)Backup e manutenção
Backup completo incluindo mensagens e arquivos:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/var/backups/mattermost"
mkdir -p "$BACKUP_DIR"
# 1. Backup do banco PostgreSQL (mensagens, usuários, canais)
docker compose exec -T postgres \
pg_dump -U mattermost mattermost | gzip > "$BACKUP_DIR/mm_db_${DATE}.sql.gz"
# 2. Backup de arquivos locais (se não usar MinIO)
docker run --rm \
-v mattermost_data:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf "/backup/mm_data_${DATE}.tar.gz" /data
# 3. Backup da configuração
docker run --rm \
-v mattermost_config:/config \
-v "$BACKUP_DIR":/backup \
alpine tar czf "/backup/mm_config_${DATE}.tar.gz" /config
# Atualizar Mattermost:
docker compose pull mattermost
docker compose up -d mattermost
# Verificar saúde:
curl -s https://chat.seudominio.com.br/api/v4/system/ping | python3 -m json.tool$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.