MatterMostをSelf Hostするメモ

1.MatterMostって?

Mattermostは、オープンソースのチャットおよびチームコラボレーションプラットフォームです。
Slackと同様にリアルタイムでのメッセージ交換やファイル共有、チャンネルを活用したコミュニケーション機能を提供します。
Mattermostの大きな特徴は自社サーバー上でのホスティングが可能な点になります。
本記事では、自宅サーバーにてMattermostを展開したのでそのセルフホストメモになります。


2.環境

OS: Ubuntu Server 64bit
※ Raspberry pi等のARM系CPUの場合、MatterMost公式パッケージをビルドできないので注意してください!(ARM向けに修正済みの有志ライブラリをインストールする必要がある)

前提としてDockerのインストール等が完了しているものとします。

3.Mattermost 用 Docker コンテナの準備

3-1. リポジトリのクローンと作業ディレクトリへの移動

git clone https://github.com/mattermost/docker
cd docker

3-2. 設定ファイル (.env) の作成と編集

cp env.example .env
sudo nano .env

最低限設定として「DOMAIN=your.domain.example」を修正する必要があります。
その他にも、以下の設定をしておくと吉
TZ=Asia/Tokyo

3-3. 必要ディレクトリの作成とパーミッション設定

Mattermost のデータ(設定ファイル、ログ、アップロードデータなど)を保存するためのディレクトリ群を作成し、適切なパーミッションを設定します。

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

※この「2000:2000」は、Mattermost コンテナ内で Mattermost プロセスが動作するユーザとグループの ID を指定しています。

4.TLS設定(オプション)

4-1. 証明書の取得方法

  • Let’s Encrypt を利用する場合(本番環境向け)
    Mattermost の公式設定では、NGINX コンテナ内で Certbot を用いて証明書を自動取得する方法が用意されています。
    Mattermost 用の Docker リポジトリ内には、証明書発行用のスクリプト(例:
    scripts/issue-certificate.sh)が用意されており、以下のように実行します。

bash scripts/issue-certificate.sh -d <YOUR_MM_DOMAIN> -o ${PWD}/certs

※任意のドメインに書き換えること
このコマンドにより、Let’s Encrypt から証明書と秘密鍵が取得され、指定したディレクトリ(例:./certs)に保存されます。

処理が完了すると以下のように証明書と秘密鍵が発行されます

  • 発行された証明書は
    /etc/letsencrypt/live/xxxxx/fullchain.pem
    に保存されています。

  • 秘密鍵は
    /etc/letsencrypt/live/xxxxx/privkey.pem
    に保存されています。

  • 自己署名証明書を作成する場合(テスト環境など)
    本番環境でない場合は、以下のように OpenSSL を使って自己署名証明書を作成できます。

openssl req -nodes -new -x509 -keyout server.key -out server.cert -days 3650

作成した server.cert(証明書)と server.key(秘密鍵)を後で NGINX が参照できる場所に配置します。

4-2. 証明書ファイルを Docker 環境で利用できるようにする。

Mattermost 用 Docker 環境の設定ファイル(.env)に証明書ファイルのパスを記述します。

CERT_PATH=/etc/letsencrypt/live/xxxx/fullchain.pem
KEY_PATH=/etc/letsencrypt/live/xxxx/privkey.pem

証明書発行の確認は以下のコマンドで可能です

# Let’s Encrypt の場合
sudo openssl x509 -in /etc/letsencrypt/live/xxxxx/fullchain.pem -text -noout

4-3.NGINX の設定確認と反映

'/etc/nginx/sites-available/' に任意のファイルを作成しNGINX設定ファイルを作成し、例のような設定を保存します

例:

server {
    listen 443 ssl;
    server_name Your-Domain;

    # 証明書パスを設定(Let's Encrypt)
    ssl_certificate     /etc/letsencrypt/live/xxxx/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xxxx/privkey.pem;
    include             /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam         /etc/letsencrypt/ssl-dhparams.pem;

    # Mattermost へのリバースプロキシ設定
    location / {
        proxy_pass          http://localhost:8065;
        proxy_set_header    Host $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 https;
        # WebSocket 対応
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection "upgrade";
        proxy_http_version  1.1;
    }
}

# HTTP (ポート80) から HTTPS へのリダイレクト
server {
    listen 80;
    server_name xxxxxx;
    return 301 https://$host$request_uri;
}

設定ファイルを作成したら、シンボリックリンクの作成を行います

sudo ln -s /etc/nginx/sites-available/xxxxx /etc/nginx/sites-enabled/

NGINX の設定テストを実施し、問題なければリロードします。

sudo nginx -t
sudo systemctl reload nginx

5.Docker コンテナの起動

sudo docker compose -f docker-compose.yml -f docker-compose.without-nginx.yml up 

問題なく起動すれば設定したドメインアドレスにてアカウント作成画面が表示されます。

いいなと思ったら応援しよう!