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-mgmt01.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.

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

/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.

Gjort på mm-prod03 og mm-prod04 etter litt støy i logger:

echo "net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf

sysctl -p

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

Feilsituasjon

Dersom tjeneren ikke blir tilgjengelig over ipv6 etter boot, gjør følgende (ssh -4):

[root@mm-prod03 ~]# nmcli con mod ens192 ipv6.method manual ipv6.address 2001:700:100:8041::61/64 ipv6.gateway 2001:700:100:8041::1
[root@mm-prod03 ~]# nmcli con up ens192

[root@mm-prod04 ~]# nmcli con mod ens192 ipv6.method manual ipv6.address 2001:700:100:52::22/64 ipv6.gateway 2001:700:100:52::1
[root@mm-prod04 ~]# nmcli con up ens192