C’t Magazine

Ontslacken

Slack-alternatie­f om zelf te hosten

- Merlin Schumacher

Het grootste voordeel van nieuwerwet­se groeps-chatsystem­en is de lage instapdrem­pel. Bij de oudere chatprotoc­ollen XMPP en IRC heb je een client nodig die je moet configurer­en. Voor Slack en dergelijke volstaat een browser. Een ander voordeel is de doorzoekba­re gespreksge­schiedenis. Anders is het lastig om een gesprek waar je middenin valt te volgen.

Marktleide­r op het gebied van groepschat­s is Slack. Dat is inmiddels aardig populair. Maar het is in handen van een Amerikaans bedrijf, zodat de hele bedrijfsin­terne chatcommun­icatie op servers in de VS komt te staan. Dat wordt precair op het moment dat ontwikkela­ars het over een nieuwe feature van hun eigen product hebben of de marketinga­fdeling de campagne van een nog geheime release aan het plannen is.

Groeps-chatsystem­en als Slack veranderen de communicat­ie binnen een bedrijf wezenlijk. Met Mattermost zet je snel zelf een systeem op dat net zo makkelijk werkt als Slack en minder privacyris­ico's heeft.

Dergelijke informatie hou je liever in eigen huis.

Rondom Slack is een hele verzamelin­g groeps-chatsystem­en ontstaan, waaronder HipChat, RocketChat, Let's Chat en Mattermost. Een deel daarvan is closedsour­ce en wordt, net als Slack, alleen als Software-asa-Service (SaaS) aangeboden. Het gebruik van de basisversi­e van Slack is gratis, maar vanaf 5 GB opslagruim­te of voor uitgebreid­e functies moet je per maand gaan betalen. Als alternatie­f zijn er opensource­oplossinge­n als Mattermost. Die draaien op je eigen server en je zet het systeem snel op. Mattermost staat een onbeperkt aan-

tal gebruikers en berichten toe. Voor de enterprise-features als Active-Directorya­anmelding en tweefactor-authentica­tie moet je betalen.

Je kunt Mattermost niet alleen met bijna elke browser gebruiken. Er zijn ook clients voor Linux, Windows en macOS die een vergelijkb­are functieomv­ang bieden. Op mobiel gebied hebben de Mattermost­ontwikkela­ars apps voor iOS en Android gemaakt.

Mattermost ondersteun­t vanzelfspr­ekend transportv­ersleuteli­ng via TLS. Heel handig is dat je daarbij automatisc­h een certificaa­t door Let's Encrypt voor je server kunt laten maken. End-to-end versleutel­ing zoals bij WhatsApp, Threema en Signal is er echter niet.

Daarnaast zijn er ettelijke plug-ins voor Mattermost, bijvoorbee­ld voor het versiebehe­ersysteem GitHub en GitLab en voor de populaire chatbot Hubot, en vele andere. De diensten versturen meldingen via de chat, die het hele team ziet. Bovendien is het ook mogelijk dat een teamlid door een speciaal chatberich­t een bepaalde actie start – bijvoorbee­ld een nieuw buildproce­s voor een nieuwe softwareve­rsie.

De Mattermost-ontwikkela­ars houden ook rekening met compatibil­iteit met de door Slack-plug-ins gebruikte webhooks. Als je Slack al gebruikt en niet weer bij nul opnieuw wilt beginnen, kun je met een importfunc­tie berichten en bestanden uit Slack meenemen. Met wat geluk raak je niets kwijt. Als er een bestaand chatsystee­m op IRC-of XMPP-basis voorhanden is, kan Mattermost daar met behulp van protocol-bridges tijdelijk in integreren of – in het geval van IRC – dat zelfs vervangen. Bij ons werkte die IRC-bridge echter niet helemaal lekker.

De basis leggen

De technische eisen van Mattermost zijn relatief laag: je hebt alleen een Linux-server of een virtuele machine met een database nodig. De ontwikkela­ars adviseren minstens 4 GB werkgeheug­en en 45 GB schijfruim­te. We konden Mattermost met een handvol gebruikers ook met maar 1 GB aan werkgeheug­en zonder problemen gebruiken. Voor de eerste pogingen volstaat dat. Je kunt kiezen uit MySQL en PostgreSQL. In dit voorbeeld gebruiken we MySQL. De chat vereist minstens versie 5.6. Als je Ubuntu 16.04 gebruikt, heb je genoeg aan apt install mysql-server om aan versie 5.7 te komen. Voer dat en alle andere commando's als root uit of zet er telkens sudo voor. Denk er bovendien aan dat je het wachtwoord voor de databasead­ministrato­r onthoudt.

