Introduzione

Mattermost è una piattaforma di messaggistica istantanea di livello enterprise, un'alternativa Slack self-hosted open source. È scritto in Golang e React e può usare MySQL o PostgreSQL come back-end del database. Mattermost riunisce tutte le comunicazioni del tuo team in un unico posto e offre varie funzionalità tra cui condivisione di file, messaggistica individuale e di gruppo, emoji personalizzati, videochiamate e altro ancora.

In questo tutorial, installeremo Mattermost su un server Ubuntu 18.04 e configureremo Nginx come proxy inverso con SSL HTTPS.

Prerequisiti

Assicurati di aver soddisfatto i seguenti prerequisiti prima di continuare con questo tutorial:

  • Hai effettuato l'accesso come utente con privilegi sudo.
  • Hai un nome di dominio che punta all'indirizzo IP del tuo server. In questo articolo useremo example.com.
  • Hai installato Nginx, in caso contrario consulta questa guida.
  • Hai un certificato SSL installato per il tuo dominio. Puoi installare un certificato SSL Let's Encrypt gratuito seguendo questa guida.

Se desideri installare Mattermost su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Creare un database MySQL

Useremo MySQL come database per Mattermost. Se non hai MySQL o MariaDB installati sul tuo server, puoi installarlo seguendo queste istruzioni.

Accedi alla shell MySQL:

sudo mysql -u root

Altrimenti se hai impostato una password per l'utente root, utilizza il seguente comando per accedere alla shell MySQL:

sudo mysql -u root -p

Crea un nuovo database e utente per la nostra installazione Mattermost con:

CREATE DATABASE mattermost;
GRANT ALL ON mattermost.* TO [email protected] IDENTIFIED BY 'P4ssvv0rD';
exit;

Assicurati di utilizzare una password più sicura di P4ssvv0rD.

Creare un nuovo utente di sistema

Crea un nuovo utente e gruppo che eseguirà la nostra istanza Mattermost. Chiameremo l'utente mattermost:

sudo useradd -U -M -d /opt/mattermost mattermost

Installare Mattermost Server

Al momento della stesura di questo articolo, l'ultima versione stabile di Mattermost è la versione 5.19.1. Scarica l'archivio con il seguente comando curl:

sudo curl -L https://releases.mattermost.com/5.19.1/mattermost-5.19.1-linux-amd64.tar.gz -o /tmp/mattermost.tar.gz

Una volta completato il download, estrarre l'archivio e spostarlo nella directory /opt:

sudo tar zxf /tmp/mattermost.tar.gz -C /opt

Creare la directory di archiviazione per i file:

sudo mkdir -p /opt/mattermost/data

Cambia la proprietà della directory per l'utente mattermost:

sudo chown -R mattermost: /opt/mattermost

Apri il file /opt/mattermost/config/config.json, imposta il driver del database su mysql e inserisci le informazioni del database:

sudo nano /opt/mattermost/config/config.json

Cerca il parametro SqlSetting, modifica il valore DriverName e DataSource:

