CentOS 7にMattermostをインストール

## はじめに
Mattermostをインストールします（以下前提）

* PostgreSQL 9.5
* Nginx
* root ユーザーで作業

## 大まかな流れ
以下の公式ドキュメントの手順に沿って進めます
https://docs.mattermost.com/install/install-rhel-7.html

* PostgreSQL Serverのインストール
* Mattermost Server のインストール
* Mattermost の設定

## PostgreSQL Server のインストール

```
# cd
# curl -O https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6672  100  6672    0     0   5086      0  0:00:01  0:00:01 --:--:--  5089
```
```
# yum localinstall pgdg-redhat-repo-latest.noarch.rpm
:
完了しました!
```
```
# yum install postgresql95-server postgresq95-contrib
:
完了しました!
```
initdbのパラメータを指定する場合は環境変数を設定する

```
# export PGSETUP_INITDB_OPTIONS="--locale=ja_JP.UTF8"
# /usr/pgsql-9.5/bin/postgresql95-setup initdb
```
```
# systemctl enable postgresql-9.5
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.5.service to /usr/lib/systemd/system/postgresql-9.5.service.
# systemctl start postgresql-9.5
```
```
# su - postgres
```
データベースを作成します（ロケールは日本にします）

```
$ psql
psql (9.5.24)
"help" でヘルプを表示します.

postgres=# CREATE DATABASE mattermost WITH ENCODING 'UTF8' LC_COLLATE='ja_JP.UTF-8' LC_CTYPE='ja_JP.UTF-8' TEMPLATE=template0;
CREATE DATABASE
```
'mmuser-password' は自身のパスワードを設定します

```
postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password';
CREATE ROLE
```
```
postgres=# \q
$ exit
```

## Mattermost Server のインストール

以下で最新のインストールファイルのURLを確認します
https://mattermost.com/download/
今回は以下とします
https://releases.mattermost.com/5.31.0/mattermost-5.31.0-linux-amd64.tar.gz
wget コマンドが使用できない場合は curl コマンドを使用します

```
# cd
# curl -O https://releases.mattermost.com/5.31.0/mattermost-5.31.0-linux-amd64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  201M  100  201M    0     0  7655k      0  0:00:26  0:00:26 --:--:-- 8125k
```
```
# tar -xvzf mattermost-5.31.0-linux-amd64.tar.gz
mattermost/
:
mattermost/logs/
```
data ディレクトリにはアップロードファイルや画像が保存されるので必要に応じて場所を変えましょう

```
# mv mattermost /opt
# mkdir /opt/mattermost/data
# 
```
```
# useradd --system --user-group mattermost
# chown -R mattermost:mattermost /opt/mattermost
# chmod -R g+w /opt/mattermost
```
```
# vi /opt/mattermost/config/config.json
```
```:/opt/mattermost/config/config.json
:
    "SiteURL": "https://mattermost.example.com",
:
    "DriverName": "postgres",
    "DataSource": "postgres://mmuser:mmuser-pasword@localhost/mattermost?sslmode=disable\u0026connect_timeout=10",
:
```
```
# cd /opt/mattermost
# sudo -u mattermost ./bin/mattermost
{"level":"info","ts":1611110265.8058856,"caller":"app/server.go:225","msg":"Server is initializing..."}
:
{"level":"info","ts":1611110271.9833667,"caller":"app/server.go:983","msg":"Server is listening on [::]:8065","address":"[::]:8065"}
```
以下へ接続できることを確認します
http://mattermost.example.com:8065
Ctrl+C でサーバーを停止します

```
^C{"level":"info","ts":1611110455.7103934,"caller":"app/server.go:721","msg":"Stopping Server..."}
:
{"level":"info","ts":1611110455.7169805,"caller":"app/server.go:799","msg":"Server stopped"}
```
```
# vi /etc/systemd/system/mattermost.service
```
```:/etc/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=syslog.target network.target postgresql-9.5.service

[Service]
Type=notify
WorkingDirectory=/opt/mattermost
User=mattermost
ExecStart=/opt/mattermost/bin/mattermost
PIDFile=/var/spool/mattermost/pid/master.pid
TimeoutStartSec=3600
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target
```
```
# chmod 664 /etc/systemd/system/mattermost.service
# systemctl daemon-reload
# systemctl enable mattermost
# systemctl start mattermost
```
以下へ接続できることを確認します
http://mattermost.example.com:8065

## Mattermost の設定
### メニューの日本語化
まずはチームを作成してチームを表示します
以下を辿って表示言語を変更します
Account Settings＞Display＞Language＞日本語＞Save

### 電子メール通知の設定
システムコンソール＞サイト設定＞通知

* 電子メール通知を有効にする: 有効
* 通知の表示名: No-Reply
* 通知の送信元電子メールアドレス: noreply@example.com
* 保存する

※SMTPサーバがMattermostサーバ上で稼働しているものとします
システムコンソール＞環境＞SMTP

* SMTPサーバーポート: 25
* 接続をテストする
* 保存する

### その他の設定
その他の設定を行います

再起動して変更を反映します

```
# systemctl restart mattermost
```

## SSLの有効化
リバースプロキシを設置することによりSSLを有効化します
また、HTTPSの既定のポート443でアクセスできるようにします
ここでは Nginx がすでにインストールされているものとします
また、/etc/nginx/nginx.conf に include /etc/nginx/conf.d/*.conf が記載されているものとします

設定ファイルを作成します

```
# vi /etc/nginx/conf.d/mattermost.example.com
```
```:/etc/nginx/conf.d/mattermost.example.com
upstream backend {
   server localhost:8065;
   keepalive 32;
}
:
server {
  listen 80 default_server;
  server_name   mattermost.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name    mattermost.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   #ssl on;
   ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
   ssl_session_timeout 1d;
:
```
設定ファイルを有効化します

```
# cd /etc/nginx/conf.d
# ln -s /etc/nginx/conf.d/mattermost.example.com mattermost.example.com.conf
```
```
# systemctl restart nginx
```