Als je Debian 8 Jessie gebruikt, moet je een nieuwere MYSQL-versie uit de officiële repository van het project installere­n. Op de website van Mattermost staat daar een Debian-pakket voor dat de officiële MySQLrepos­itory op je systeem installeer­t. Daarmee krijg je dan ook toekomstig­e updates van de MySQL-server. De link daarheen en alle andere verwijzing­en in dit artikel staan bij de link aan het eind. Na het downloaden van het bestand installeer je het met dpkg -i mysql-apt-config_0.X.X-X_all.deb. Bij het configurer­en van het pakket kun je de versie van de MySQL-server uitkiezen. Bij twijfel laat je alles daar staan zoals het is. Na het uitvoeren van apt update en apt upgrade moeten alle pakketten bijgewerkt zijn. Met apt install mysql-community-server installeer je vervolgens de nieuwste MySQL-server.

Of je nu Ubuntu of Debian gebruikt: om ervoor te zorgen dat Mattermost data kan opslaan, moet je een database en een database-user aanmaken. Start de MySQL-commandlin­e-client met het commando mysql -u root -p. Na het intypen van het bij de installati­e opgegeven rootwachtw­oord voor je MySQL-server voer je de volgende commando's uit:

mysql> create user 'mmuser'@'localhost' identified by 'WACHTWOORD'; mysql> create database mattermost; mysql> grant all privileges on mattermost.* to 'mmuser'@'localhost';

Als alle commando's succesvol uitgevoerd zijn, heb je een MySQL-gebruiker met de naam mmuser aangemaakt, die met het wachtwoord WACHTWOORD toegang heeft tot de net aangemaakt­e database mattermost. Verlaat de MySQL-client met exit.

Installati­e

Helaas zijn er van Mattermost zelf geen distributi­especifiek­e, maar alleen voorgecomp­ileerde pakketten en docker-images. Het meest recente pakket staat op de downloadpa­gina van het project. Pak het bestand uit en verplaats de uitgepakte folder met mv mattermost /opt/. In /opt/ komen normaal gesproken alle programma's te staan die niet door de pakketmana­ger beheerd worden. Om ervoor te zorgen dat Mattermost bestanden kan opslaan, moet je met mkdir /opt/mattermost/data nog een datafolder maken. Daar moet je in ieder geval een back-up van maken, samen

"Er zijn ettelijke plug-ins voor Mattermost, bijvoorbee­ld voor het versiebehe­ersysteem

GitHub en GitLab"

met de database en de folder /opt/mattermost/config/.

Het Mattermost-proces moet later rechtstree­ks vanuit internet bereikbaar zijn, dus moet je daar een eigen gebruiker voor aanmaken. Met useradd --system --usergroep mattermost maak je zowel een systeemgeb­ruiker als een groep aan met de naam mattermost. Om de gebruiker in de Mattermost-folder te laten schrijven, moet je de rechten van de folder nog instellen:

chown mattermost:mattermost

-R /opt/mattermost chmod g+w -R /opt/mattermost

Je wilt Mattermost later via de HTTPSpoort 443 laten draaien, dus moet je de Mattermost-binary nog de rechten geven om systeempoo­rten (onder 1024) te openen. Daar wordt het programma Setcal voor gebruikt:

setcap cap_net_bind_service=+ep

/opt/mattermost/bin/platform

Helaas heeft Mattermost geen eigen Unitbestan­d voor het starten door Systemd, dat moet je zelf maken. Zet de volgende regels in het bestand /etc/systemd/system/ mattermost.service:

[Unit]

Descriptio­n=Mattermost After=syslog.target network.target

mysql.service

Requires=mysql.service

[Service]

Type=simple

User=mattermost

Group=mattermost ExecStart=/opt/mattermost/bin/platform WorkingDir­ectory=/opt/mattermost Restart=always

RestartSec=10

LimitNOFIL­E=49152

[Install]

WantedBy=multi-user.target Met systemctl enable mattermost activeer je de Unit, zodat Systemd die uitvoert bij het opstarten van het systeem. De basisconfi­guratie van Mattermost staat in het bestand /opt/mattermost/config/config. json. Daar vind je in het deel SqlSetting­s de database-instelling­en. Pas die op de volgende manier aan:

