Introduction
Mattermost is an open-source platform that is written in React and Golang. It can be used as an alternative messaging platform and utilizes the PostgreSQL or MySQL database in the backend. Mattermost main function is to bring team communication together and offer several features such as file sharing, custom emojis, video calls, messaging (one-on-one or group), and so on.
In this guide, we will take you the process of installing Mattermost on an Ubuntu 18.04 server. We will also configure Nginx as an SSL reverse proxy.
Prerequisites
Before you begin, make sure you have the following:
- A domain name that points to your server IP address
- A non-root user with sudo privileges
- Fully installed Nginx
- A fully installed SSL certificate for your domain.
Step 1 – Creating MySQL Database
Start by installing the MySQL database for Mattermost.
Begin by logging into the MySQL shell:
$ sudo mysql -u root
Next, create a new MySQL database and user for the sake of Mattermost installation. To do, run the command below:
CREATEDATABASE mattermost; GRANT ALL ON mattermost.* TO mattermost@localhost IDENTIFIEDBY'Password';
Note: You can create a more secure password of your choice for the ‘password’ section.
Step 2 – Creating a new user
Now, create a new system user and group for the sake of Mattermost instance. In this case, we will name our user mattermost:
$ sudo useradd -U -M -d /opt/mattermost mattermost
Once you have created a user, go ahead and install Mattermost to your server.
Step 3 – Installing Mattermost Server
To download the latest stable Mattermost version, type:
$ sudo curl -L https://releases.mattermost.com/5.1.0/mattermost-5.1.0-linux-amd64.tar.gz -o /tmp/mattermost.tar.gz
Once the file is downloaded, extract it and transfer it to /opt directory:
$ sudo tar zxf /tmp/mattermost.tar.gz -C /opt
Next, create a storage directory for these files:
$ sudo mkdir -p /opt/mattermost/data
Make sure you change the ownership of the directory to the mattermost user:
$ sudo chown -R mattermost: /opt/mattermost
Go to the >/opt/mattermost/config/config.json file, and set the database to MySQL then fill the database details:
/opt/mattermost/config/config.json
"SqlSettings": { "DriverName": "mysql", "DataSource": "mattermost:P4ssvv0rD@tcp(localhost:3306)/mattermost?charset=utf8,utf8&readTimeout=30s&writeTimeout=30s",
Now, we need to test whether the Mattermost server is working properly. To do so, change into the /opt/mattermost directory then run the command below to start the server:
$cd /opt/mattermost $ sudo -u mattermost bin/mattermost
If the server is working properly, your server should start immediately and you should see the output below:
{"level":"info","ts":1532546921.941638,"caller":"app/server.go:115","msg":"Starting Server..."} {"level":"info","ts":1532546921.9421031,"caller":"app/server.go:154","msg":"Server is listening on [::]:8065"} {"level":"info","ts":1532546921.9541554,"caller":"app/web_hub.go:75","msg":"Starting 2 websocket hubs"}
Now, you can halt the Mattermost server by clicking the combination keys CTRL+Cand proceed to the next step.
Step 4 – Creating a Systemd Unit
To successfully run Mattermost as a service, create a unit file known as mattermost.service in the /etc/systemd/system/ directory.
Open the text file and create the file below:
/etc/systemd/system/mattermost.service
[Unit] Description=Mattermost After=network.target After=mysql.service Requires=mysql.service [Service] Type=notify ExecStart=/opt/mattermost/bin/mattermost TimeoutStartSec=3600 Restart=always RestartSec=10 WorkingDirectory=/opt/mattermost User=mattermost Group=mattermost LimitNOFILE=49152 [Install] WantedBy=mysql.service
Now, inform systemd that a new unit file has been created then restart the Mattermost service using the commands below:
$ sudo systemctl daemon-reload $ sudo systemctl start mattermost
Check to confirm the status of the service with the command below:
$ sudo systemctl status mattermost
The output should look like this:
◠mattermost.service - Mattermost Loaded: loaded (/etc/systemd/system/mattermost.service; disabled; ven Active: active (running) since Wed 2018-08-2518:39:05 UTC; 41s ago Main PID: 3091 (mattermost) Tasks: 18 (limit: 507) CGroup: /system.slice/mattermost.service ├─3091/opt/mattermost/bin/mattermost
If this command doesn’t present any errors, set the Mattermost service to start at boot time:
$ sudo systemctl enable mattermost
Step 5 – Setting up a reverse proxy using Nginx
This tutorial assumes that you have already installed NGINX and configured it with SSL certificate.
Now, create a server block for Mattermost. Open your editor and create the file below:
/etc/nginx/conf.d/example.com.conf
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off; upstream mattermost_backend { server127.0.0.1:8065; } server { listen80; server_name example.com www.example.com; include snippets/letsencrypt.conf; return301 https://example.com$request_uri; } server { listen443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; return301 https://example.com$request_uri; } server { listen443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; access_log /var/log/nginx/example.com-access.log; error_log /var/log/nginx/example.com-error.log; location~ /api/v[0-9]+/(users/)?websocket$ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size50M; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_buffers25616k; proxy_buffer_size16k; proxy_read_timeout600s; proxy_pass http://mattermost_backend; } location / { proxy_http_version1.1; client_max_body_size50M; proxy_set_header Connection ""; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_buffers25616k; proxy_buffer_size16k; proxy_read_timeout600s; proxy_cache mattermost_cache; proxy_cache_revalidateon; proxy_cache_min_uses2; proxy_cache_use_stale timeout; proxy_cache_lockon; proxy_pass http://mattermost_backend; } }
Restart the Nginx server to apply these changes:
$ sudo systemctl reload nginx
Step 6 – Configuring the Mattermost Service
To configure Mattermost service, go to your browser and enter the domain name where you will be directed to the signup page.
Type your email, username, and password, then press the Create Account button to complete the process and create your account.
The first user in your system should have administrator privileges.
Next, you will be prompted to create a new team.
Click the link Create a new team, then type the name of your team then press the Next button.
Now, you will be prompted to select a web for your new team.
Press the Finish button. You will be directed to the Mattermost web interface. Log in as the administrator.
Locate the System Console and open it, click on the username and a new menu will open. Click the link System Console.
Enter the site URL by navigating to the Settings General area and click Configuration.
To ensure the email notifications is enabled, navigate to the Notifications icon, click Email, then change the Enable Email Notifications section from false to true and also enter the SMTP parameters.
You can also use other popular email services including Amazon SES, SendinBlue, Postmark, Mailgun, SendGrid, Mailjet, and Mandrill.
The last step is to restart the Mattermost service to apply these changes:
$ sudo systemctl restart mattermost
Conclusion
Congratulations! Now the Mattermost service is installed successfully on your Ubuntu 18.04 server. You have also set up Nginx as a reverse proxy, and you can start enjoying Mattermost services and work together with your team.
Check out these top 3 VPS services:
- Click here to know more about the Best website hosting.