"SqlSettings": {
    "DriverName": "mysql",
    "DataSource": "mattermost:[email protected](localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",

Per assicurarci che la nostra istanza Mattermost funzioni come previsto testeremo il server Mattermost. Passare alla directory /opt/mattermost e avviare il server con i seguenti comandi:

cd /opt/mattermost
sudo -u mattermost bin/mattermost

Se tutto funziona bene, il server verrà avviato e l'output avrà un aspetto simile al seguente:

{"level":"info","ts":1532546921.941638,"caller":"app/server.go:115","msg":"Starting Server..."}
{"level":"info","ts":1532546921.9421031,"caller":"app/server.go:154","msg":"Server is listening on [::]:8065"}
{"level":"info","ts":1532546921.9541554,"caller":"app/web_hub.go:75","msg":"Starting 2 websocket hubs"}

Ora possiamo arrestare il server Mattermost con CTRL+C e continuare con i passaggi successivi.

Crea un'unità Systemd

Per eseguire la nostra istanza Mattermost come servizio creeremo un file mattermost.service di unità nella directory /etc/systemd/system/.

Apri il tuo editor di testo e crea il seguente file:

sudo nano /etc/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=mysql.service

Notifica a systemd che abbiamo creato un nuovo file di unità e avvia il servizio Mattermost con i seguenti comandi:

sudo systemctl daemon-reload

Se non ci sono errori, abilitare il servizio Mattermost per l'avvio automatico all'avvio:

sudo systemctl enable mattermost

Avviare il servizio:

sudo systemctl start mattermost

Ora possiamo controllare lo stato del servizio con:

sudo systemctl status mattermost
● mattermost.service - Mattermost
   Loaded: loaded (/etc/systemd/system/mattermost.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-02-08 20:24:36 CET; 4s ago
 Main PID: 21884 (mattermost)
    Tasks: 16 (limit: 2298)
   CGroup: /system.slice/mattermost.service
           ├─21884 /opt/mattermost/bin/mattermost
           └─21912 plugins/com.mattermost.nps/server/dist/plugin-linux-amd64

Impostare un proxy inverso con Nginx

Se hai seguito le nostre istruzioni su come installare Nginx su Ubuntu 18.04 e su come proteggere Nginx con Let's Encrypt su Ubuntu 18.04 , dovresti avere già installato e configurato Nginx con certificato SSL.

Ora dobbiamo impostare il blocco server per l'istanza Mattermost. Apri il tuo editor di testo e crea/modifica il seguente file:

sudo nano /etc/nginx/sites-available/example.com
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

upstream mattermost_backend {
  server 127.0.0.1:8065;
}

server {
	if ($host = www.example.com) {
		return 301 https://$host$request_uri;
    } 

    if ($host = example.com) {
    	return 301 https://$host$request_uri;
    } 

    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;
    return 404; # managed by Certbot

}

server {
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot

    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


    access_log /var/log/nginx/example.com-access.log;
    error_log /var/log/nginx/example.com-error.log;


    location ~ /api/v[0-9]+/(users/)?websocket$ {
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection "upgrade";
    	client_max_body_size 50M;
    	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_buffers 256 16k;
    	proxy_buffer_size 16k;
    	proxy_read_timeout 600s;
    	proxy_pass http://mattermost_backend;
    }

    location / {
    	proxy_http_version 1.1;
    	client_max_body_size 50M;
    	proxy_set_header Connection "";
    	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_buffers 256 16k;
    	proxy_buffer_size 16k;
    	proxy_read_timeout 600s;
    	proxy_cache mattermost_cache;
    	proxy_cache_revalidate on;
    	proxy_cache_min_uses 2;
    	proxy_cache_use_stale timeout;
    	proxy_cache_lock on;
    	proxy_pass http://mattermost_backend;
    }
}

Ricarica il servizio Nginx per rendere effettive le modifiche:

sudo systemctl reload nginx

Configurare Mattermost

Apri il tuo browser, digita il tuo dominio e verrai reindirizzato alla pagina di sugnup.

Inserisci la tua email, scegli un nome utente e una password e fai clic sul pulsante Create Account per creare il tuo primo account.

Il primo utente creato nel sistema avrà i privilegi di amministratore.

Nel passaggio successivo la procedura guidata di configurazione ti chiederà di creare un nuovo team.

Fare clic sul collegamento Create a new team, inserire il primo team e fare clic sul pulsante Next.

Nel passaggio successivo ti verrà chiesto di scegliere l'indirizzo web del tuo nuovo team.

Fai clic sul pulsante Finish e verrai reindirizzato alla dashboard Mattermost, effettuato l'accesso come amministratore.

Apri la Console di sistema, facendo clic sul tuo nome utente nella parte superiore del pannello di navigazione e nel nuovo menu che si apre, fai clic sul collegamento System Console.

Imposta l'URL del sito andando su Impostazioni generali → Configurazione.

Per abilitare le notifiche e-mail, vai su Notifiche → E-mail, modifica il valore di Enable Email Notifications da false a true e inserisci i parametri SMTP.

Puoi utilizzare tutti i più diffusi servizi di posta elettronica transazionali come SendinBlue, SendGrid, Amazon SES, Mandrill, Mailgun, Mailjet e Postmark oppure puoi configurare il tuo server di posta seguendo questo tutorial.

Infine, è necessario riavviare il servizio Mattermost per rendere effettive le modifiche:

sudo systemctl restart mattermost

Conclusione

Hai installato con successo Mattermost sul tuo server Ubuntu 18.04 e impostato Nginx come proxy inverso. Ora puoi iniziare a utilizzare Mattermost per collaborare con il tuo team.