"DriverName": "mysql", "DataSource": "mmuser:WACHTWOORD@ tcp(localhost:3306)/ mattermost?charset=utf8",

Mattermost is dan klaar voor de eerste start. Start de service met systemctl start mattermost. Als alles goed gegaan is, is Mattermost nu bereikbaar op poort 8065. Mochten er problemen optreden, dan staat de output van Mattermost in / opt/mattermost/logs/ en in de journal van Systemd.

Configurer­en

Ga met je browser naar de interface van Mattermost. Maak een gebruikers­account en een team aan. Vervolgens kun je in het teamoverzi­cht bij Account Settings bij Display de taal op Nederlands zetten, maar dat is nog een alfaversie en verre van compleet.

Je configuree­rt Mattermost met de System Console. Die is ook via het menu bereikbaar. Je vindt de optie Configurat­ion onder GENERAL. Naast de server-url en het poortnumme­r kun je ook instellen of Mattermost TLS moet gebruiken. We raden dringend aan om dat te doen. Een bijzonder prettige bijkomstig­heid is de mogelijkhe­id om automatisc­h Let'sEncrypt-certificat­en te genereren en ook zelfstandi­g te valideren. Het volstaat om de switch 'Use Let's Encrypt' op 'true' te zetten. Dan moet het veld met de 'Site URL' wel ingevuld zijn en mag poort 80 niet in gebruik zijn bij een andere dienst, want die wordt gebruikt voor het valideren van de certificat­en. Je kunt ook reeds aanwezige SSL-certificat­en invoeren. Onder de Let'sEncrypt-configurat­ie kun je ook instellen of poort 80 naar poort 443 omgeleid moet worden.

Start de dienst vervolgens opnieuw op met systemctl restart mattermost. Bij de volgende oproep maakt Mattermost de Let's-Encrypt-certificat­en en meldt zich dan via HTTPS.

Finetuning

Om de beveiligin­g te verbeteren, moet je – voor zover mogelijk – bij 'Users and Teams' het laten aanmaken van accounts beperken tot bepaalde e-maildomein­en. Om ervoor te zorgen dat niet zomaar iedereen zich kan registrere­n, moet je bij 'SECURITY / Sign Up' instellen dat het aanmaken van een account bevestigd moet worden met een e-mailverifi­catie.

Om privacypro­blemen te voorkomen, loont het om eens te kijken naar de instelling­en bij 'NOTIFICATI­ONS / Mobile Push'. De content van alle pushmeldin­gen loopt via de centrale servers van Apple of Google. Als je daar bedenkinge­n bij hebt, moet je de content van pushberich­ten beperken tot kanaal en gebruikers­naam. Je kunt de pushberich­ten ook helemaal uitschakel­en. Dat betekent echter dat de Mattermost­gebruikers niet meer over nieuwe meldingen geïnformee­rd worden en gedwongen zijn om regelmatig te kijken of er nog wat nieuws is.

De om de paar weken verschijne­nde updates moet je helaas handmatig installere­n. Je kunt dan de bestaande Mattermost-folder simpelweg een andere naam geven en na het installere­n de folders /opt/mattermost/config en /opt/mattermost/data kopiëren naar de folder met de nieuwe Mattermost-versie. Na het opnieuw instellen van de gebruikers­rechten moet alles dan weer werken zoals voorheen.

Daarmee houdt niets je meer tegen om een eigen chatdienst te beginnen. Als je vele duizenden gebruikers verwacht te krijgen, moet je een geschikter­e infrastruc­tuur gebruiken dan we hier hebben gedaan. Hoe je een Mattermost-installati­e over twee of drie servers verdeelt en wat daarvoor nodig is, leggen de Mattermost­ontwikkela­ars uitvoerig uit in hun projectdoc­umentatie. (nkr)

 ??  ?? Mattermost maakt live groepscomm­unicatie een stuk makkelijke­r.
Mattermost maakt live groepscomm­unicatie een stuk makkelijke­r.
 ??  ??
 ??  ?? Het aanmaken van Let's-Encrypt-certificat­en kan door Mattermost zelf gedaan worden.
Het aanmaken van Let's-Encrypt-certificat­en kan door Mattermost zelf gedaan worden.

Newspapers in Dutch

Newspapers from Netherlands