Mattermost: Installasjon

Oppdatert:25. februar 2025

Vi kjører Mattermost i et "High Availability Cluster", noe som betyr at man har minst to noder som kommuniserer med hverandre og som er plassert bak en lastbalansert VIP.

Denne dokumentasjonen beskriver installasjon av noder i henholdsvis test- og produksjonsmiljøet vårt, samt en administrativ maskin som brukes for oppdatering av teams og kanaler.

Management / synkronisering

Sørg for at den nye tjeneren har rollene (dette kan man gjøre i Virtprov nå):

  • postmaster_host
  • with_monitoring
  • mattermost_mgmt_server

Per i dag er mm-mgmt02.uio.no plassert på postmasternettet, men ideelt sett burde den vært på et nedsperret nett (f.eks. kategori 4). Ulempen er at man da må bestille tilgang til LDAP eller skrive om til å autentisere mot LDAP (bedre).

Synkroniseringstjeneren krever en Pythonversjon høyere enn 3.6. Skal bli automatisk innstallert av CFEngine. I tillegg ønsker vi at /site/ skal populeres (med katalogene «bin», «lib» og «config»):

echo "prod" > /etc/uio/conf/postmaster-release

TODO: I tillegg trenger vi en bruker for å kjøre synkoriniseringen, lag mattermost:

useradd --system --user-group mattermost

TODO: Generere en token for synchroniseringen. Initiell synkronisering?

Mattermost-noder

Endel av installasjonen er felles for test- og produksjonsmiljøet. Alle nodene er plassert på kategori 1-nett (eller tilsvarende), noe som betyr at de er åpne for verden. Hvert av miljøene består av to noder, hvor en er plasser i OJD (VLAN 121) og en i KNH (VLAN 4). Vi har tilgang til å bestille VM-er på begge nett i Virtprov.

Det er ikke behov for å bestille ekstra diskplass, siden Mattermost lagrer mesteparten enten i databasen eller på det delte NFS-området.

Sørg for at den nye tjeneren har rollene under. Alle i postmastergruppen kan gjøre dette i Virtprov nå, alternativt i mreg (om man har tilgang):

  • postmaster_host
  • mattermost_server
  • with_monitoring

Test og produksjon bruker samme lisens. Den distribueres med CFEngine og lastes automatisk inn ved oppstart (se konfigurasjonen i Git). Lisensnøkkelen ligger også i Vault.

Testmiljøet

For nye maskiner må det bestilles tilgang til:

  • NFS området /net/app-evs/mattermost-test-data
  • Databasen mm_test på dbpg-hotel-utv.uio.no

Databasenavn, -bruker og -passord er lagret i Vault.

Produksjonsmiljøet

For nye maskiner må det bestilles tilgang til:

  • NFS området /net/app-evs/mattermost-data
  • Databasen mm_prod på dbpg-mattermost01.uio.no

Databasenavn, -bruker og -passord er lagert i Vault.

Install av maskin

NB! Det er gjort noen endringer i denne dokumentasjonen etter at produksjonsmiljøet ble installert, bl.a. fordi CFEngine-oppsettet er utvidet, som ikke er testet.

Mattermost blir installert på /opt. Utvid disken:

lvextend -L+20g /dev/internvg/opt
xfs_growfs /dev/internvg/opt

Last ned siste versjon av Mattermost, «Enterprise Edition». Dette må være samme versjon som det de andre nodene kjører. Oppdater de andre nodene hvis de ligger etter i versjon.

Last ned siste versjonen, i dette eksemplet 5.19.1:

cd /tmp/
wget https://releases.mattermost.com/5.19.1/mattermost-5.19.1-linux-amd64.tar.gz

Pakk ut og kopier over filene:

tar -zxvf /root/mattermost-5.19.1-linux-amd64.tar.gz
mv -i ./mattermost /opt

Opprett noen mapper vi trenger:

mkdir /site
mkdir -p /var/www/mattermost/

Opprett bruker og sett eierskap (sett UID pga. delt data-område?)

useradd --uid 496 --system --user-group mattermost
chown -R mattermost:mattermost /opt/mattermost
chmod -R g+w /opt/mattermost

Tagg tjeneren som «prod» elller «test» basert på tjenernavn):

echo ${HOSTNAME:3:4} > /etc/uio/conf/postmaster-release
cat /etc/uio/conf/postmaster-release
/var/cfengine/bin/cf-agent -K -I

Start autofs og lag symbolsk lenke til NFS-området med delte data:

systemctl enable autofs
systemctl start autofs

if [[ "${HOSTNAME:3:4}" == "test" ]]; then
    SHARE=/net/app-evs/mattermost-test-data
else
    SHARE=/net/app-evs/mattermost-data
fi

cd $SHARE
chown mattermost:mattermost .
ln -s $SHARE /opt/mattermost/data

Generer oppdatert konfigurasjon:

/site/bin/mattermost-generate-config-file

«nginx» og sertifikater skal bli distribuert av CFEngine, inkludert root CA for OCSP Stapling og DH Parameter Tillat nginx å koble til localhost:8065 og :8074:

semanage port -a -t http_port_t -p tcp 8065
semanage port -a -t http_port_t -p tcp 8074

Start opp nginx:

systemctl enable nginx
systemctl start nginx

Skru på og start Mattermost-tjenesten:

systemctl enable mattermost
systemctl start mattermost

Mattermost har en egen produksjons-tagg for om tjeneren skal være i i LVS eller ikke. Oppdater den:

/site/bin/mattermost-add-prodtag.sh
/site/bin/mattermost-check-server-status.py
/sbin/restorecon -Fv /var/www/mattermost/check.txt

Det er lagt til en egen datadisk på 100G i produksjon, ta i bruk halvparten i første omgang:

pvcreate /dev/sdb
vgcreate datavg /dev/sdb

lvcreate -L 50G -n data datavg
mkfs.xfs /dev/datavg/data

mkdir -p /data
echo "/dev/mapper/datavg-data  /data                   xfs     defaults        0 0" >> /etc/fstab
mount /data

Nett

START

Sett opp IPv6 på tjeneren, er gjort med:

# mm-prod01
nmcli con mod ens192 ipv6.method manual ipv6.address 2001:700:100:120::215/64 ipv6.gateway 2001:700:100:120::1
nmcli con up ens192

# mm-prod02
nmcli con mod ens192 ipv6.method manual ipv6.address 2001:700:100:52::34/64 ipv6.gateway 2001:700:100:52::1
nmcli con up ens192

IPv6-adressene ble regisrert i mreg/DNS før oppsett på tjenerne.

SLUTT

/etc/sysctl.d/90-lvs.conf og /etc/modules-load.d/lvs.conf distribueres av CFEngine, sørg for at nettverksinnstillingene der er i effekt før VIP-grensesnittet settes opp:

echo "DEVICE=tunl0
BOOTPROTO=static
IPADDR=129.240.13.135
NETMASK=255.255.255.255
ONBOOT=yes
TYPE=ipip
ZONE=public" > /etc/sysconfig/network-scripts/ifcfg-tunl0

osv. osv.

iptables

«iptables» skal være installert av CFEngine, skru på:

systemctl enable iptables
systemctl enable ip6tables

Fjerne firewalld:

systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld

Start iptables:

systemctl start iptables
systemctl start ip6tables