⚠️ 記事内に広告を含みます。

slackの代わりにmattermostサーバをlightsailで建てる

人気チャットのslackはビジネス用途でもよく利用されていますが、最近値上げや仕様変更で3か月以前の履歴が削除されるようになりました。

まったりslackを利用している人にとっては履歴が3か月になるのはちょっと不便ということでslackライクなOSSであるmattermostを試してみました。

https://ja.wikipedia.org/wiki/Mattermost

mattermostはslackクローンと呼ばれるオープンソースチャットツール

mattermost(マターモスト)はslackのオープンソース版と呼ばれることもあるslackライクなチャットツールです。

https://github.com/mattermost/mattermost-server

最近slackの仕様変更を受けいれられないユーザがmattermostへの移行を検討してるようです。

mattermostの特徴や利点

mattermostを検討する必要がなさそうな人は

  • 現状のチャットツールに文句はない (主にslack, teams, chatwork, discode, etc)
  • 色々設定するのが面倒
  • お金持ち

上に当てはまらない人は検討する価値はあるかもしれないです。

mattermostの特徴や利点は

  • slackにあるような保存制限なし
  • 無料(OSS)
  • アプリ(android, ios)がある
  • slackに操作感が似てる
  • 自分のサーバに建てられる 

lightsailにmattermostサーバを立てる理由

mattermostサーバを立てる方法はいくつかありますが、

  • 安価
  • いろんな用途に使える(webサーバとして利用中のものが余ってた)
  • x64のCPU
  • 独自ドメインを割り当てて常時利用可能なサーバとして建てたい

などがlightsailを選んだ理由になります。

他のVPSを契約していればそれでよいと思います。手軽で使いなれていて、リソースの余ったlightsailを利用しました。

fargateみたいなコンテナを動かすようなタイプは管理が複雑になったり詰みあがると高価になるので避けました。herokuのようなマネージドサービスにも建てられますが同じく安価かつ本番っぽく使うならlightsailに(余ってるし)

lightsailを構築 – dockerで起動

lightsail内にmysqlを立てて作成することもできますが、サクッと試すだけならdockerで起動するのが環境も汚さないのでよいです。

まずはlightsailを立ててdockerをインストールしましょう。

lightsail を起動してdockerを入れる

プランは二番目に安いプランのlightsailを使っています。

5 USD/月 1GB MEM, 1 core, 40GB SSD

1. 起動して固定IPを割り当てる(固定IPは必須ではない)

2. ec2-userでSSHする

3. dockerをインストール

# sudo su -
# amazon-linux-extras install docker
# usermod -a -G docker ec2-user
# systemctl start docke

4. docker-composeをインストール

# curl -SL https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# docker-compose
 出力をみる

mattermostをdockerで動かす

# cd /usr/local/src/

# git clone https://github.com/mattermost/docker && cd docker
# cp env.example .env
# sed -e 's/mm.example.com/mydomain.com/g'  -i env.example
  # mydomain.comはlightsailのIPをAレコードにもつ自分のドメイン 

# mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes} && sudo chown -R 2000:2000 ./volumes/app/mattermost

# docker-compose -f docker-compose.yml -f docker-compose.without-nginx.yml up -d

ブラウザからmydomain.com:8065にアクセスする

停止する時
# docker-compose -f docker-compose.yml -f docker-compose.without-nginx.yml down 

nginxを起動してmattermostの8065にリバースプロキシしてSSL化も行う

現状mattermostにアクセスするには

http://mydomain.com:8065

というようにポート:8065指定が必要です。
※ブラウザはhttp://では80, https://では443ポートをデフォルトで見にいくから

そこで80/443ポートをwebサーバ(nginx)で受けてもらいその通信を8065ポートに流すようにリバースプロキシを設定します。

webサーバはなんでも良いですが、プロキシに定評のあるnginxを使います。

Nginxにプロキシの設定とHTTPS(SSL)の設定を入れる。

/etc/nginx/con.dに下記のconfを設置します。

# アップストリームの設定(ローカルホストの8065(mattermostサーバ)をbackendとして登録)
upstream backend {
    server 127.0.0.1:8065;
}
##proxyキャッシュの設定
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;


# サーバ設定(80)httpはhttpsにリダイレクトする
server {
    listen       80;
    server_name    mydomain.com;
    return 301 https://mydomain.com$request_uri;
}

# proxyの設定 
server {
    listen 443;
    server_name    mydomain.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;
        proxy_read_timeout 600s;
        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_pass http://backend;
    }
        ## ssl setting
        ssl_certificate     /etc/letsencrypt/live/mydomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;

        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout  10m;

        ssl_protocols TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDHE+AESGCM:DHE+aRSA+AESGCM:ECDHE+AESCCM:DHE+aRSA+AESCCM:ECDHE+CHACHA20:DHE+aRSA+CHACHA20:+AES128:+DHE;

}

SSL証明書はLet’sEncryptで取得します。cerrtbotをインストールすれば簡単に証明書を発行できます。

これでhttps://mydomain.comにアクセスすればmttermostを使用できるようになります。

slackのデータをmattermostに移行する

slackのデータを取り出してmattermostにコピーしましょう。

エクスポート方法はURL参照⏬

https://slack.com/intl/ja-jp/help/articles/201658943-ワークスペースのデータをエクスポートする

2 COMMENTS

ichi

こちらの記事を参考にLightsailでmattermostを構築しました。
http://mydomain.com:8065でMattermostが表示されることまでは確認できたのですが
その先のSSL化のところがうまくいきません。
nginxを利用しているとのことですが、こちらはdockerを利用して構築し
dockerコンテナ内でcertbotのインストール、Let’s Encrypt証明書の取得をしているということでしょうか。
nginxの起動の方法についてもご教示いただけますと幸いです。

返信する
ニック・ニーモ

コメントいただきありがとうございます。
>> nginxを利用しているとのことですが、こちらはdockerを利用して構築し
本記事の場合は、nginxは直接でもdockerを利用しても問題なく利用できます。
>> dockerコンテナ内でcertbotのインストール、Let’s Encrypt証明書の取得をしているということでしょうか。
仰る通りです。
>> nginxの起動の方法についてもご教示いただけますと幸いです。
nginxの公式イメージがあるので、これをプルして起動すればnginxを起動できます。
公式イメージ: https://hub.docker.com/_/nginx

起動のコマンドは以下を使えば起動できると思います。
docker run -p 80:8065 nginx

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です