Ontslacken
Slack-alternatief om zelf te hosten
Het grootste voordeel van nieuwerwetse groeps-chatsystemen is de lage instapdrempel. Bij de oudere chatprotocollen XMPP en IRC heb je een client nodig die je moet configureren. Voor Slack en dergelijke volstaat een browser. Een ander voordeel is de doorzoekbare gespreksgeschiedenis. Anders is het lastig om een gesprek waar je middenin valt te volgen.
Marktleider op het gebied van groepschats is Slack. Dat is inmiddels aardig populair. Maar het is in handen van een Amerikaans bedrijf, zodat de hele bedrijfsinterne chatcommunicatie op servers in de VS komt te staan. Dat wordt precair op het moment dat ontwikkelaars het over een nieuwe feature van hun eigen product hebben of de marketingafdeling de campagne van een nog geheime release aan het plannen is.
Groeps-chatsystemen als Slack veranderen de communicatie binnen een bedrijf wezenlijk. Met Mattermost zet je snel zelf een systeem op dat net zo makkelijk werkt als Slack en minder privacyrisico's heeft.
Dergelijke informatie hou je liever in eigen huis.
Rondom Slack is een hele verzameling groeps-chatsystemen ontstaan, waaronder HipChat, RocketChat, Let's Chat en Mattermost. Een deel daarvan is closedsource en wordt, net als Slack, alleen als Software-asa-Service (SaaS) aangeboden. Het gebruik van de basisversie van Slack is gratis, maar vanaf 5 GB opslagruimte of voor uitgebreide functies moet je per maand gaan betalen. Als alternatief zijn er opensourceoplossingen 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-Directoryaanmelding en tweefactor-authenticatie moet je betalen.
Je kunt Mattermost niet alleen met bijna elke browser gebruiken. Er zijn ook clients voor Linux, Windows en macOS die een vergelijkbare functieomvang bieden. Op mobiel gebied hebben de Mattermostontwikkelaars apps voor iOS en Android gemaakt.
Mattermost ondersteunt vanzelfsprekend transportversleuteling via TLS. Heel handig is dat je daarbij automatisch een certificaat door Let's Encrypt voor je server kunt laten maken. End-to-end versleuteling zoals bij WhatsApp, Threema en Signal is er echter niet.
Daarnaast zijn er ettelijke plug-ins voor Mattermost, bijvoorbeeld voor het versiebeheersysteem 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 chatbericht een bepaalde actie start – bijvoorbeeld een nieuw buildproces voor een nieuwe softwareversie.
De Mattermost-ontwikkelaars houden ook rekening met compatibiliteit 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 importfunctie berichten en bestanden uit Slack meenemen. Met wat geluk raak je niets kwijt. Als er een bestaand chatsysteem 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 ontwikkelaars adviseren minstens 4 GB werkgeheugen en 45 GB schijfruimte. We konden Mattermost met een handvol gebruikers ook met maar 1 GB aan werkgeheugen 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 databaseadministrator onthoudt.
Als je Debian 8 Jessie gebruikt, moet je een nieuwere MYSQL-versie uit de officiële repository van het project installeren. Op de website van Mattermost staat daar een Debian-pakket voor dat de officiële MySQLrepository op je systeem installeert. Daarmee krijg je dan ook toekomstige updates van de MySQL-server. De link daarheen en alle andere verwijzingen 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 configureren 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-commandline-client met het commando mysql -u root -p. Na het intypen van het bij de installatie opgegeven rootwachtwoord 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 aangemaakte database mattermost. Verlaat de MySQL-client met exit.
Installatie
Helaas zijn er van Mattermost zelf geen distributiespecifieke, maar alleen voorgecompileerde pakketten en docker-images. Het meest recente pakket staat op de downloadpagina 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 pakketmanager 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, bijvoorbeeld voor het versiebeheersysteem
GitHub en GitLab"
met de database en de folder /opt/mattermost/config/.
Het Mattermost-proces moet later rechtstreeks vanuit internet bereikbaar zijn, dus moet je daar een eigen gebruiker voor aanmaken. Met useradd --system --usergroep mattermost maak je zowel een systeemgebruiker 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 systeempoorten (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 Unitbestand voor het starten door Systemd, dat moet je zelf maken. Zet de volgende regels in het bestand /etc/systemd/system/ mattermost.service:
[Unit]
Description=Mattermost After=syslog.target network.target
mysql.service
Requires=mysql.service
[Service]
Type=simple
User=mattermost
Group=mattermost ExecStart=/opt/mattermost/bin/platform WorkingDirectory=/opt/mattermost Restart=always
RestartSec=10
LimitNOFILE=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 basisconfiguratie van Mattermost staat in het bestand /opt/mattermost/config/config. json. Daar vind je in het deel SqlSettings de database-instellingen. 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.
Configureren
Ga met je browser naar de interface van Mattermost. Maak een gebruikersaccount en een team aan. Vervolgens kun je in het teamoverzicht bij Account Settings bij Display de taal op Nederlands zetten, maar dat is nog een alfaversie en verre van compleet.
Je configureert Mattermost met de System Console. Die is ook via het menu bereikbaar. Je vindt de optie Configuration onder GENERAL. Naast de server-url en het poortnummer kun je ook instellen of Mattermost TLS moet gebruiken. We raden dringend aan om dat te doen. Een bijzonder prettige bijkomstigheid is de mogelijkheid om automatisch Let'sEncrypt-certificaten te genereren en ook zelfstandig 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 certificaten. Je kunt ook reeds aanwezige SSL-certificaten invoeren. Onder de Let'sEncrypt-configuratie 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-certificaten en meldt zich dan via HTTPS.
Finetuning
Om de beveiliging te verbeteren, moet je – voor zover mogelijk – bij 'Users and Teams' het laten aanmaken van accounts beperken tot bepaalde e-maildomeinen. Om ervoor te zorgen dat niet zomaar iedereen zich kan registreren, moet je bij 'SECURITY / Sign Up' instellen dat het aanmaken van een account bevestigd moet worden met een e-mailverificatie.
Om privacyproblemen te voorkomen, loont het om eens te kijken naar de instellingen bij 'NOTIFICATIONS / Mobile Push'. De content van alle pushmeldingen loopt via de centrale servers van Apple of Google. Als je daar bedenkingen bij hebt, moet je de content van pushberichten beperken tot kanaal en gebruikersnaam. Je kunt de pushberichten ook helemaal uitschakelen. Dat betekent echter dat de Mattermostgebruikers niet meer over nieuwe meldingen geïnformeerd worden en gedwongen zijn om regelmatig te kijken of er nog wat nieuws is.
De om de paar weken verschijnende updates moet je helaas handmatig installeren. Je kunt dan de bestaande Mattermost-folder simpelweg een andere naam geven en na het installeren 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 gebruikersrechten 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 geschiktere infrastructuur gebruiken dan we hier hebben gedaan. Hoe je een Mattermost-installatie over twee of drie servers verdeelt en wat daarvoor nodig is, leggen de Mattermostontwikkelaars uitvoerig uit in hun projectdocumentatie. (nkr)