Mattermost est un serveur de discussion Open Source sous licence MIT. Il est très similaires à d'autres outils de groupware tel que Slack ou HipChat.
Nous allons nous intéresser à son installation sur un serveur CentOS 7.
Préambule
Nous allons partir d'une installation minimale de CentOS 7 afin de garantir le succès de la procédure. Nous allons également commencer par nous assurer que notre serveur CentOS est à jour. Pour celà, nous allons lancer la commande suivante :
sudo yum -y update
Nous aurons besoin de la commande wget pour la suite des opérations, nous allons donc l'installer :
sudo yum -y install wget
Ajout de son utilisateur aux sudoers (si ce n'est pas déjà fait), ce sera plus pratique pour la suite des opérations :
sudo usermod -aG wheel <utilisateur>
Installation de PostgreSQL
Mattermost supporte MySQL (MariaDB) et PostgreSQL. Pour ce tutoriel, nous allons utiliser PostgreSQL, mais vous pouvez très bien décider d'installer MySQL à la place si tel est votre choix.
On commence par configurer le dépôt officiel de PostgreSQL. Pour cette installation, nous allons utiliser la version 9.4 de PostgreSQL.
sudo wget https://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-7-x86_64/pgdg-redhat94-9.4-3.noarch.rpm sudo yum localinstall pgdg-redhat94-9.4-3.noarch.rpm
Afin de ne pas poser de problèmes de compatibilité entre les dépôts lors des mises à jour ultérieures, nous allons exclure postgresql des dépôts officiels de CentOS.
Pour ce faire, nous allons devoir modifier le fichier /etc/yum.repos.d/CentOS-Base.repo afin d'ajouter exclude=postgresql* dans les sections [base] et [updates].
[base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 exclude=postgresql* #released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 exclude=postgresql*
Nous pouvons maintenant procéder à l'installation :
sudo yum -y install postgresql94-server postgresql94-contrib
Il faut ensuite procéder à l'initialisation de la base de données :
sudo /usr/pgsql-9.4/bin/postgresql94-setup initdb
Si tout c'est bien passé, vous devriez voir le message suivant :
Initializing database ... OK
Par défaut, PostgreSQL n'accepte pas l'authentification à l'aide de mot de passe. Nous allons changer cela en modifiant le fichier de configuration /var/lib/pgsql/9.4/data/pg_hba.conf. Intéressons-nous aux lignes suivantes qui doivent se trouver à la fin du fichier :
# IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident
Nous devons remplacer ident par md5 pour obtenir ceci :
# IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5
Nous devons maintenant nous assurer que PostgreSQL sera lancé à chaque démarrage du serveur, nous en profitions pour le lancer également :
sudo systemctl enable postgresql-9.4.service sudo systemctl start postgresql-9.4.service
Configuration de la base de données
On commence par ouvrir une session avec l'utilisateur créé lors de l'installation.
sudo su - postgres sudo psql
Ensuite on crée la base de donnée
postgres=# CREATE DATABASE mattermost;
Puis l'utilisateur auquel on accorde les droits sur la nouvelle base de donnée
postgres=# CREATE USER mmuser WITH PASSWORD 'mm_password'; postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
On peut ensuite quitter PostgreSQL et le shell ouvert avec le compte postgres
postgre=# \q exit
Il faut maintenant modifier le fichier /var/lib/pgsql/9.4/data/postgresql.conf afin d'autoriser PostgreSQL à écouter sur toutes les adresses IP.
Il faut décommenter la ligne suivante et remplacer 'localhost' par '*'.
#listen_addresses = 'localhost'
A la fin de l'opération, vous devriez avoir :
listen_addresses = '*'
On redémarre ensuite le serveur de base de données afin de prendre en compte la nouvelle configuration.
sudo systemctl restart postgresql-9.4.service
On vérifie que l'on peut se connecter à la base de donnée :
sudo psql --host=localhost --dbname=mattermost --username=mmuser --password
Installation de Mattermost
On télécharge la dernière version serveur de Mattermost. Remplacez dans la commande suivante les X.X.X avec le numéro de la version que vous souhaitez télécharger :
wget https://releases.mattermost.com/X.X.X/mattermost-X.X.X-linux-amd64.tar.gz
On extrait ensuite les fichiers d'installations de l'archive nouvellement téléchargée.
tar -xvzf *.gz
Puis on déplace le répertoire résultant dans le dossier /opt.
sudo mv mattermost /opt
On crée ensuite un utilisateur et un groupe qui serviront à exécuter le service Mattermost :
sudo useradd --system --user-group mattermost sudo chown -R mattermost:mattermost /opt/mattermost sudo chmod -R g+w /opt/mattermost
Fichier de configuration de Mattermost
Nous devons configurer Mattermost afin qu'il puisse se connecter à la base de données. Pour cela, nous allons modifier le fichier /opt/mattermost/config/config.json. Recherchez la section SqlSettings, qui doit se présenter de la manière suivante :
"SqlSettings": { "DriverName": "mysql", "DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8", "DataSourceReplicas": [], "MaxIdleConns": 20, "MaxOpenConns": 300, "Trace": false, "AtRestEncryptKey": "" },
Nous allons changer le DriverName pour indiquer que nous utilisons PostgreSQL :
"DriverName": "postgres",
Puis nous allons modifier la ligne DataSource avec la chaine de connexion nécessaire pour notre base de données PostgreSQL :
"postgres://mmuser:mm_password@localhost:5432/mattermost?sslmode=disable&connect_timeout=10",
On teste maintenant que tout fonctionne :
cd /opt/mattermost/bin sudo -u mattermost ./platform
Si tout va bien, vous devriez avoir une sortie comme celle-ci :
[2017/06/08 00:01:36 CEST] [INFO] Loaded system translations for 'en' from '/opt/mattermost/i18n/en.json' [2017/06/08 00:01:36 CEST] [INFO] Current version is 3.6.0 (3.6.7/Thu Apr 27 08:19:06 UTC 2017/584146b9b9b5df2/none) [2017/06/08 00:01:36 CEST] [INFO] Enterprise Enabled: false [2017/06/08 00:01:36 CEST] [INFO] Current working directory is /opt/mattermost/bin [2017/06/08 00:01:36 CEST] [INFO] Loaded config file from /opt/mattermost/config/config.json [2017/06/08 00:01:36 CEST] [INFO] Server is initializing... [2017/06/08 00:01:36 CEST] [INFO] Pinging SQL master database [2017/06/08 00:01:37 CEST] [INFO] The database schema has been set to version 3.6.0 [2017/06/08 00:01:37 CEST] [INFO] Starting 4 websocket hubs [2017/06/08 00:01:37 CEST] [INFO] Starting Server... [2017/06/08 00:01:37 CEST] [INFO] Server is listening on :8065
Si tout va bien, vous pouvez arrêter le serveur en appuyant sur [CTRL] + [C].
Configuration du service
Pour que Mattermost se lance automatiquement, nous devons créer un service.
Il faut d'abord créer le fichier de configuration du service :
sudo touch /etc/systemd/system/mattermost.service
Le contenu doit être le suivant :
[Unit] Description=Mattermost After=syslog.target network.target postgresql-9.4.service [Service] Type=simple WorkingDirectory=/opt/mattermost/bin User=mattermost ExecStart=/opt/mattermost/bin/platform PIDFile=/var/spool/mattermost/pid/master.pid LimitNOFILE=49152 [Install] WantedBy=multi-user.target
Nous devons rendre ce fichier exécutable :
sudo chmod 664 /etc/systemd/system/mattermost.service
Il faut ensuite recharger systemd afin qu'il s'apperçoive qu'un nouveau service est disponible :
sudo systemctl daemon-reload
On peut ensuite configurer le démarrage du service et le lancer :
sudo systemctl enable mattermost.service sudo systemctl start mattermost.service
Configuration du Pare-Feu
Il nous reste à ouvrir le port 8065 afin que notre serveur Mattermost soit accessible de l'extérieur :
sudo firewall-cmd --permanent --zone=public --add-port=8065/tcp sudo firewall-cmd --reload