Passa al contenuto principale
Versione: 0.5.5

Mattermost su Aruba Cloud

Distribuisci Mattermost Team Edition — messaggistica di squadra open-source — su Aruba Cloud tramite Terraform e cloud-init. Servizio binario Mattermost + MySQL 8.0 gestito + reverse proxy nginx.

Versione provider: arubacloud/arubacloud ~> 1.0 | Terraform: ≥ 1.9


Introduzione​

Mattermost è una piattaforma di messaggistica open-source self-hosted, compatibile con Slack, scritta in Go e React. Questo esempio distribuisce uno stack Mattermost Team Edition production-ready con:

  • Una CloudServer VM (CSO4A8 — 4 vCPU / 8 GB) che esegue il binario Go di Mattermost come servizio systemd dietro nginx, completamente avviato da cloud-init
  • Un'istanza DBaaS MySQL 8.0 gestito con storage autoscaling
  • Una VPC, subnet e security group dedicati tramite il modulo network condiviso
  • Elastic IP per VM e DBaaS
  • Corretto proxy WebSocket nginx per la messaggistica in tempo reale
  • HTTPS Let's Encrypt opzionale quando viene fornito un dominio personalizzato

Il primo utente a registrarsi sull'istanza diventa automaticamente l'Amministratore di sistema.


Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern nomeDescrizione
arubacloud_projectmm-prodContenitore progetto
arubacloud_vpcmm-prod-vpcVirtual Private Cloud
arubacloud_subnetmm-prod-subnetSubnet di base
arubacloud_securitygroupmm-prod-vm-sgSecurity group VM
arubacloud_securitygroupmm-prod-db-sgSecurity group DBaaS
arubacloud_securityrulemm-prod-vm-sshIngresso SSH
arubacloud_securityrulemm-prod-vm-httpIngresso HTTP
arubacloud_securityrulemm-prod-vm-httpsIngresso HTTPS
arubacloud_securityrulemm-prod-db-mysqlIngresso MySQL dall'IP VM
arubacloud_elasticipmm-prod-vm-eipIP pubblico VM
arubacloud_elasticipmm-prod-db-eipIP pubblico DBaaS
arubacloud_blockstoragemm-prod-bootDisco di avvio 50 GB (Performance)
arubacloud_keypairmm-prod-keypairChiave pubblica SSH
arubacloud_dbaasmm-prod-dbaasMySQL 8.0 gestito
arubacloud_databasemattermostDatabase logico Mattermost
arubacloud_dbaasusermattermostUtente applicativo MySQL
arubacloud_databasegrant—Grant liteadmin
arubacloud_cloudservermm-prod-vmCloudServer VM

Costo mensile stimato​

Prezzi approssimativi per ITBG-Bergamo, fatturazione oraria.

RisorsaSpecificheCosto/mese stimato
CloudServer VMCSO4A8 — 4 vCPU / 8 GB~€36
Disco di avvio50 GB Performance~€6
MySQL gestitoDBO2A8 — 2 vCPU / 8 GB~€35
Storage DBaaS20 GB~€3
Elastic IP × 2—~€5
Totale~€85/mese

Requisiti​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 1.0
  • Un account ArubaCloud con credenziali API OAuth2
  • Una coppia di chiavi SSH

Variabili​

Obbligatorie​

VariabileDescrizione
arubacloud_client_idClient ID OAuth2 ArubaCloud
arubacloud_client_secretClient secret OAuth2 ArubaCloud
ssh_public_keyContenuto della chiave pubblica SSH
db_passwordPassword MySQL per l'utente Mattermost (min 16 caratteri, no newline)

Opzionali​

VariabileDefaultDescrizione
app_name"mm"Nome breve usato in tutti i nomi delle risorse
environment"prod"Etichetta ambiente
location"ITBG-Bergamo"Regione ArubaCloud
zone"ITBG-1"Zona di disponibilità
billing_period"Hour""Hour" o "Month"
vm_flavor"CSO4A8"Flavor CloudServer
vm_image"LU22-001"Immagine disco di avvio (Ubuntu 22.04 LTS)
vm_disk_size_gb50Dimensione disco di avvio in GB
ssh_cidr"0.0.0.0/0"CIDR per SSH — limita al tuo IP
dbaas_flavor"DBO2A8"Flavor DBaaS
db_storage_gb20Storage iniziale DBaaS in GB
mattermost_version"10.4.2"Versione Mattermost Team Edition
domain""Dominio personalizzato per HTTPS

Output​

OutputDescrizione
site_urlURL Mattermost
vm_public_ipIndirizzo IP pubblico della VM
ssh_commandComando SSH per connettersi alla VM
dbaas_hostEndpoint DBaaS
db_nameNome del database
db_userNome utente database

Istruzioni di distribuzione​

1. Clona e naviga​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/mattermost

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

Imposta db_password e le tue credenziali.

3. Distribuisci​

terraform init
terraform plan
terraform apply

Il bootstrap richiede circa 15–20 minuti — cloud-init attende fino a 15 minuti che il DBaaS sia raggiungibile prima di avviare Mattermost.

4. Accedi a Mattermost​

terraform output site_url

Apri l'URL e registra il primo account — quell'utente diventa Amministratore di sistema.

5. Monitora il progresso​

ssh ubuntu@$(terraform output -raw vm_public_ip)
sudo tail -f /var/log/cloud-init-output.log
sudo journalctl -u mattermost -f

Raccomandazioni di sicurezza​

  1. Limita SSH al tuo IP. Imposta ssh_cidr = "tuo.ip/32".

  2. Usa HTTPS. Imposta domain per abilitare TLS Let's Encrypt. Senza TLS, i token di sessione e i messaggi vengono trasmessi in chiaro.

  3. Registra prima l'account admin. Il primo utente registrato diventa Amministratore di sistema. Registra subito dopo la distribuzione prima di condividere l'URL.

  4. Limita gli inviti al team. In Consolle di sistema → Autenticazione → Email, configura la registrazione solo su invito una volta configurato il tuo team.

  5. Abilita MFA. In Consolle di sistema → Autenticazione → MFA, richiedi l'autenticazione a più fattori per tutti gli utenti.


Considerazioni sull'aggiornamento​

Aggiornamento Mattermost​

ssh ubuntu@$(terraform output -raw vm_public_ip)

MM_VERSION=X.Y.Z
sudo systemctl stop mattermost
sudo mv /opt/mattermost /opt/mattermost-backup
curl -sSfL \
"https://releases.mattermost.com/$MM_VERSION/mattermost-team-$MM_VERSION-linux-amd64.tar.gz" \
| sudo tar -xz -C /opt
# Ripristina config e dati
sudo cp /opt/mattermost-backup/config/config.json /opt/mattermost/config/ 2>/dev/null || true
sudo chown -R mattermost:mattermost /opt/mattermost
sudo systemctl start mattermost

Consulta il changelog di Mattermost prima di aggiornare.


Risoluzione dei problemi​

Mattermost non raggiungibile​

sudo systemctl status mattermost
sudo journalctl -u mattermost -n 50
sudo tail -100 /var/log/cloud-init-output.log

Connessione WebSocket fallita​

Verifica che la configurazione nginx includa il blocco location WebSocket per /api/v[0-9]+/(users/)?websocket:

sudo nginx -t
sudo cat /etc/nginx/sites-enabled/mattermost.conf

Errore di connessione MySQL​

mysql -u mattermost -p -h $(terraform output -raw dbaas_host) mattermost

Riferimenti​