CentOS8にmattermostを構築してみた

目的

Slackとか色々あるけどオンプレで構築ができるSlackライクなチャットを構築できるようにしておこうかと思った。後はチャットと他の製品連携させるための環境を作ってみたかった

 

環境

VirtualBOXcentos環境を用意

・Centos8.2を建てる

 

mattermost構築

基本的にmattermostの公式インストールガイドの通りインストールするだけ

docs.mattermost.com

 

Centos8系の手順はないがCentos7の手順で基本的に問題ない(正確にはRHEL7の手順)

 

Postgresqlのインストール

MySQLもあるがなんとかくPostgresを選択する

mattermostの手順では9.4 だが、12.3(構築時に最新のバージョン)を使用するためPostgresqlの公式ページでスクリプトをコピーする

www.postgresql.org

 

バージョンと O Sを選択するとインストールして起動までしてくれるスクリプトを用意してくれる

f:id:hirosas:20200628153124p:plain

一応コマンドも載せておく

※コマンド実行するとき使用しているユーザによってはrootのパスワード求められるのでそこは適宜 sudoコマンドをつけてください

dnf install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf -qy module disable postgresql
dnf install postgresql12-server
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12

 

上記コマンドを実行するとPostgresの準備を進めるためにmattermostのインストールガイドに沿って、DBの作成とユーザ作成、権限の付与を行う

 

使用するコマンドはインストールガイドに書いてある通りなのでそちらを参照してください

今回は以下のようにDBとユーザを準備(インストールガイドのままですね)

 

DB:mattermost

ユーザ:mmuser

 

次に、Postgresqlにmattermostサーバが接続できるようにpg_hba.confファイルを編集する

インストールガイドに基本的には従いつつ、リモート接続はDBとユーザを限定し、md5認証するようにしました。ちなみにデータベースは外だししないのでローカル に限定するようにしてます(あくまで検証環境なので)

 

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host mattermost mmuser 127.0.0.1/32 md5

# IPv6 local connections:
host mattermost mmuser ::1/128 md5

 

 mattermostのインストール

こちらもインストールガイドに従って進めれば問題ないです

Postgresと接続するためにconfig.jsonファイルを編集する必要があります

 

書いてある通りですね。デフォルトだとmysqlになっているので要修正です。sslmodeをdisableにしておかないと起動時にSSLエラーが発生します。SSLの設定をちゃんとすればならないのかは確かめていないです。まあインストールガイドに従ってやれば問題ないでしょう

 

  1. Set "DriverName" to "postgres"
  2. Set "DataSource" to the following value, replacing <mmuser-password> and <host-name-or-IP> with the appropriate values:
"postgres://mmuser:<mmuser-password>@<host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10"

 

あとはmattermostの起動試験を行う(インストールディレクトリ配下にある/bin/mattermostを実行する)

正しく起動できたらサービス化しておくと後で便利です。これもインストールガイドに書いてありますね。

 

Nginxでリバースプロキシを設定する

いろいろなサービスを実行するときはリバースプロキシを設定しておくと便利ということで今回試しに設定をしました

 

nginxのインストール

repoファイルを作成する

 

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/8/$basearch/
gpgcheck=0
enabled=1 

 

 今回はcentos8なのでurlもそのように指定

 

そのままyumでインストールしてもバンドルされているものがインストールされるのでrepoをちゃんと指定してやる(ここはインストールガイド通りではない)

sudo yum --disablerepo=AppStream --enablerepo=nginx install nginx

 このコマンドで1.18.0がインストールできた。

 

リバースプロキシの設定
/etc/nginx/conf.d/mattermostを作成して以下の内容をコピペし、自分の環境に合わせて修正する
特に赤字のところは自分の環境にすること。serverはmattermostのことなので今回は127.0.0.1を設定し、Servernameは特に設定していないのでlocalhostにしておいた
 

upstream backend {
server 10.10.10.2:8065;
keepalive 32;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
listen 80;
server_name mattermost.example.com;

location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
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_buffers 256 16k;
proxy_buffer_size 16k;
client_body_timeout 60;
send_timeout 300;
lingering_timeout 5;
proxy_connect_timeout 90;
proxy_send_timeout 300;
proxy_read_timeout 90s;
proxy_pass http://backend;
}

location / {
client_max_body_size 50M;
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_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache mattermost_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_http_version 1.1;
proxy_pass http://backend;
}
}

 

 作成したファイルをデフォルトにするようにリンクを作成する

sudo ln -s /etc/nginx/conf.d/mattermost /etc/nginx/conf.d/default.conf

 

そして、nginxのサービスを再起動する。

しかし、ちゃんと再起動できませんでした。

 

エラーを確認すると権限がだめとのこと

nginx: [emerg] chown("/var/cache/nginx", 972) failed (13: Permission denied)

 権限を確認すると今はrootがオーナーになっていました。

なのでnginxをオーナーにしてリトライするとサービスの再起動ができました。(モード変更でも良かったかな?試してませんが)

 

これで準備ができました。curl localhost をしてみます。

<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>

どうやらどこかで止まっているようです。

 

調べてみるとどうやらSElinuxで止められていることがあるらしいとのこと。なので通るように設定します

sudo setsebool httpd_can_network_connect on -P

 

改めて確認するとmattermostの初期画面が出てきました。

どうやらリバースプロキシの設定が正しくできたようです。

 

以上で、mattermostの構築からnginxを用いたリバースプロキシの設定までが完了しました。

初めてCentos8を使用したりリバースプロキシの設定を行いましたが、mattermostのインストールガイドの丁寧さには大変助けられました(自分で考える必要がほとんどないですね)

 

久しぶりにSElinuxの罠に嵌まりましたが、安易に無効にせずセキュリティも考えながら構築したいですね。

 

今後mattermostと何かを連携させて遊んでみようと思うので気が向いたら何かしら書きたいと思います。

 

以上