Skip to main content

Deploy Mattermost on Red Hat Enterprise Linux

Install Mattermost Server on Red Hat Enterprise Linux (RHEL), Rocky Linux, AlmaLinux, Oracle Linux 7+, or CentOS Stream. RHEL doesn't have a signed APT-style repository, so this guide installs from the release tarball with manual systemd setup, then walks through the security configuration RHEL deployments typically need (SELinux contexts, firewalld rules, fapolicyd allow rules).

Step 1: Get a PostgreSQL database

Choose one of:

  • Install PostgreSQL locally on the same host. See the PostgreSQL installation documentation.
  • Use an external PostgreSQL server and collect connection credentials before Step 2.
  • Use a managed database service (AWS RDS, Azure Database for PostgreSQL, etc.).

Step 2: Prepare the database

Follow the database preparation instructions to create the Mattermost database, user, and grants.

Step 3: Download the Mattermost Server tarball

SSH onto the target host and download the release. Replace amd64 with arm64 for ARM-based hardware.

wget https://releases.mattermost.com/11.10.1/mattermost-11.10.1-linux-amd64.tar.gz

Step 4: Install Mattermost Server

Update existing system packages first:

sudo dnf update
sudo dnf upgrade

Extract the tarball, move it into place, and set ownership:

tar -xvzf mattermost*.gz
sudo mv mattermost /opt
sudo mkdir /opt/mattermost/data
sudo useradd --system --user-group mattermost
sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod -R g+w /opt/mattermost

Create the systemd unit file at /etc/systemd/system/mattermost.service:

[Unit]
Description=Mattermost
After=network.target

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

Reload systemd:

sudo systemctl daemon-reload

Step 5: Configure and start the server

Back up the default config before editing:

sudo cp /opt/mattermost/config/config.json /opt/mattermost/config/config.defaults.json

Edit /opt/mattermost/config/config.json and set:

  • SqlSettings.DriverName: "postgres"
  • SqlSettings.DataSource: "postgres://mmuser:<mmuser-password>@<host>:5432/mattermost?sslmode=disable&connect_timeout=10" — replace each placeholder.
  • ServiceSettings.SiteURL: the public URL of your deployment (e.g., https://mattermost.example.com).
  • (Recommended) SupportSettings.SupportEmail: the email address users contact for help.

Start the server:

sudo systemctl start mattermost
curl http://localhost:8065

You should see the Mattermost HTML response. Enable on boot:

sudo systemctl enable mattermost.service

If start fails on a hardened RHEL system, continue to the Hardened RHEL configuration section below before troubleshooting elsewhere — it's almost always SELinux, firewalld, or fapolicyd.

Step 6: Update the server

Tarball-based installs are upgraded manually. See Upgrading Mattermost Server.

Hardened RHEL configuration

Hardened RHEL installs typically require additional configuration for SELinux, firewalld, and fapolicyd. Each is covered below.

RHEL 9 ships with SELinux in enforcing mode. Verify with sestatus. If it's enforcing, set the appropriate contexts before starting Mattermost.

Set the binary context for /opt/mattermost/bin:

sudo semanage fcontext -a -t bin_t "/opt/mattermost/bin(/.*)?"
sudo restorecon -RF /opt/mattermost/bin

Set the directory context for /opt/mattermost. Check current context:

ls -Z /opt/mattermost

If the type is default_t, set a web-application context:

sudo semanage fcontext -a -t httpd_sys_content_t "/opt/mattermost(/.*)?"
sudo restorecon -R /opt/mattermost

Allow Mattermost to bind to port 8065 (or your configured port):

sudo semanage port -l | grep 8065
sudo semanage port -a -t http_port_t -p tcp 8065

Generate a custom policy if SELinux blocks something specific. Check denials:

sudo ausearch -m avc -ts recent
sudo cat /var/log/audit/audit.log | grep denied

Generate a policy module from those denials:

sudo yum install -y policycoreutils-python-utils
sudo grep mattermost /var/log/audit/audit.log | audit2allow -M mattermost_policy
sudo semodule -i mattermost_policy.pp

Restart and verify:

sudo systemctl restart mattermost

References

Remove Mattermost

Stop the server, back up any data you need, then remove the install directory:

sudo systemctl stop mattermost
sudo rm -rf /opt/mattermost
sudo rm /lib/systemd/system/mattermost.service
sudo userdel mattermost

Next steps